Java静态代码块/局部代码块/构造代码块

最近学习了Static这个关键字,涉及到了三种代码块:

1.静态代码块:定义在类中的代码块(静态代码块在类加载时自动执行,并且只会执行一次)

Class Demo {
    static {
        System.out.println("静态代码块");
    }
}

 2.局部代码块:定义在类中或方法中(定义在类中的话也可以叫做初始代码块)
    初始化代码块是构造方法前身

class Demo1 {
    {
        System.out.println("我是初始化代码块");
    }


    public void Method() {
        {
            System.out.println("我也是初始化代码块");
        }
    }
}

3.构造代码块:定义在类中(就是构造方法)

class Deme2 {
    public Deme2() {
        System.out.println("构造方法代码");
    }
}

那么问题来了,假设我有下面的代码,执行顺序是什么呢?

class Woman{
    static {
        System.out.println("静态代码块被调用");
    } 
    {
        System.out.println("初始化代码块被调用");
    }
    public Woman() {
        System.out.println("构造方法代码块被调用");
    }
} 
public class StaticDemo2 {
    public static void main(String[] args) {
        new Woman();
    }
}

哈哈,不告诉你呦,提示一下:三种代码块的执行过程:

静态代码块被调用-->初始化代码块被调用-->构造方法代码块被调用

这下你知道答案了吗?

那么再来一个例子:

class Person{
    static{
        System.out.println("父类的静态代码块被调用")
    } 
    {
        System.out.println("父类的初始化代码块被调用")
    } 
    public Person(){
        System.out.println("父类的构造代码块被调用")
    }
} 
class Man extends Person{
    static{
        System.out.println("子类的静态代码块被调用")
    } 
    {
        System.out.println("子类的初始化代码块被调用")
    } 
    public Man(){
        System.out.println("子类的构造代码块被调用")
    }
    } 
// Man man = new Man();
/*使用/权限 本类 同包 子类 不同包
private √ × × ×
default √ √ × ×
protected √ √ √ ×
public √ √ √ √
访问权限修饰符
private 私有的
protected 保护的
default(Package) 默认的
public 公有的
从小大到
修饰类:只有两个权限 public 或 default(Package)
public: 公有权限,在工程任意位置都可以访问
default(Package) 只能在当前包内访问
修饰方法和属性
Object类
Object是所有的类直接或间接父类
Object本身就是引用类型
重要的重写方法:
toString -->返回的是一个字符串类型,自定义对象打印时重写
equals和hashcode -->分别返回的是boolean类型和int类型
父类的静态代码块被调用
子类的静态代码块被调用
父类的初始化代码块被调用
父类的构造代码块被调用
子类的初始化代码块被调用
子类的构造代码块被调用
*/

就到这里吧,看完对你有帮助的话记得点赞喔~

你可能感兴趣的:(Java)