static、final关键字 && 代码块

一、static关键字

1、static是修饰符,也是java关键字
2、被static修饰的成员被称为静态成员(静态属性,静态方法)
3、static修饰的成员,独立存在JVM内存当中
3-1、JDK7之前,存在于方法区静态域当中
3-2、JDK7以后,存在于堆独立空间中
4、static的优先级高,执行new 对象的时候,JVM优先加载被static修饰的成员
5、静态方法只能调用静态成员,普通方法可以调用普通成员和静态成员
6、static修饰的成员,被所有当前类的对象共享
在这里插入图片描述
在这里插入图片描述

7、static修饰的成员,可以用类名或对象名调用,不能通过this和super调用

二、fianl关键字

1、final修饰的类,不能被继承
2、final修饰的方法,不能被子类重写
3、final修饰的成员属性叫做常量,常量值不能被修改
- - -public final static String BMW = “宝马”; (BMW 必须得是“宝马“)
4、final修饰的局部变量,也不能改
5、final和static同时修饰的属性被调用时,不会触发类加载

public class{
    public static void main(String[] args) {
        System.out.println(Test.s);
    }
}

class Test {
    public final static String s = "aaa";
    static {
        System.out.println("static块执行");//2
    }
}

输出:aaa,静态代码块没有输出

三、代码块

1、普通代码块

1、普通代码块:每创建一个对象,就执行
2、如果只使用类的静态成员,普通代码块不会执行

2、静态代码块

当类被加载的时候优先执行,而且只会执行一次

什么时候发生类加载:
1、创建当前类实例对象时
2、创建子类实例对象时,父类的静态代码块也会执行(先加载父类信息,在加载子类)
3、使用类的静态成员时(静态属性,静态方法)

3、同类的执行顺序

package day2;

public class{
    public static void main(String[] args) {
        A a = new A();
    }
}
class A{
   public A(){
       System.out.println("当前类无参构造器");
   }

   private int a =getA();
   private static int b = getB();

   public int getA(){
       System.out.println("普通成员方法");
       return 100;
   }
    {
        System.out.println("普通代码块");
    }
    public static int getB(){
        System.out.println("静态方法");
        return 200;
    }
    static {
        System.out.println("静态代码块");
    }
}

输出结构:
在这里插入图片描述

结论:静态成员 > 普通成员 > 构造器
静态成员和普通成员之间的执行顺序:按照main方法的先后顺序执行

4、父子类的执行顺序

当子类构造器没有显示的写出调用父类哪个构造的时候,默认调用父类无参构造(super(),默认隐藏)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值