易截截图软件、单文件、免安装、纯绿色、仅160KB

类的包访问权限:《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 培训

华杰教育是新乡最专业的软件实训基地,思科网络工程师考试中心、 JAVA、.NET、php软件培训中心、计算机等级考试培训中心  是豫北地区最大的IT软件教育机构!
软件实训:
         课程分为.net和java两个方向,有实训早餐和短期软件培训,
《实训早餐》项目:针对计算机及 ......

Java中hashCode()方法的说明

有许多人学了很长时间的Java,但一直不明白hashCode方法的作用,
我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。  
总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。
你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不 ......

Java学习路线图,专为新手定制的Java学习计划建议





怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西:
   
首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard
Edition,我们经常说到的JDK,就主要指的这个,它是三者的基 ......

OSGi是什么:Java语言的动态模块系统

之前51CTO曾发过一篇文章叫做《OSGi为什么重要:向模块化转移的主攻手
》,里面对于OSGi的优势进行了分析。不过,对于
究竟什么是OSGi,很多人仍然只有一个模糊的概念。本系列(你好,OSGi
)从基础开
始介绍了OSGi。本部分介绍OSGi是什么,以及OSGi容器的一些现状。(注:本文英文原文于08年3月发布在JavaWorld网站) ......

java语言如何调用DLL

java语言调用dll的方法:
1。加载dll,必须是静态方法。
    static{
System.loadLibrary(DllConstants.DLL_PATH);
  }
2。将dll中开发的接口声明为本地接口
   public native String[] getTxt();
   
......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号