java入门篇(7)构造方法,代码块,static

在这里插入图片描述
1.代码块

java中的几大代码块:

1.普通代码块:创建方法时。{}里面的内容,不能单独执行,需要通过调用方法名来执行。
2.静态代码块:使用static修饰的代码块,用于静态变量的初始化和对象创建前环境的初始化。
3.同步代码块:使用synchron’ize关键字修饰,在{}中的代码片段,表示在同一时间只能有一个线程进入到该方法中,是一种多线程保护机制。
4.构造代码块:在类中没有任何的前缀和后缀,使用{}括起来的代码片段。

上代码:

public class A1 {
    static int i=2;
    static{
        i++;
        System.out.println("我是父类静态代码块一");
        System.out.println(i);
    }
    {
        System.out.println("我是父类构造代码块一");
    }
    public A1(){
        System.out.println("我是父类无参构造");
    }
    public A1(String name)
    {
        System.out.println("我是父类有参构造");
    }
    static{
        i++;
        System.out.println("我是父类静态代码块二");
        System.out.println(i);
    }

    public static void main(String[] args) {
        A2 b2=new A2();
        System.out.println("---------------------");
        A1 b1=new A1();
        System.out.println("---------------------");
        A1 b3=new A2();
        /*System.out.println("---------------------");
        A1 b4=new A1();
        A2 b5=(A2)(b4);*/
        System.out.println("---------------------");
        System.out.println("---------------------");
        String str="asd";
        A2 c2=new A2(str);
        System.out.println("---------------------");
        A1 c1=new A1(str);
        System.out.println("---------------------");
        A1 c3=new A2(str);
    }
}
class A2 extends A1{
    static int i;
    static{
        i++;
        System.out.println("我是子类静态代码块一");
        System.out.println(i);
    }
    public A2(){
        super();
        System.out.println("我是子类午无参构造函数");
    }
    public A2(String name){
        System.out.println("我是子类有参构造函数");
    }
    static{
        i++;
        System.out.println("我是子类静态代码块二");
        System.out.println(i);
    }

}


运行结果:

在我是父类静态代码块一
3
我是父类静态代码块二
4
我是子类静态代码块一
1
我是子类静态代码块二
2
我是父类构造代码块一
我是父类无参构造
我是子类午无参构造函数
---------------------
我是父类构造代码块一
我是父类无参构造
---------------------
我是父类构造代码块一
我是父类无参构造
我是子类午无参构造函数
---------------------
---------------------
我是父类构造代码块一
我是父类无参构造
我是子类有参构造函数
---------------------
我是父类构造代码块一
我是父类有参构造
---------------------
我是父类构造代码块一
我是父类无参构造
我是子类有参构造函数
这里插入代码片

由上面得出的结论是:
静态代码块:
1.不论创建多少个对象,静态代码块只执行一次。
2.创建对象前,静态代码块会先执行。
3.不创建对象,静态代码块不会执行。

构造代码块:

1.在静态代码块后执行,插入到构造函数之前执行。

其他代码块先说明,因为我不会,哈哈哈)

2.构造函数

public class Demo1 {
    public static void main(String[] args) {
        aa1 z = new aa1();
    }
}

class aa {
    public aa() {
        System.out.println("我是父类无参构造");
    }

    public aa(int num) {
        System.out.println("我是父类有参构造");
    }
}

class aa1 extends aa {
    public aa1() {
        this(1);
        System.out.println("我是子类无参构造");
    }

    public aa1(int num) {
        System.out.println("我是子类有参构造");
    }
}

1.在执行子类的构造函数之前,如果没有显示的调用父类的构造函数,会默认调用父类无参构造,如果显示的调用了父类的有参构造函数,会先执行父类的有参构造函数
2.在子类无参构造函数中调用子类的有参构造函数,在创建对象,使用无参构造方法时,只调用一次父类无参构造
3.子类无参构造只能调用父类无参构造或者父类有参构造或者子类有参构造之一

注:参考的大佬的博客:https://blog.csdn.net/hspingcc/article/details/54893853
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值