学习笔记-JAVA-final关键字考点

我的博客http://blog.csdn.net/wzwdcld

 

一、final修饰变量的原则

final可以修饰成员变量,也可以修饰局部变量、形参。final变量一旦获得初始值之后,final的变量就不能被重新赋值。

成员变量是随类初始化或对象初始化而初始化的,当执行静态初始化块时候可以对类属性进行赋初始值,当执行普通初始化块或者构造器的时候可以对实例属性赋初始值。因此成员变量的初始值可以在定义的时候赋值或者在初始化块、构造器中指定。

(3)对于final修饰的成员变量而言,一旦有了初始值之后,就不能被重新赋值,因此不可以在普通方法中对成员变量赋值。要么在定义的时候赋值,要么在方法块和构造器中赋值。

final成员变量,必须由程序员显示初始化,系统不会对final成员进行隐式初始化。

final修饰局部变量时既可以在定义时候指定默认值,也可以不指定,在后面指定,但只能一次。

final修饰基本类型的时候 变量不能改变

final修饰引用类型变量,final只保证这个引用的地址不变,即一直引用同一对象。但这个对象可以改变。

演练:

public void getGrade(){
 final int school;
 school=2;
 school=3;//这样就会报错,违反了原则(3)
 }
public static void main(String[] args) {
 StaticTest test=new StaticTest();
}

class MyClass{
2) final int value;
3) public MyClass(){}
4) public MyClass(int value){
5) this.value = value;
6) }
7) }
8) public class TestMain{
9) public static void main(String args[]){
10) MyClass mc = new MyClass(10);
11) System.out.println(mc.value);
12) }
13) }
选择正确答案:
A. 编译通过,输出10
B. 编译不通过,把第2 行改为final int value = 10;
C. 编译不通过,把第3 行改为public MyClass(){ value = 10; }

C 加final的变量一定要被初始化。

class MyValue{
int value;
}
public class TestFinal{
public static void main(String args[]){
final MyValue mv = new MyValue();
mv.value = 100;
//1
System.out.println(mv.value);
}
}
下面说法正确的是:
A. 编译不通过
B. 编译通过。在//1 处加上:mv.value = 200; 则编译不通过
C. 编译通过。如果在//1 处加上:mv = new MyValue(); 则编译不通过。

虽然MyValue的value成员变量默认private,但是因为????…..,所以可以在TestFinal类中使用my.value

 

答案:C

final MyValue mv = new MyValue(); 此处final修饰的是对象的引用。

 

使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

引用不能变,引用的变量还是可以变的。

fina lStringBuffer strBuffer =newStringBuffer("Hello");

执行如下语句将报告编译期错误:

strBuffer=newStringBuffer("");

但是,执行如下语句则可以通过编译:

strBuffer.append("world!");

所以,有人在定义方法的参数时,想采用如下形式来阻止方法内部修改传进来的参数对象:

publicvoidmethod(finalStringBufferparam) {

}

实际上,这是办不到的。因为仍然可以执行这样的代码:param.append("world!");

 

 

二、final修饰方法和类

final修饰方法不可以被重写 不希望子类重写父类的方法,可以使用final修饰。

final修饰的类不可以被继承。

 

 

 

 

 

 

 

Java修饰符 abstract,static,final 的区别详解http://www.jb51.net/article/41430.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值