黑马程序员技术交流社区
标题:
对静态代码块,构造代码块,构造方法,加载顺序的验证
[打印本页]
作者:
无奈的我+.l
时间:
2014-4-15 16:48
标题:
对静态代码块,构造代码块,构造方法,加载顺序的验证
package cn.my;
class Person{
private String name;
private int age;
Person (){
System.out.println("父类空参数的构造方法!");
}
Person (String name,int age){
this.name = name;
this.age = age;
System.out.println("父类有参数的构造方法!");
}
}
class Student extends Person{
private int id;
Student (String name,int age,int id){
//super(name,age);
this.id = id;
//super(name,age);
System.out.println("子类的构造方法!");
}
}
class Test2{
public static void main (String[] agrs){
Student s = new Student("wangsan",12,123);
}
}
复制代码
运行结果:父类空参数的构造方法!
子类的构造方法!
当第一条super存在时,自动将参数回传到有参父类构造方法,程序执行结果:
执行了父类有参构造方法!
子类构造方法执行!
当第二条super存在时,系统编译错误,调用父类构造方法必须为第一行。
package cn.my;
class Static1{
Static1 (){
System.out.println("父类构造函数!");
}
static{
System.out.println("父类静态");
}
{
System.out.println("父类构代码块!");
}
}
class Static2 extends Static1{
Static2(){
System.out.println("子类构造函数!");
}
static{
System.out.println("子类静态");
}
{
System.out.println("子类构造代码块!");
}
}
class Static3{
static {
System.out.println("static3的静态构造代码块");
}
static void show(){
System.out.println("static3的show");
}
}
class Test3 {
public static void main(String[] ages){
new Static2();
Static3.show();
}
}
复制代码
运行结果:
父类静态
子类静态
父类构代码块!
父类构造函数!
子类构造代码块!
子类构造函数!
static3的静态构造代码块
static3的show
总结:通过此段代码可以了解,随着类的加载静态代码块最先执行,子类的静态代码块优先于父类的构造代码块。父类的构造方法要优先于子类的构造代码块,当父类的构造代码块和构造函数完全执行完,才会执行子类的构造代码块、构造函数。
作者:
^o(孤8o|狼i¤F
时间:
2014-4-16 01:30
先执行静态代码块 后是代码块 最后是 构造函数
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2