最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

全球头条:java中的代码块

来源:博客园


(资料图片)

本文主要讲述java中代码块的细节

2)3)示例代码如下:

public class CodeBlockDetail {    public static void main(String[] args) {        // 类别加载的情况举例        // 1.是对象创建时//        new AA();        // 2.创建子类对象,父类先加载//        new BB();        // 3.使用类的静态属性/方法//        System.out.println(Cat.age);        // 静态代码块在类加载时执行,并且只执行一次        // 非静态代码块,随着对象的创建,被调用.//        CC c1 = new CC();//        CC c2 = new CC();        // 当调用静态变量/方法时,非静态代码块不会被调用,只会调用静态代码块//        System.out.println(CC.age);        CC.getAge();    }}class CC {    public static int age = 10;//    private String name = "Tom";    public static void getAge(){        System.out.println(age);    }    static {        System.out.println("CC的static代码块2在执行...");    }    {        System.out.println("CC的非静态代码块别执行...");    }}class Animal {    static {        System.out.println("Animal的static代码块4在执行...");    }}class Cat extends Animal{    public static int age = 20;    static {        System.out.println("Cat的static代码块3在执行...");    }}class BB extends AA {    static {        System.out.println("BB的static代码块2在执行...");    }}class AA {    // 静态代码块,随着类的加载而执行    static {        System.out.println("AA的static代码块1在执行...");    }}

4)示例代码如下:

public class CodeBlockDetail01 {    public static void main(String[] args) {        A a = new A(100);    }}class A {    /*    静态代码块和静态方法,先于普通代码块和普通方法执行。    构造器最后被调用....     */    {        System.out.println("非static代码块...");    }    public int id = getId();    // 非静态代码块    // 静态代码块    static {        System.out.println("static静态代码块...");    }    // 静态变量只能由静态方法赋初始值...    public static int age = getAge();    public static int getAge(){        System.out.println("getAge()...");        return 100;    }    public int getId(){        System.out.println("getId()");        return 50;    }    public A(int id) {        System.out.println("public A(int id)调用...");        this.id = id;    }}

运行结果:

示例代码如下:

public class CodeBlockDetail02 {    public static void main(String[] args) {        BBB bbb = new BBB();    }}/** 静态方法/变量/代码块,随着类信息的加载而加载。 * (1) AAA的static代码块 * (2) BBB的static代码块 * (3) AAA的普通代码块.... * (4) public AAA()构造器.... * (5) BBB的非静态代码块.... * (6) public BBB()构造器.... */class AAA {    static {        System.out.println("AAA的static代码块");    }    {        System.out.println("AAA的普通代码块....");    }    public AAA(){        // (1)super()调用父类的无参构造器        // (2)本类的普通代码块        System.out.println("public AAA()构造器....");    }}class BBB extends AAA{    static {        System.out.println("BBB的static代码块");    }    {        System.out.println("BBB的非静态代码块....");    }    public BBB() {        // (1) super(),调用父类的无参构造器.        // (2) 本类的普通代码块        System.out.println("public BBB()构造器....");    }}

运行结果:

示例代码如下:

public class CodeBlockDetail03 {    public static void main(String[] args) {        Cc cc = new Cc();    }}/** * (1) Aa的静态代码块 * (2) Bb的静态代码块 * (3) Cc的静态代码块 * (4) Aa的非静态代码块 * (5) public Aa()构造器 * (6) Bb的非静态代码块 * (7) public Bb()构造器 * (8) Cc的非静态代码块 * (9) public Cc()构造器 */class Aa {    {        System.out.println("Aa的非静态代码块");    }    static {        System.out.println("Aa的静态代码块");    }    public Aa() {        // (1) super()父类的构造器        // (2) 本类的普通代码块        System.out.println("public Aa()构造器");    }}class Bb extends Aa{    {        System.out.println("Bb的非静态代码块");    }    static {        System.out.println("Bb的静态代码块");    }    public Bb() {        // (1) super()父类的构造器        // (2) 本类的普通代码块        System.out.println("public Bb()构造器");    }}class Cc extends Bb{    {        System.out.println("Cc的非静态代码块");    }    static {        System.out.println("Cc的静态代码块");    }    public Cc() {        // (1) super()父类的构造器        // (2) 本类的普通代码块        System.out.println("public Cc()构造器");    }}

运行结果:

关键词: 静态方法 静态变量