Java全面細致講解final的使用
一、理解
final:最終的
二、作用
final 可以用來修飾的結(jié)構(gòu):類、方法、變量
1. 修飾-類
final 用來修飾一個類,表示此類不能被其它類所繼承,提高安全性,提高程序的可讀性。
比如:String類、System類、StringBuffer類…
代碼演示:
final class A{
}
class B extends A{ //錯誤,不能被繼承。
}
2. 修飾-方法
final 用來修飾方法:表明此方法不能被子類重寫。
比如:Object類中getClass();
代碼演示:
class A {
public final void print() {
System.out.println("A");
}
}
class B extends A {
public void print() {
// 錯誤,不能被重寫。
}
}
3. 修飾-變量
final 修飾的變量(成員變量或局部變量)稱為常量。名稱大寫,且只能被賦值一次。
static final 用來修飾屬性:全局常量。
代碼演示:
class A {
private final String INFO = "嘻嘻"; //聲明常量
public void print() {
//INFO = "哈哈";
//The final field A.INFO cannot be assigned
}
}3.1 修飾-成員變量(屬性)
final 標記的成員變量必須在聲明(顯式初始化)時或在 每個構(gòu)造器中或代碼塊中顯式賦值,然后才能使用。
如:final double MY_PI = 3.14;
3.2 修飾-局部變量
使用 final 修飾局部變量時,表明此形參是一個常量。當我們調(diào)用此方法時,給常量形參賦一個實參。一旦賦值以后,就只能在方法體內(nèi)使用此形參,且不能進行重新賦值。
三、經(jīng)典題目
//題目一:
public class Test1 {
public int addOne(final int x) {
// return ++x;
//Cannot assign a value to final variable 'x'
return x + 1;
}
}
//題目二:
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
// o = new Other();
o.i++;
}
}
class Other {
public int i;
}
//題目三:
class Root{
static{
System.out.println("Root的靜態(tài)初始化塊");
}
{
System.out.println("Root的普通初始化塊");
}
public Root(){
super();
System.out.println("Root的無參數(shù)的構(gòu)造器");
}
}
class Mid extends Root{
static{
System.out.println("Mid的靜態(tài)初始化塊");
}
{
System.out.println("Mid的普通初始化塊");
}
public Mid(){
super();
System.out.println("Mid的無參數(shù)的構(gòu)造器");
}
public Mid(String msg){
//通過this調(diào)用同一類中重載的構(gòu)造器
this();
System.out.println("Mid的帶參數(shù)構(gòu)造器,其參數(shù)值:"
+ msg);
}
}
class Leaf extends Mid{
static{
System.out.println("Leaf的靜態(tài)初始化塊");
}
{
System.out.println("Leaf的普通初始化塊");
}
public Leaf(){
//通過super調(diào)用父類中有一個字符串參數(shù)的構(gòu)造器
super("小老師ir");
System.out.println("Leaf的構(gòu)造器");
}
}
public class LeafTest{
public static void main(String[] args){
new Leaf();
System.out.println();
new Leaf();
}
}
/*output:
Root的靜態(tài)初始化塊
Mid的靜態(tài)初始化塊
Leaf的靜態(tài)初始化塊
Root的普通初始化塊
Root的無參數(shù)的構(gòu)造器
Mid的普通初始化塊
Mid的無參數(shù)的構(gòu)造器
Mid的帶參數(shù)構(gòu)造器,其參數(shù)值:小老師ir
Leaf的普通初始化塊
Leaf的構(gòu)造器
Root的普通初始化塊
Root的無參數(shù)的構(gòu)造器
Mid的普通初始化塊
Mid的無參數(shù)的構(gòu)造器
Mid的帶參數(shù)構(gòu)造器,其參數(shù)值:小老師ir
Leaf的普通初始化塊
Leaf的構(gòu)造器
*/到此這篇關于Java全面細致講解final的使用的文章就介紹到這了,更多相關Java final內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
利用Java中Calendar計算兩個日期之間的天數(shù)和周數(shù)
Java 語言的Calendar(日歷),Date(日期),和DateFormat(日期格式)組成了Java標準的一個基本但是非常重要的部分。日期是商業(yè)邏輯計算一個關鍵的部分。下面這篇文章就給大家介紹了如何利用Java中Calendar計算兩個日期之間的天數(shù)和周數(shù),下面來一起看看吧。2016-12-12
Swing圖形界面實現(xiàn)可動態(tài)刷新的驗證碼
這篇文章主要為大家詳細介紹了Swing圖形界面實現(xiàn)可動態(tài)刷新的驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05

