finalDemo
Posted nihaofenghao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了finalDemo相关的知识,希望对你有一定的参考价值。
package com.fh.interview; import org.junit.Test; /** * @author * @create 2018-05-28 下午10:09 **/ //类不能被继承 public final class FinalDemo { //不能被修改 public final String message = "111"; //不能被重写 public final void test(){ } //在定义的时候赋值 //或者在静态代码中 public static final String test = "12"; public static final String aaa; static { aaa="121"; } //类变量赋值时机 public final String test1="12"; public final String test2; { test2="12"; } public final String test3; public FinalDemo(){ test3="123"; } public void test4(final String a){ final String b; b="12"; // b="12"; } /** * 当final修饰基本数据类型变量时,不能对基本数据类型变量重新赋值, * 因此基本数据类型变量不能被改变。而对于引用类型变量而言, * 它仅仅保存的是一个引用, * final只保证这个引用类型变量所引用的地址不会发生改变,即一直引用这个对象, * 但这个对象属性是可以改变的。 */ @Test public void test123(){ final Person person = new Person("12","123"); person.setAge("234"); System.out.println(person.getAge()); } static class Person{ private String age; private String name; public Person(String age,String name){ this.age=age; this.name=name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } /** * 父类的final方法是不能够被子类重写的 final方法是可以被重载的 */ public final void test345(){ } public final void test345(String aaa){ } //JDK中提供的8个包装类都是不可变的 //String 也是不可变的 //在对象引用为任意线程可见之前, // 对象的final域已经被正确初始化过了,而普通域就不具有这个保障 //普通变量的重排序不能到构造函数之外 //在读一个对象的final域之前,一定会先读这个包含这个final域的对象的引用。 //按照final修饰的数据类型分类: // 基本数据类型: //final域写:禁止final域写与构造方法重排序,即禁止final域写重排序到构造方法之外,从而保证该对象对所有线程可见时,该对象的final域全部已经初始化过。 //final域读:禁止初次读对象的引用与读该对象包含的final域的重排序。 // 引用数据类型: //额外增加约束:禁止在构造函数对一个final修饰的对象的成员域的写入与随后将这个被构造的对象的引用赋值给引用变量 重排序 }
以上是关于finalDemo的主要内容,如果未能解决你的问题,请参考以下文章