JavaSE教程_进阶
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形参不能被赋值
}
}