应该不会吧。比如我们通过eclipse创建了两个类A和B,其中B继承A。我们所敲到的那些代码(包括构造函数)就保存在系统的某个位置。 当我们的代码执行到 new B(); 系统就会去取出B的构造函数,准备执行,这个时候,它发现B的构造函数里面还有一个A的构造函数。那么,系统就会找到A的构造函数的那一堆代码,然后执行一遍(因为JAVA语言的关系,这个是必要的)。随后在将自己B类的构造函数的剩余代码执行一遍,给各个数据分配存储空间。在执行A类构造函数的那些代码时,这个构造函数究竟是创建一个A类,还是说给帮B类的构造函数做点事情,应该是由JAVA的设计者决定的。那些语言创始人觉得怎么样合理,就怎么来。这东西并不是绝对性的,完全是由别人所控制的。不过看起来,不创造A类要合理一些。 另外,不知道有没有静态方法这种东西,可能静态方法在调用的时候,也不需要创建类呢。class BulletAttr{ // public static BulletAttr(int a) { // // } 构造函数不能为静态的类型... static { System.out.println("我是静态代码块,我会被执行吗?"); }
public BulletAttr(){ System.out.println("我是构造函数,我会被执行吗?"); } static public void print() { System.out.println("使用我,会调用构造函数吗?"); } } public class EnumTest { public static void main(String[] args) { BulletAttr.print(); } }
1、.java文件编译完之后 在内存中后会个代码区存放;
2、主函数 main放里面的代码按顺序执行,main()进栈
-ZIDemo zi=new ZiDemo()进堆内存,初始化ZiDemo()的无参构造函数;
--super()调用父类的无参构造方法;(直接从代码区 拿属性和参数值);不会再创建一个父类对象
当我们的代码执行到 new B();
系统就会去取出B的构造函数,准备执行,这个时候,它发现B的构造函数里面还有一个A的构造函数。那么,系统就会找到A的构造函数的那一堆代码,然后执行一遍(因为JAVA语言的关系,这个是必要的)。随后在将自己B类的构造函数的剩余代码执行一遍,给各个数据分配存储空间。在执行A类构造函数的那些代码时,这个构造函数究竟是创建一个A类,还是说给帮B类的构造函数做点事情,应该是由JAVA的设计者决定的。那些语言创始人觉得怎么样合理,就怎么来。这东西并不是绝对性的,完全是由别人所控制的。不过看起来,不创造A类要合理一些。
另外,不知道有没有静态方法这种东西,可能静态方法在调用的时候,也不需要创建类呢。class BulletAttr{
// public static BulletAttr(int a) {
//
// } 构造函数不能为静态的类型...
static {
System.out.println("我是静态代码块,我会被执行吗?");
}
public BulletAttr(){
System.out.println("我是构造函数,我会被执行吗?");
} static public void print() {
System.out.println("使用我,会调用构造函数吗?");
}
}
public class EnumTest {
public static void main(String[] args) {
BulletAttr.print();
}
}
调用构造器不代表就一定会创建一个对象,创建对象有很多个步骤,jvm调用<init>只是其中之一。