码迷,mamicode.com
首页 > 其他好文 > 详细

finalDemo

时间:2018-05-29 00:16:12      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:style   引用类型   对象属性   create   ESS   this   play   gif   spl   

技术分享图片
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修饰的对象的成员域的写入与随后将这个被构造的对象的引用赋值给引用变量 重排序
}
View Code

 

finalDemo

标签:style   引用类型   对象属性   create   ESS   this   play   gif   spl   

原文地址:https://www.cnblogs.com/nihaofenghao/p/9102747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!