java的四个关键子final,static,volatile,transient

1.4 java关键字

1.final

final: 变量,对象引用不可变,方法不可覆盖,类不可以被继承。

对象引用不可变

@Test
    public  void  method1(){
        final StringBuilder s = new StringBuilder("a");
        s.append('b');
        System.out.println(s.toString());
    }

输出ab

@Test
    public  void  method1(){
        final StringBuilder s = new StringBuilder("a");
        s.append('b');
        s = new StringBuilder("cd");
        System.out.println(s.toString());
    }

报错

Error:(15, 9) java: 无法为最终变量s分配值

也就是说,s指向的地址不会变,而地址内的内容可以改变。这就是引用不可变。

变量不可变

final int a = 1;
        a = 2;

这个就会报错

Cannot assign a value to final variable 'a'

关于final变量的初始化:可以直接初始化,也可以在构造器中进行初始化。

方法不可覆盖

public class Demo2 {
    final static String s2 ;
    static {
        s2 = "a";
    }

    @Test
    public final   void  method1(){
        final StringBuilder s = new StringBuilder("a");
        s.append('b');
        final int a = 1;

        System.out.println(s2);
    }

    public  void canConstruct(StringBuilder ransomNote) {
        ransomNote.append('a');
    }

}

class Demo3 extends Demo2{
    @Override
    public void method1(){}

}

报错

method1()' cannot override 'method1()' in 'demo.Demo2'; overridden method is final

final修饰的类不可以被继承

Cannot inherit from final 'demo.Demo2'
2.static

static什么作用?

1.为某特定数据类型或对象分配单一的存储空间,而与创建对象的数目无关。

​ 就是在方法区中指定一块地址存储变量或者对象。

2.实现某个方法或属性与类而不是与对象关联起来,

​ 就是不创建对象的情况下可以直接使用该变量。

3.transient

在对象序列化时候,在属性上加上transient,代表这个属性不被序列化。

如何序列化?

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public  class Demo2 implements Serializable {

    public  int a;
    transient public  int b;
    public static String s = "abc";

    public static void main(String[] args) throws IOException {
        Demo2 demo2 = new Demo2();
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:\\图片\\test.text"));
        objectOutputStream.writeObject(demo2);
    }

}

啥是反序列化?

就是序列化的逆过程,从存储对象的文件中读取出来对象。

4.volatile

被volatile修饰的属性会保持对所有线程可见。

保证线程三要素中的可见性和有序性。并不保证原子性。所以并不是严格地保证线程安全。

关于volatile关键字 Java并发编程:volatile关键字解析 - Matrix海子 - 博客园 (cnblogs.com)

这个博文总结的很全面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值