首页 > 编程语言 >final 在 java 中有什么作用?

final 在 java 中有什么作用?

时间:2022-10-18 16:55:35浏览次数:50  
标签:初始化 java name 中有 public 修饰 final 赋值

final修饰的常量在编译阶段会被放入常量池中。

  • 修饰类:表示该类不能被继承;
  • 修饰方法:表示方法不能被重写;
  • 修饰变量:final修饰基本数据类型变量和引用数据类型变量。

  ① 当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变。final修饰属性可以考虑变量赋值的方式有:显示初始化、代码块中初始化、构造器初始化。修饰形参时:调用该方法时,一旦赋值形参,方法体内部不可更改其值。

  ② 当final修饰的是一个引用类型数据时, 也就是修饰一个对象时, 引用在初始化后将永远指向一个内存地址, 不可修改。但是该内存地址中保存的对象信息, 是可以进行修改的。

public class FinalTest {
    
    public static void main(String[] args) {
        FinalTest ft = new FinalTest();
        ft.baseType(100);//形参赋值,方法体内部不能改变值:100
        ft.referenceType(new StringBuilder("初始化值"));//初始化值内容变化了呀
        ft.referenceType(new Stu(100, "wyb"));//Stu{id=2, name='xz'}
    }
    
    // private final int a = 1; // 赋值方式:1、显示初始化

    private final int a;
	/*{
		a = 1; // 赋值方式:2、代码块初始化
	}*/

    public FinalTest() {
        a = 1000; // 赋值方式:3、构造方法初始化
    }

    //赋值方式:4、修饰形参:调用该方法时,一旦赋值形参,方法体内部不可更改其值。
    public void baseType(final int a) {
        // 形参赋值不可更改其值
        //a=12;
        System.out.println("形参赋值,方法体内部不能改变值:" + a);
    }

    //赋值方式:5、final修饰的是一个引用类型数据时, 也就是修饰一个对象时,
    //引用在初始化后将永远指向一个内存地址, 不可修改。但是该内存地址中保存的对象信息,
    // 是可以进行修改的。
    public void referenceType(final StringBuilder sb) {
        sb.append("内容变化了呀");
        System.out.println(sb.toString());
    }

    //赋值方式:5、final修饰的是一个引用类型数据
    public void referenceType(final Stu stu) {
        stu.id = 2;
        stu.name = "xz";
        System.out.println(stu);
    }

    public void method() {
        // 局部变量
        int num = 10;
        num = 15;
        class Inner {
            public void show() {
                //num = 11; // 错误。内部类中使用的外部变量num被隐式地声明为final。
            }
        }
    }

    static class Stu {
        public int id;
        public String name;

        public Stu(int id, String name) {
            this.id = id;
            this.name = name;
        }

        @Override
        public String toString() {
            return "Stu{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
}

标签:初始化,java,name,中有,public,修饰,final,赋值
From: https://www.cnblogs.com/haveanicedayfh/p/16803190.html

相关文章

  • javascript 省略号
     解构赋值解构赋值可以从等号右侧的值中提取一个或多个保存到左边的变量中:let[a,b]=[1,2]//leta=1,b=2 通常情况左侧多余的变量会被设置为undefined,右侧多......
  • 断点JavaScript-断点续传-大文件断点上传
    ​最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的交......
  • java继承
    1.继承的实际是子类继承了父类的方法和属性,我们可以使用super关键字调用父类的方法,或者this关键字调用自己的方法2.在继承的基础上我们可以拥有父类的已好的方法,同时也可......
  • vue-java (Get / Post 传参)
    我在controller层传的参数是List时报Noprimaryorsingleuniqueconstructorfoundforinterfacejava.util.List于是加了@RequestParam,结果报Requiredrequestparame......
  • java日志commons-logging/log4j/slf4j/logBack需要知道的几件事
    如果对于commons-loging、log4j、slf4j、LogBack等都已经非常清楚了,可以忽略本文。几次解决日志冲突问题时对这几个概念的简单总结,希望对这块基础没有理解透的同学能有所帮......
  • 使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件
    使用Kotlin,Groovy,Java开发一个自己的Gradle插件先上效果图:image.png功能说明:korGenerate:自动生成Entity,Dao,Controller模板代码korFront:自动cop......
  • java DFA算法模型
    importjava.util.HashMap;importjava.util.HashSet;importjava.util.Map;importjava.util.Set;/***敏感词过滤器*/publicclassSensitive{/**敏......
  • java.base.jmod
    /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/jmods$jmodlistjava.base.jmod|wc-l5761classes/module-info.classclasses/apple/security/AppleProvid......
  • JAVA获取jvm和操作系统相关信息
    JAVA获取jvm和操作系统相关信息背景今日搬砖......
  • Java反射
    简介Reflection(反射)是Java被视为动态语言的关键。反射机制允许程序在执行期借助ReflectionAPI取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之......