类的包访问权限:《Java编程思想》中一段话的困惑
类的包访问权限:《Java编程思想》中一段话的困惑
在《java编程思想第三版》(陈昊鹏 饶若楠等译)的第五章隐藏具体实现中,5.4节的最后一段话是:
“正如前面所提到的,如果没能为类访问权限指定一个访问修饰符,它就会缺省得到包访问权限。这意味着该类的对象可以由包内任何其他类来创建,但包外则是不行的。(一定要记住,相同目录下的所有不具有明确package声明的文件,都被视作是该目录下缺省包的一部分。)然而,如果该类的某个static成员是public的话,则客户端程序员仍旧可以调用该static成员,尽管他们并不能生成该类的对象。”
刚开始我对最后一句话的理解是:如果某个类没有指定访问修饰符,但其中有static成员是public的话,在包外的类中仍然可以调用该类的static的public方法或访问static的public成员字段。
于是我做了下面的实验:(我的classpath没有设置,是默认值,即是当前路径;我CMD的当前路径Thinking in java。)
在Thinking in java\chapter5\下有Test.java,代码如下
package chapter5;
class Test
{
public static int i=0;
public static void print()
{
System.out.println("class Test public static procedure");
}
public void println()
{
System.out.println("class Test public procedure");
}
}
在Thinking in java\下有Test1.java,代码如下
import chapter5.*;
public class Test1
{
public static void main(String[] args)
{
int a;
a=Test.i;
//Test.print();
}
}
接着,编译Test1.java,结果编译器报错,说Test类不是公开类,不可以调用其方法或访问其成员字段。
结论:
1、《Java编程思想》那段话应该是错误的,至少说应该是有歧义的。(手上没有英文原版,所以原版是怎么描述的,不大清楚)
2、具有包访问权限的类,包外的类是不可以调用,无论是一般的方法、字段,还是静态方法及字段。
3、具有包访问权限的类,其成员声明为public和protected是没有意义的,因为在包外不能访问也
相关文档:
华杰教育是新乡最专业的软件实训基地,思科网络工程师考试中心、 JAVA、.NET、php软件培训中心、计算机等级考试培训中心 是豫北地区最大的IT软件教育机构!
软件实训:
课程分为.net和java两个方向,有实训早餐和短期软件培训,
《实训早餐》项目:针对计算机及 ......
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用,
我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。
总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。
你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不 ......
怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西:
首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard
Edition,我们经常说到的JDK,就主要指的这个,它是三者的基 ......
之前51CTO曾发过一篇文章叫做《OSGi为什么重要:向模块化转移的主攻手
》,里面对于OSGi的优势进行了分析。不过,对于
究竟什么是OSGi,很多人仍然只有一个模糊的概念。本系列(你好,OSGi
)从基础开
始介绍了OSGi。本部分介绍OSGi是什么,以及OSGi容器的一些现状。(注:本文英文原文于08年3月发布在JavaWorld网站)
......
java语言调用dll的方法:
1。加载dll,必须是静态方法。
static{
System.loadLibrary(DllConstants.DLL_PATH);
}
2。将dll中开发的接口声明为本地接口
public native String[] getTxt();
......