java笔记之代码块总结

代码块的好处?

一个类中可有多个构造器,即构造器的重载。
使用代码块可以将这项构造器中重复的语句抽取到初始代码块中,可以提高代码的复用性。
可以把代码块当做另类的构造器


一、代码块简介

代码块:在类中被定义,类似于方法,但没有方法名、返回类型和参数,只有方法体。并且通过{}来定义。
如:

{
Sysetm.out.println("hello");
}

需注意:代码块不能通过类或对象显式调用,而是在加载类或创建对象时会被隐式调用。

二、基本语法

1.修饰符修饰的,如static。称为静态代码块。
static { };
2.无修饰符修饰的,称为普通代码块。
3.方法体{}内可以跟一般的方法一样。

二、使用细节

代码块调用的顺序优先于构造器。即不管调哪个构造器创建对象,都会先调用代码块的内容。

细节1

(1)static代码块称为静态代码块,是对类进行初始化,并且会随着类的加载而执行,但只会执行一次。
普通代码块则是每创建一个对象,就执行一次。(创建对象就会调用构造器)
(2)那么类什么时候被加载?
1.创建实例对象时。
2.创建子类对象时。
3.使用该类的静态成员(静态属性、静态方法)时。
(类的静态成员是类变量、类方法,因此使用静态成员前也会加载该类。)
(3)注意使用类的静态成员并不会调用该类的非静态代码块。非静态代码块只会随着对象的创建而被调用,并且创建一次就回调用一次。
使用类的静态成员会调用该类的静态代码块。
(4)创建一个对象时,在一个类的调用顺序是什么样的?
1.先调用静态代码块及进行静态属性的初始化。(两者优先级相同,谁在前谁先被调用。)–静态属性的初始化与调用是不一样的。
2.然后调用普通代码块及普通属性的初始化。优先级和上面一样。
3.最后调用构造方法。
(即先静态,再非静态属性、代码块,最后构造器,且同优先级谁在前谁先被调用。)

细节2

(5)构造器默认有一个super()和调用普通代码块及普通属性初始化的步骤。
如:

class AA{
public AA(){
//1.super()
//2.调用该类的普通代码块 {},及普通属性的初始化。
//3.执行构造器里的代码
System.out.println("Hello");
}
}

又如:

public class CodeBlockDetail03 {
    public static void main(String[] args) {
        new BBB();
    }
}

class AAA{
    public AAA(){
        System.out.println("构造器AAA被调用。。");//1
    }
}
class BBB extends AAA{
    private int n1=getN1();
    {
        System.out.println("BBB的普通代码块");//3
    }
    public int getN1(){
        System.out.println("BBB的普通属性初始化");//2
        return  100;
    }
    public BBB(){
        System.out.println("BBB的构造器被调用。。。");//4
    }
}

结果为:
在这里插入图片描述
(6)创建一个具有继承关系的子类对象时,他们的静态属性初始化、静态代码块、
普通代码块、普通属性初始化、构造方法的调用顺序如下:
1.父类的静态代码块及静态属性的初始化。
2.子类的静态代码块及静态属性的初始化。
3.父类的普通代码块及普通属性的初始化。
4.父类的构造方法。
5.子类的普通代码块及普通属性的初始化。
6.子类的构造方法。

(7)静态代码块只能调用本类的静态成员,普通代码块都能调用。
(因为静态代码块本质上是一个静态方法,与静态方法里面的规则一样)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值