Java基础-final关键字用在不同处的作用及区别

1、final修饰的类:不能被其他类继承;
2、final修饰的方法:不能被子类重写
3、final修饰的变量

  先理解两个概念:基本类型变量、引用变量。

  基本数据类型变量:存的是数值本身,存放在栈内存中;

  引用类型变量:存的是数据的地址,数据存放于堆内存中,引用变量是以间接的方式获取数据的;

final修饰的引用变量:一旦给其赋值,就不能被再次赋值(并非:不能改变其值)

final String s = "32";
s = "1";//报错

final TestClass obj = new TestClass(); 
obj = new TestClass();//报错
/** 报错:The final local variable s cannot be assigned. It must be blank and not using a compound assignment */

final修饰的基本类型变量:一旦给其赋值,不能改变其值

final int i = 0;
i = 2;//报错
/** 报错:The final local variable s cannot be assigned. It must be blank and not using a compound assignment */

1.4 被final修饰的方法参数

  见网上有人说:“方法参数被final修饰后,在方法体内就无法改变其值”,我觉得这种说法不太严谨的。有时会误导java初学者或新手;

  下面咱们通过举例一步一步来深入理解一下。

例1:方法参数为基本类型,不加final

  

  上面例子说明问题:方法参数为基本类型时,即便不加final,也是无法改变其值的;

  方法参数为基本类型时,此时形参i是实参i的一个拷贝,形参i在函数体不管怎么赋值都不会影响外面 i 值的变化的;

例2:方法参数为基本类型,加final

  

  上面例子说明问题:方法参数为基本类型时,给其加上final修饰后,在函数体内是不可以对参数重新赋值的;

例3:方法参数为对象时,不加final

  

 上面例子说明问题:方法参数为对象类型时,不加final,是可以改变其值的;

例4:方法参数为对象时,加final

  

  上面例子说明问题:方法参数为对象类型时,加final,是可以改变其值的;但不可以对参数重新赋值;

总结:“方法参数被final修饰后,在函数体内就无法改变其值” 这句话应该改为:

“方法参数被final修饰后,如果是基本类型,无法改变其值(也可以说成是:不可以对其重新赋值);如果是对象类型,是可以改变其值的,但不可以对其重新赋值”

原文地址:https://www.cnblogs.com/liushengit/p/9887297.html

时间: 2024-11-05 16:53:54

Java基础-final关键字用在不同处的作用及区别的相关文章

[Java基础] final关键字

1.public static final String STRING = "Hello World!"; 修饰类成员变量,该变量在此处赋值后,不允许后面再对该值进行修改,这也就是通常所说的常量.声明常量时必须初始化! 2.public final String str = "Hello World"; 修饰对象成员变量,赋值后不可更改.与修饰类成员变量不同的是,声明时不一定非要初始化,详见第 3 点. 3.public final String str; 修饰对象

JAVA 基础--final 关键字的用法

在java中,final的含义在不同的场景下有细微的差别,in a word,它指的是“不可变的” 1.修饰数据.这里的可以看到被final修饰的变量,值不能被改变,但是 package FinalTest; public class FinalPerson { public String _name; public final int _age; public FinalPerson(String name, int age) { this._name = name; this._age =

Java基础-synchronized关键字的用法(转载)

原文地址:http://blog.csdn.net/cq361106306/article/details/38736551 synchronized--同步 顾名思义是用于同步互斥的作用的. 这里精简的记一下它的使用方法以及意义: 当synchronized修饰?this或者非静态方法或者是一个实例的时候,所同步的锁是加在this或者实例对象引用上面的.比如a,b同为Main类的实例化对象,a调用被同步的方法,和b调用被同步的方法,没有形成互斥.但是不同线程的a对象调用被同步的方法就被互斥了.

聊聊Java的final关键字

Java的final关键字在日常工作中经常会用到,比如定义常量的时候.如果是C++程序员出身的话,可能会类比C++语言中的define或者const关键字,但其实它们在语义上差距还是挺大的. 在Java中,final可以用来修饰类.方法和变量(包括成员变量和局部变量).我们先来简单介绍一下final关键字的这几个用法. 一.final修饰类 常见的一个例子就是String类.当用final修饰一个类时,表明这个类不能被继承,并且final类中的所有成员方法都会被隐式地指定为final方法,但成员

关于Java中final关键字的用法总结

用于数据 永不改变的编译时常量,必须是基本类型,static final常量定义时必须赋值 一个运行时被初始化却又不希望被改变的值 空白final,确保使用前必须被初始化,但有更大的灵活性 final参数,用于对象引用,对象不可改变,用于基本类型,值不可以改变 用于方法 防止方法的行为被改变,不可覆盖 private方法默认为final的 曾经使用final方法可以提高效率,现已不提倡 用于类 表示该类不可以被继承 final类方法默认指定为final的 关于Java中final关键字的用法总结

Java之final关键字解析

Java之final关键字解析 final关键字可以修饰不同的内容,这些内容仅包括一个变量,一个方法或者一个类,以下是final修饰这些内容的作用: final变量:表示该变量为常量,即只能初始化一次 final方法:表示该方法不能被重写 final类:表示该类不可以被继承 final变量 当一个变量被final关键字修饰时,意味着它的值不可以被修改了,也就是说,这个变量表示一个常量.这也意味着final变量必须被初始化.如果一个final变量表示的是一个对象的引用,那么该变量就不能重新表示另一

Java基础:关键字final,static

一 . final 含义:adj.最后的,最终的; 决定性的; 不可更改的.在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误. 1)修饰成员变量.局部变量:在编写程序时,我们经常需要说明一个数据是不可变的,我们成为常量.在java中,用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值.更重要的是,final会告诉编译器,

java 对 final 关键字 深度理解

基础理解 : 1.修饰类 当用final去修饰一个类的时候,表示这个类不能被继承.处于安全,在JDK中,被设计为final类的有String.System等,这些类不能被继承 .注意:被修饰的类的成员可以是final修饰,可可以不是 . 2.修饰方法 : 方法不能被子类重写.常用在类设计时不希望被子类重写而修饰. 3.修饰方法参数 : 被修饰 的参数变量,不能在方法体内再次被赋值.这个好像是站在调用者的角度考虑的哈,就好像有个大佬拿了把菜刀给我,叫我去看人 ,大佬说,你一定要用这把菜刀去砍,不要

Java之final关键字

1.final类 final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的.在设计类时若不需要有子类,类的实现细节不允许改变,并且确信不会再被扩展,那么就设计为final类. 2.final方法 如果类的某个方法不允许子类覆盖,则可以把该方法声明为final方法.使用final方法的原因有二: 第一.把方法锁定,防止任何继承类修改它的意义和实现. 第二.高效.编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率. 3.final变量(常量) final