问题一:比如这个程序库:
package diyi.dier.disan;
class A {
  //内容
}
public class B{
  //内容
}
我的第一个问题就是当编译的时候生成的2个.class文件会自动放在diyi\dier\disan这个文件夹中,对吧?如果我前面的话是对的,那我想请问下,diyi\dier\disan这个目录是在那个盘中呢,是C盘?D盘?还是E盘呢?是不是要通过设置CLASSPATH才能解决这个问题呢?如果是的话,那我想问如果我的CLASSPATH是这个设置的   classpath=D:\haha;E:\haha; 那我的diyi\dier\disan会被系统生成为
D:\haha\diyi\dier\disan呢?还是E:\haha\diyi\dier\disan呢?
我的第二个问题是:上面的程序库的代码中的两个类在.java文件中只能有一个是public class是吧,
但当我编译这个.java文件以后会生成2个.class文件,这个时候A.class文件中的class A的访问修饰符会自动变成public class A吗,如果不能的话,那这个class A类怎么能在其他外部程序中使用呢,因为.java文件中又只能有一个public 类,其他的类如果不能自动在编译.java文件的时候变成public的话,岂不是在一个包里就只有当初.java文件中的那唯一一个public类是在外部程序中是可以用的了吗。麻烦大哥们帮我解答一下这些问题,小弟感激不尽

解决方案 »

  1.   

    1、如果IDE中编译的话,会按照你的说法,类文件会自动生成在对应包名的目录下,如果手动javac编译,不加-d参数的话,class文件会生成在你的javac命令当前目录下2、任何class都可以使用new对象的方式使用(非抽象类)。一个java文件中可以有多个class,但是只能有一个public的class,当该类编译之后,生成的类文件已经没有所谓的public区别了,没个类是一个单独的class文件,调用时new一个该类对象就可以了
      

  2.   

    纠正一下 第一个问题: 取决于 你的Java文件所在的目录 ,生成的包结构与Java文件同级
                另外 javac -d   C:\test   B.java 可以这样指定生成包的位置第二个问题:   非public的class本来就是public class的辅助类,设计的目的就是不让包外的类直接访问
      

  3.   

    1和你CLASSPATH 没关系,在那个目录编译得就在哪里
    2不是PUBLIC类型 外面得包是访问不了得
      

  4.   

    谢谢楼上的大哥们的精彩解说,第一问题我已经大概清楚了解了,但如果象interpb大哥说的那样 “非public的class本来就是public class的辅助类,设计的目的就是不让包外的类直接访问” ,那不是包外的程序就不能用package中非public的类了吗还有就是在第一个问题中,如果我是想用设置classpath环境变量的方式,而不想用-d 参数的方式来设定包的路径的话,比如这样:classpath=D:\haha;E:\haha; 那我的包的路径是应该在
    D:\haha下面呢,还是应该在E:\haha下面呢
      

  5.   

    !) classpath设置时,加上一个. (.表示当前目录),在解释的时候,JVM会在当前目录下找库文件.
    2)其实java对于每个类都是平等的,用packet只是想来区别名子的,
      

  6.   

    包外的类不能直接引用不同包下的非public类,这点是肯定的 建议看看Thinking In Java /////////////////还有就是在第一个问题中,如果我是想用设置classpath环境变量的方式,而不想用-d 参数的方式来设定包的路径的话,比如这样:classpath=D:\haha;E:\haha; 那我的包的路径是应该在
    D:\haha下面呢,还是应该在E:\haha下面呢
    ///////////
    这个问题已经解释过了不取决于你的classpath,你不加 -d ,肯定不会生成diyi\dier\disan这样的文件结构,只会生成两个class文件,自己动动手 试一下 就明白 
      

  7.   

    如果没有用-d指定源文件存放目录,那么.class文件将产生在当前目录下。
    否则,将在你指定的目录下生成package中指定的目录结构。
      

  8.   

    我们用java来解决实际问题。java技术交流,讨论java的技术细节和最新技术。欢迎中高级程序员以及渴望学习java技术的初学者加入讨论。QQ群:3001581
      

  9.   

    按照interpb所说的,也是我一直在想问,但一直大哥们没解释得很清楚的问题:
    每个.java文件只能有一个是public class,那我同一个.java文件中比如Y.java中只有public class Y是公共的,而Y.java中的其他类,如class W和class R在Y.java文件被编译后,岂不是只能在H.java中访问class Y,而不能访问class W和class R,如果正是我所说的这样,那我前面一直想问的一个问题,就是怎样才能让class W和class R成为public的
      

  10.   

    为什么你非要让非public的变成public的呢你的要求不能实现除非你把它写到单独的java文件里用public修饰
      

  11.   

    那意思就是说,只要我把很多class类写在一个.java文件里(里面只有一个是public class,其他class不是private),编译后,当在另一个.java文件中访问刚才那些编译的class的时候,是不是只能访问第一个.java文件里的那唯一一个public class ,而其他非public class就不能访问或着说也能在这个(也就是第2个).java文件里访问? (我说的这两个.java文件是不位于同一个包的情况下)  。
    其实这个问题本来我可以自己调试程序就能够解决的,可以家里电脑这2天出了问题,就只能上网,其实我想要的答案很明显,只要解释得稍微细致点就行了。麻烦大哥们再说一下。特别是interpb大哥,非常热心:)