fianl关键字

如果要用到final关键字,一般是处于效率或者设计的考虑。final一般用于类,方法,变量(成员变量,局部变量 )。

  • final修饰类。表示该类不能被继承。通常这个是处于安全的考虑。比如String就是一个final类,而且final的方法默认是final的,也就是不能被继承,就自然不存在重写。为什么String是final定义的呢?我想处于两点:其一:安全性,String里面有很多方法是直接跟操作系统通信的,如果这个类可以被继承,那么就是说可以被修改的,那么任何一个继承这个类的人都可以对其中方法进行重写,是一件很不安全的事情。其二:处于效率。因为字符串被用的频率实在是太高了,处于效率设计成final的类,一旦这个类的对象被创建就不能被修改了。而且该类的对象只具有可读性,可以在多线程环境下共享,而不需要额外的同步开销。
  • final修饰方法,表示该方法不能被重写。
  • final定义变量。如果修饰的是基本数据类型,也就是说一旦变量被初始化便不能更改。如果修饰的是引用类型,一旦初始化之后,其引用不能指向别的对象。

实例:

package com.wang.test;

public class FinalTest {
	public int w1 = 5;
	static int w2 = 8;
	private static final int w3 = 10;
	
	Apple apple1 = new Apple(6);
	
	static final Apple apple2 = new Apple(9);
	static Apple apple3 = new Apple(10);
	
	public static void main(String[] args){
		FinalTest test = new FinalTest();
		//静态方法不能调用非静态方法,由于非静态变量需要对象访问。
		System.out.println(++test.w1);
		
		System.out.println(++w2);
		System.out.println(w2);
		<span style="background-color: rgb(255, 0, 0);">System.out.println(++w3);</span>
		System.out.println(apple3);
		<span style="background-color: rgb(255, 0, 0);">apple2 = apple3;</span>
		
	}

}


class Apple{
	private int i = 9;
	public Apple(int i){
		this.i = i;
	}
	
	public void setI(int i){
		this.i = i;
	}
	
	public int getI(){
		return i;
	}
	
}
第一个红色之处,有一个错误:The final field FinalTest.w3 cannot be assigned

第二个红色之处,有一个错误:The final field FinalTest.w3 cannot be assigned

由此可以看到,一旦变量被定义为final且初始化之后,其引用是不能指向另一个对象的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值