日期:2014-05-20  浏览次数:20718 次

请高手指点我的小菜三条问题?
import   com.bruceeckel.simpletest.*;

class   Rock2   {
    Rock2(int   i)   {
        System.out.println( "Creating   Rock   number   "   +   i);
    }
}

public   class   SimpleConstructor2   {
    static   Test   monitor   =   new   Test();
    public   static   void   main(String[]   args)   {
        for(int   i   =   0;   i   <   10;   i++)
            new   Rock2(i);
        monitor.expect(new   String[]   {
            "Creating   Rock   number   0 ",
            "Creating   Rock   number   1 ",
            "Creating   Rock   number   2 ",
            "Creating   Rock   number   3 ",
            "Creating   Rock   number   4 ",
            "Creating   Rock   number   5 ",
            "Creating   Rock   number   6 ",
            "Creating   Rock   number   7 ",
            "Creating   Rock   number   8 ",
            "Creating   Rock   number   9 "
        });
    }
}   ///:~
问题:
1.是不是创建了对象才为对象分配了存储空间?
2.为什么前面的类class   Rock2   {}没有public?
3.   new   Rock2(i);这里是不是算创建了Rock2的对象了?


------解决方案--------------------
创建了对象随之为它分配内存空间

class前面没有修饰词表示它默认为包访问权限
------解决方案--------------------
第三个问题:你猜对了,确实创建了对象。
------解决方案--------------------
是不是创建了对象才为对象分配了存储空间?
回答:这个问题可以写篇论文。
一般说来,是。因为按照java大师说一切都是对象。
狭义来说,就未必了。因为,int,long这些东西也可以不算是对象,但是也分配了存储空间。

================

为什么前面的类class Rock2 {}没有public?
回答:一个java文件里面,只能由一个public的方法,而且他的class的名字必须和这个java文件的名字完全一致才可以。比如你这个java文件的名字一定是SimpleConstructor2.java

================================
new Rock2(i);这里是不是算创建了Rock2的对象了?
回答:是,在堆内存里面创建了一个对象。

------解决方案--------------------
创建了对象就可以为对象分配内存空间。

class前面没有修饰词按默认的

new创建了对象


------解决方案--------------------
第二个问题的class前有没有修饰词有什么区别?什么时候才用到这样的?
那就看下访问修饰符了,一个XX.java文件里只能由一个public的类,而且他的class的名字必须和这个java文件的名字。这是规则!
------解决方案--------------------
如果在几个类并存的情况下,只能有一个类是public 的,其余都是默认为friendly,
new Rock2(i);是在堆内存里创建了,但并没有外部可操纵的对象引用它