【Java关键字】final、static、Transient、Collection接口

一.final关键字

final关键字用来修饰引用、方法、类。

如果引用为基本数据类型,则该引用为常量,该值无法修改。
如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
如果引用时类的成员变量,则必须当场赋值,否则编译会报错。

final修饰方法和类时,都是无法继承的。

二.static关键字

static修饰的成员变量和方法,从属于类;
普通变量和方法从属于对象。
在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法和静态成员变量。

2.1、static变量

static变量也称为静态变量,静态变量和非静态变量的区别
静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化。
非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

2.2、static块

static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

2.3、static方法

2.4、static内部类

静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。
静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法。这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。

三.Transient关键字

将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。
transient的作用就是把这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。

四.Collection接口

接口中有两个特殊的方法。default和static方法。

public interface CollectionInf {
    public abstract void test1();
    public default void test2(){
        System.out.println("CollectionInf_test2");
    };
    public static void test3(){
        System.out.println("CollectionInf_static_test3");
    }
}

1、default方法

当一个接口添加新方法时,需要所有的实现类都重写新方法,影响到了已有的实现类,可能导致应用崩溃。default默认方法可以不强制重写,也不会影响到已有的实现类
当一个实现类实现了多个接口,多个接口里都有相同的default默认方法时,实现类必须重写该默认方法,否则编译错误。
当一个实现类实现了一个接口,实现类没必要重写该默认方法,可以直接现有的接口中方法。

2、static方法

不需要实例化,直接使用,节省内存空间。
在Java中,如果父类中含有一个static静态方法,且在子类中也含有一个返回类型、方法名、参数列表均与之相同的静态方法,那么该子类实际上只是将父类中的该同名方法进行了隐藏,而非重写。换句话说,父类和子类中含有的其实是两个没有关系的方法,它们的行为也并不具有多态性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamBoy_W.W.Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值