java 对象初始化和代码块初始化顺序

时间:2023-03-09 06:20:30
java 对象初始化和代码块初始化顺序
class A
{
public A(){
System.out.println("测试!!!!!!!!!!!");
}
} class Demo19 extends A
{ {
x=7;//代码块初始化
System.out.println("hello world!测试代码块的执行顺序!AAAAAAAAAAA");
}
public int x=1;//这里不会初始化变量值 只会声明变量
public int y=2;//这里不会初始化变量值 只会声明变量 public Demo19(){
//super();
//相当于 x=7
//然后x=1;
//y=2;
//y=13;
}
public Demo19(int d_x,int d_y)
{ //super();
//x=7;
//x=1;
//y=2;
//y=13;
x=d_x;
y=d_y;
//super();//假如显示的调用 那么是不能放在这里初始化的
}
//代码块的执行顺序是按照代码块的顺序执行的
//代码块的执行时间:在对象初始化的时候执行!!!!!!!!!!!!!
{
y=13;//代码块初始化
System.out.println("hello world!测试代码块执行的顺序!BBBBBBBBBBBB");
} //构造函数的代码块 public static void main(String[] args)
{
//这里初始化的时候就跟上面的初始化差不多
Demo19 demo=new Demo19();
System.out.println("测试代码块:x="+demo.x+" ,y="+demo.y); //这里的初始化相当于上面的那个操作
Demo19 demoOne=new Demo19(12,45);
System.out.println("测试代码块:x="+demoOne.x+" ,y="+demoOne.y); System.out.println("其他的顺序是不变的!这个是比较重要的"); System.out.println("代码块的使用!"); }
}

抽象类的初始化:

abstract class A
{
String name;
String id; public abstract void test();
} abstract class B extends A
{
//子类也可以是抽象类,不实现父类的方法
} class C extends A
{
public void test(){
System.out.println("子类假如不是抽象类 那么必须实现父类的方法");
}
}
abstract class D1
{
/* 抽象类中也是有构造函数的,只是这个只能子类初始化 */ D1(){
System.out.println("测试抽象类的构造函数!");
}
static String name="什么是你";
}
class D extends D1
{
D(){
System.out.println("子类调用父类的构造函数");
}
public void test(){
System.out.println(this.name); System.out.println("假如抽象类中没有抽象方法,那么继承也是没有问题的");
}
}
class Demo5
{
public static void main(String[] args)
{
D d =new D();
d.test();
System.out.println("抽象类!!!!!");
System.out.println("类不支持多重继承!!!!!!!!!!!!!!!!");
} }