11. static和final关键字总结

1. static关键字

  1. static关键字
    1. 关于static关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员属于类的,而不是单单是属于某个对象。也就是说,既然属于类,就可以不靠创建对象来调用了。
    2. 如果使用static修饰成员方法,那么这个方法就变成了静态方法
  2. 静态属性和静态方法(类加载器加载字节码文件的时候 全局委托机制)优先于非静态的属性和方法。
    1. 非静态的属性和方法-----知道有哪些静态的属性和方法,所以他能够访问静态的属性和方法
    2. 但是因为静态属性和方法加载的时候,这时候还没有对象,没有对象就没有成员变量和成员方法。 所以静态的方法中无法调用非静态的属性和方法。
    3. 静态方法中,不能使用this关键字。
  3. static修饰的属性和方法是属于类的属性和方法,所以在调用的时候,推荐是用 类名.属性名 类名.方法名();
  4. 静态代码块 > 非静态代码块 > 构造器。Static{}; {} ; public 类名( ){ };
    1. 静态代码块只执行一次,非静态代码块,每次进入到当前类的时候都会执行一次。
      在这里插入图片描述

2. final关键字

代表的是最终的,不可改变的

2.1 常见的四种用法
  • final 关键字可以用来修饰一个 被修饰的类,不能被继承。
  • final 关键字可以用来修饰一个 方法 被修饰的方法,不能被重写。
  • final 关键字可以用来修饰一个 成员变量 被修饰的变量,不能被重新赋值。
  • final 关键字可以用来修饰一个 局部变量 被修饰的变量,不能被重新赋值。
2.1.1 final修饰局部变量
  1. 一旦使用final来修饰局部变量,那么这个变量不能进行修改。一次赋值,终生不变。
  2. 引用数据类型,修改对象的属性是不会报错,如果重新new 对象的时候,新开辟了一块内存地址。将新的地址赋值给student引用报错。final修饰的引用数据类型,不能改变引用的地址能改变其属性值。
2.1.2 final修饰成员变量

final修饰成员变量和final修饰局部变量的区别与联系:

  1. 被final修饰的成员变量与局部变量均具有:一旦赋值,该值就终身不变
  2. 被final修饰的成员变量必须要在创建对象之前进行赋值,否则会编译失败
  3. 但是局部变量可以不赋值,但是没有被赋值的局部变量不能够被使用,一旦被使用就会编译失败
    综上: 一旦决定使用final关键字来修饰成员变量或者局部变量,一定要做到提前赋值
/**
 * @Date 2020/5/15 10:00
 * @Version 10.21
 * @Author DuanChaojie
 */
public class test {
    //private static final String name;//报错
 
    private static final String adr = "周口";

    public static void main(String[] args) {
        // System.out.println("test.name = " + test.name);
        System.out.println("test.adr = " + test.adr);
        testFinal();
    }

    public static void testFinal() {
        final String name = "admin";
        final int age;
        // 赋值后不报错
        age = 18;
        // final String adr; 报错
        // System.out.println("adr = " + adr);
        System.out.println("age = " + age);
        System.out.println("name = " + name);
    }

}
2.1.3 final修饰方法
  1. 当关键字final修饰一个方法的时候,这个方法就是最终方法,也就是说当前的方法不能重写。
2.1.4 final修饰类
  1. 如果使用了final关键字修饰一个类那么这个使用final修饰的类不能有任何的子类但是可以拥有父类
  2. final 不能和abstract同时修饰一个类,因为final修饰的类不能被继承(所以所有的方法都不能被重写)但是abstract修饰的类是抽象类,抽象类里面的抽象方法必须被继承重写。所以final和abstract产生了冲突,这两个关键字不能一起使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值