Java中final关键字的作用 - 极悦
Java面向对象
Java异常
Java数组
Java常用类
Java集合
Java IO流
Java线程
Java反射
Socket编程
Java注解开发
Java GoF设计模式
HashMap
Java内存模型
Java线性表

Java中final关键字的作用

final关键字修饰类, 修饰字段, 修饰方法,修饰局部变量,修饰方法的形参

final修饰类,表示最终类, 不能被继承,不能作为父类存在

final修饰字段,在定义时必须显示初始化, 不能被修改, 一般与static同时使用,所有字母都大写,称为final常量

final修饰方法,不能被覆盖(重写)

final修饰局部变量, 一旦初始化就不能再修改, 注意final修饰引用类型变量,是指这个变量不能再指向 其他对象 , 可以修改它的字段值

final修饰方法形参, 在方法体中不能修改final参数的值

package com.bjpowernode.chapter01.demo04.p1;
/**
 * 1) final修饰类,表示这个类是最终类, 不能被继承
 * 		如System类/String类就是使用final修饰的
 * 		当定义的类不想被别的类继承时, 就可以使用final修饰
 * @author Administrator
 *
 */
public final class Father {

}
package com.bjpowernode.chapter01.demo04.p2;
/**
 * 2) final修饰字段
 * 		final字段必须初始化,要么在定义时赋初值,要么在构造方法中赋初值
 * 		final字段不能重新赋值
 * 		一般情况下,final修饰字段时, 同时使用static一起修饰, 称为final常量 , 所有字母都大写
 * @author Administrator
 *
 */
public class Father2 {
	int xx;
	int yy = 20; 
	
	final int oo = 456;  		//final字段在定义时显示初始化
	final int zz;				//final字段在构造方法中显示初始化
	final static double PI = 3.14;		//final常量 
	
	public Father2() {
		zz = 121;
	}
	
	public void mm() {
		xx = 123;
		yy = 202;
//		zz = 789;  //he final field Father2.zz cannot be assigned
//		oo = 369;	//final字段不能被重新赋值
	}
}
package com.bjpowernode.chapter01.demo04.p3;
/**
 * 3) final修饰方法, 不 能被子类重写(覆盖)
 * 		注意:子类可以继承到final方法, 只是不能重写
 * @author Administrator
 *
 */
public class Father3 {
	public void m1(int xx) {
		System.out.println("父类的实例方法,可以子类覆盖");
	}
	
	public final void m2(int x, int y ) {
		System.out.println("使用final修饰的方法, 不能被子类重写");
	}
}
package com.bjpowernode.chapter01.demo04.p4;

import com.bjpowernode.chapter01.demo03.Book;

/**
 * 4) final修饰局部变量
 * 		一旦初始化完成, 就不能再重新赋值
 * @author Administrator
 *
 */
public class Test {

	public static void main(String[] args) {
		//定义局部变量
		int x ;
		x = 10;
		int y = 20; 
		//final修饰局部变量
		final int z;
		z = 30;
		final int t = 40;
		
		//可以给局部变量重新赋值
		x = 101;
		y = 202;
//		z = 303; 		//不能给final局部变量重新赋值
		
		//final修饰引用类型变量
		final Book  book1 = new Book("java入门", "勇哥", "极悦", 66.6);
		//final关键字修饰的是book1变量,不能给book1变量重新赋值,可以对象的字段值
//		book1 = new Book("java高级", "勇哥", "极悦", 88.8);
		book1.name = "java高级技术";
		
	} 

}
package com.bjpowernode.chapter01.demo04.p5;
/**
 * 5) final修饰方法形参
 * 		final形参不能被赋值
 * @author Administrator
 *
 */
public class Test {

	public static void main(String[] args) {
		m1(10, 20); 	//在调用方法时, 给final形参初始化
	}

	public static void m1( int x, final int y ) {
		x = 101;
//		y = 202;		//final形参不能被赋值
	}
}

 

全部教程