Java中对象实例化的顺序
来源:互联网 发布:如何开通淘宝直播间 编辑:程序博客网 时间:2024/04/30 13:44
我认为要学好一门编程语言,深刻理解它的运行顺序是至关重要的,这能很大程度的减少我们的错误率。
Java是一门完全面对对象的程序,可以说是目前对面对对象思想支持最好的一门编程语言。我测试了一下java中对象实例化顺序。
测试结果如下:
1. 第一步,调用构造函数。
2. 第二步,如果在构造函数的第一行发现有super(参数)那么就调用父类的带相应参数的构造函数,如果没有发现super (参数)那么就调用父类的默认构造函数,不管那一种再调用构造函数的第2行之前都将进入下面的第三步。
3. 第三步,在调用构造函数的第2行之前,将跳到程序的第一行,开始实例化我们在函数,和构造函数外定义的变量,和常量(静态变量不一样,他们在程序字节码被加载时就已完成),然后再跳到构造函数的第二行开始执行。
从这三步我们将不难知道:
1. 为什么super(…)一定要放在子类构造函数的第一行才能通过编译,放在别的地方不行。
2. 就能很好的解释下面的现象class Father{
Public father(){ System.out.println(“1”)
}
public father(String name){System.out.println(“2”); }
}
public class child extends Father{
public child(String name){}
public static void main(String s[]){new child(“”);}
}
public class child2 extends Father{
public child2(String name){super(name);}
public static void main(String s[]){new child2(“”);}
}
运行上面的的程序child为什么会打印1而不是2, 运行child2打印的是2而不是1的原因了。
3. public class child3 extends child{
public child3(String name){super(name);//如果把super(name)去掉将不能通过编译
}
public static void main(String s[]){new child3(“”);}
}
如上面的程序,如果把super(name)去掉将不能通过编译,因为其父类child没有默认的构造函数,通过我们的测试知道要是没有super(name)的话,它将会找父类的默认构造函数,那当然是找不到,所以我们要调用super(name)告诉JVM我们将调用父类的那个构造函数。
今天学习日记就写到这里了
- Java中对象实例化的顺序
- Java对象实例化顺序
- java对象实例化顺序
- java对象实例化顺序
- Java实例化对象时候的加载顺序
- JAVA--浅谈实例化对象时的初始化顺序
- Java中对象的实例化过程
- JAVA中实例化对象的方式
- java中一个对象的实例化
- Java对象实例化--成员实例化顺序
- Java中子类和父类的实例化顺序
- java对象实例初始化顺序
- Java中对象的初始化顺序
- java 类的实例 new一个对象初始化顺序
- java 类的实例 new一个对象初始化顺序
- java实例化对象时程序运行顺序
- java对象实例化过程中的代码执行顺序
- java类的初始化块/执行顺序,实例化对象数据赋值
- Java线程:线程状态的转换及线程的同步与锁
- javascript 基础 2
- 在Qt中如何加载图像以及保存图像到数据库中
- Java:重写equals()和hashCode()
- An Overview of Survival Analysis using Complex Sample Data
- Java中对象实例化的顺序
- sql常用语句1
- 不知道的一些IDE功能
- 如何查找僵尸进程并Kill之,杀不掉的要查看父进程并杀之
- javascript 执行顺序和闭包典型应用
- 居然过了这么久了..[2011.9.6]
- SQL---DML---UPDATE---UPDATE语句总结
- 杂议 Windows 和 Linux
- echo参数管道