【JavaSE】代码块

【JavaSE】代码块,第1张

学习目录
  • 前言🙉
  • 代码块⭐
    • 一.定义及语法
      • 🟠定义
      • 🟤语法:
      • 🔴注意事项:
    • 二.代码块与类的联系
      • 🔸1.普通的代码块
      • 🔸2.static修饰的代码块
    • 三.类被加载的情况(🚩重点)
    • 四.类中成员的调用顺序(🚩面试)
      • 🔸1.创建普通对象时
      • 🔸 2.创建子类对象时
    • 五.调用范围

前言🙉

代码块类似于一种优化(补充)构造器的机制,也是类中的一部分,按照路线学习java的过程中不断体会到了各种优化基础思维的新东西,我想 以后的SSM应该也是这种思想的一种延续

代码块⭐ 一.定义及语法 🟠定义

🟤代码块又称初始代码块,和构造器,成员方法,成员属性一样是类中的成员,他将逻辑语句封装在方法体中,通过{}包装起来。
🟤代码块没有方法名,没有返回值没有参数,只有一个方法体,他不通过类或者类的对象显式调用,而是在类的加载时出现,或者创建类的对象时隐式调用
🟤所谓的隐式调用,即不用写出对象调用的成员,类一加载就自动调用,如下

🟤语法:
[修饰符]{
  代码 
}
🔴注意事项:

1.修饰符可以写可不写,如果要写,只能是static
2.代码块分为,静态代码块和非静态代码块
3.代码块调用顺序优先于构造器,不管调用哪个构造器来初始化对象都会先调用代码块内容

✔️例如:

public class Play {
    public static void main(String[] args) {
        new AAA("彭于晏"); //创建对象发生类加载 隐式调用了代码块
    }
}
class AAA{
    public String name="彭于晏";

    public AAA(String name) {  //构造器
        System.out.println("1.构造器被调用啦~");
        this.name = name;
    }
    {//代码块
        System.out.println("2.彭于晏好帅啊~~");
    }
}

▶️运行结果:

二.代码块与类的联系 🔸1.普通的代码块

普通代码块在创建对象对象实例时被隐式调用,被创建一次就调用一次

🔸2.static修饰的代码块

static代码块也叫静态代码块,同样可以理解成是对类的初始化,而且它随着➖类的加载而执行➖,且只会➖执行一次➖

✔️例如:

public class Play {
    public static void main(String[] args) {
        new AAA();//创建对象发生类加载 隐式调用了代码块
        new AAA();
        new AAA();
    }
}
class AAA{
    static {  //静态代码块
        System.out.println("静态代码块被调用");
    }
    {     //普通代码块
        System.out.println("普通代码块被调用");
    }
}

▶️运行结果:

✔️很显然,上述程序中,类加载了三次普通代码块随着类加载调用了三次,而静态代码块只加载了一次

三.类被加载的情况(🚩重点)

1.在创建对象实例时,类加载
2.继承关系中创建子类对象实例,父类也会被加载(先父后子)
3.使用类的静态成员时(静态属性,静态方法)

四.类中成员的调用顺序(🚩面试) 🔸1.创建普通对象时

1️⃣调用静态代码块静态属性(两者谁写在前面就调用谁)
2️⃣普通代码块和普通属性
3️⃣构造方法
✔️例如:

public class Play {
    public static void main(String[] args) {
        new AAA("彭于晏");//创建对象发生类加载 隐式调用了代码块
    }
}
class AAA{
    public String name="彭于晏";

    public AAA(String name) {
        System.out.println("1.构造器被调用啦~");
        this.name = name;
    }
    static {
        System.out.println("2.静态代码块被调用");
    }
    {
        System.out.println("3.普通代码块被调用");
    }
}

▶️运行结果:

🔸 2.创建子类对象时

1️⃣父类的静态代码块和静态属性
2️⃣子类的静态代码块和静态属性
3️⃣父类的普通代码块和普通属性
4️⃣父类构造方法
5️⃣子类的普通代码块和普通属性
6️⃣子类构造方法
✔️例如:

public class Play {
    public static void main(String[] args) {
        new BBB("彭于晏");//创建对象发生类加载 隐式调用了代码块
    }
}
class AAA{
    public String name;
    public AAA(String name) {
        System.out.println("1.父类构造器被调用啦~");
        this.name = name;
    }
    static {
        System.out.println("2.父类静态代码块被调用");
    }
    {
        System.out.println("3.父类普通代码块被调用");
    }
}
class BBB extends AAA{
    public BBB(String name) {
        super(name);
        System.out.println("1.子类构造器被调用啦~");
    }
    static {
        System.out.println("2.子类静态代码块被调用");
    }
    {
        System.out.println("3.子类普通代码块被调用");
    }
}

▶️运行结果:

五.调用范围

⭕普通代码块可以调用任意成员
✔️例如:

class CCC{
    public String name="懒羊羊";
    public static int age=20;
    public void play(){
        System.out.println("今天你玩耍了吗");
    }
    public static void study(){
        System.out.println("今天你学习了吗");
    }
    {
    play();                   //普通代码块调用普通方法
    System.out.println(name);;//普通代码块调用普通属性
    System.out.println(age);; //普通代码块调用静态属性
    study();                  //普通代码块调用静态方法
    }
}

▶️运行结果:

⭕静态代码块只能调用静态成员
✔️例如:
在上述代码基础上,把普通代码块前加上static修饰,调用普通成员的地方立马报错!

✔️说明静态代码块只能调用静态成员

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/915430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存