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);是在堆内存里创建了,但并没有外部可操纵的对象引用它