Java基礎之:final關鍵字
final(最終),final可以修飾類、屬性、方法、區域變數
在以下情況下用到final:
-
不希望類可以被繼承時(最終類):final calss A{}
-
不希望屬性可以被改變時:public final int A = 1;
-
不希望方法可以被多載\重寫時:public final void show() {}
-
不希望區域變數可以被更改時:final int B = 1;
簡單參考案例
package class_final;
?
/**
*
* 撰寫一個程式,能夠計算圓形的面積,要求圓周率為 3.14. 賦值的位置3個方式
*
*/
public class ClassTest {
?
public static void main(String[] args) {
Circle circle = new Circle(5.2,3.1415926);
System.out.println("area:" + circle.area());
}
?
}
?
class Circle{
private double radius; //半徑
private final double PI /* = 3.14 */;
public Circle(double radius,double PI) {
this.radius = radius;
this.PI = PI;
}
// {
// PI = 3.14;
// }
public double area() {
return radius * radius * PI;
}
}
final關鍵字使用細節
-
final修飾的屬性又叫做常量,一般命名方式是:XX_XX_XX
-
final屬性在定義時,必須賦初值,可以在以下三個地方賦初值:
-
定義時,例如:public int TEXT_A = 10;
-
普通代碼塊中
-
構造器中
-
-
如果final修飾的屬性同時被static所修飾時,則就只能在以下兩個地方賦初值:
-
定義時
-
靜態代碼塊中
-
-
final類不能繼承但可以實體化物件
-
如果類不是final類,但類中有方法是final修飾的,那么此方法不能重寫,但可以被繼承
-
一般來說一個類已經是final類了,那么就沒有必要再用final修飾類中的方法了
-
final不能修飾構造器
-
final 和 static 往往搭配使用,效率更高,底層編譯器做了優化處理,
-
例如: 包裝類(Integer,Double,Float,Boolean等都是final),String也是final類,
-
-
當final修飾區域變數,我們稱為區域常量,可在宣告時賦初值,也可以在它使用前賦值,賦初值不能再修改,
細節案例
package class_final;
?
public class FinalDetail {
public static void main(String[] args) {
//細節4:final類不能繼承但可以實體化物件
new B();
}
}
?
class A{
//細節1.final修飾的屬性又叫做常量,一般命名方式是:XX_XX_XX
//細節2:定義時賦初值
final int A_INT_X = 1;
//細節2:代碼塊中賦初值
final int A_INT_Y ;
{
A_INT_Y = 1;
}
//細節2:構造器中賦初值
final int A_INT_Z;
public A() {
A_INT_Z = 1;
}
//細節3:final + static修飾的屬性,在靜態代碼塊中賦初值
final static int A_INT_H;
static {
A_INT_H = 1 ;
}
//細節5:如果類不是final類,但類中有方法是final修飾的,那么此方法不能重寫,但可以被繼承
public final void m1() {
System.out.println("A----m1");
}
}
?
?
final class B{
}
?
class C extends A{
public void m2() {
//細節5:如果類不是final類,但類中有方法是final修飾的,那么此方法不能重寫,但可以被繼承
super.m1();
//細節9:當final修飾區域變數,我們稱為區域常量,可在宣告時賦初值,也可以在它使用前賦值,賦初值不能再修改,
final int a;
a = 1;
// a = 2; //報錯:The final local variable a may already have been assigned
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/235204.html
標籤:Java
上一篇:SpringBoot環境搭建及第一個程式運行(詳細!)
下一篇:延時佇列 DelayQueue
