国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中final關鍵字的使用與注意總結

Java中final關鍵字的使用與注意總結

2020-08-20 00:06IBLiplus Java教程

這篇文章主要給大家介紹了關于Java中final關鍵字的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

在java中可以將實例域定義為final。在構建對象是必須初始化這樣的值。必須確保在每個構造器執行之后,這個域的值被設置,并且在后面的操作中不再對其修改。使用final聲明變量之后,這個值就不能修改,一般final類型的變量都被聲明為靜態變量,而且是公有類型的,它在內存中被放在一個特有的公共區域。

也就是說,在Java語法中規定,final修飾的成員變量必須有程序員顯式地指定初始值。

定義格式為: public  static  final  double pi = 3.1415926;

final修飾符大多應用于基本類型域,或不可變類的域(如果類中的每個方法都不會改變其對象,這種類成為不可變類。比如說Java中的String類就是一個不可變類。)

如果定義了兩個相同的變量,都是final類型的,這兩個相同的變量名有著不同的值,其實在內存中是開辟了兩個內存空間,之前定義的變量的值會被后來定義的變量的值覆蓋掉。原理是變量名指向后來定義的變量值的內存空間,之前定義的變量值會被Java虛擬機根據某種特定的算法在特定的時間處理掉。

在下面的代碼中詳細的介紹了final類型的變量如何進行定義和初始化:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class FinalVariableText {
 //定義成員變量是指定默認值,合法
 final int a = 6;
 //下面變量將在構造器或初始化塊中分配初始值
 final String str;
 final int c ;
 final static double d;
 //既沒有指定默認值,也沒有在初始化塊、構造器中指定初始值
 //下面定義的ch實例變量是不合法的
 //final char ch;
 
 {
 //在初始化塊中只懂初始值,合法
 str ="hello" ;
 //定義a實例變量已經有初始值了,不能為a重新賦值。下面的語句是不正確的
 //a = 9;
 }
 
 //靜態初始化塊
 static {
 // d是靜態成員變量,必須在靜態初始化塊中為其指定初始值
 d = 5.6;
 
 }
 //構造器,可對 沒有設置初始值的成員變量設置初始值
 //構造器必須與類名相同,這一點注意!
 public FinalVariableText(){
 //如果在初始化塊中對str賦初值,在構造器中在為str重新賦值,是不合法的,程序會拋出錯誤。
 c = 5;
 }
 
 public void changeFinal() {
 //普通方法不能為final修飾的成員變量賦值
 //d = 1.3;
 //也不能在普通方法中為沒有設置初始值的final類型的變量賦初值
 //ch = 'ch';
 
 }
 
 public static void main(String[] args) {
  
 FinalVariableText ff = new FinalVariableText();
 System.out.println(ff.a);
 System.out.println(ff.c);
 System.out.println(ff.str);
 System.out.println(ff.d);
 }

結果:
6
5
hello
5.6

注意:

如果打算在構造器、初始化塊中對final類型的成員變量進行初始化,則不要在初始化之前訪問成員變量的值,否則會引發程序報錯。

final也存在局部變量的情況

系統不會對局部變量進行初始化,局部變量必須由程序員顯式的進行初始化,因此使用final修飾局部變量的時候,既可以在定義是設定默認值,也可以不指定默認值。如果在定義是沒有進行設定默認值,則可以在后面的代碼中對該final變量賦初值,但只能一次,不可以重復賦值。當然如果在定義變量的時候就已經指定默認值,在后面的代碼中就沒有必要也不允許對該變量在進行賦值操作。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void text(final int a) {
//不能對fianl修飾的形參進行賦值操作
//a = 5; 該語句是不合法的
}
public static void main(String[] args) {
 //定義final局部變量時,指定初始值,則該變量再無法進行賦值了
final String str = "str";
//下面的語句會報錯,不合法
//str = "Java";
//定義final變量沒有指定默認值,則可以被賦值一次
final int d;
d = 5;
//再對d進行新的賦值,不合法
// d = 8;
 
}

Final修飾基本類型變量和引用類型的變量的區別

Final修飾基本類型變量上面已經講述的很清楚了,那引用類型的變量會有什么不同呢?對于引用類型的變量而言,它僅僅是保存了一個引用關系,final只保證這個引用類型變量所引用的地址不會改變,即一直引用同一個對象,但這個對象完全可以發生改變。下面通過代碼來驗證一下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Person1{
 
 private int age;
 //有一個參數的構造函數
 public Person1(int age) {
 this.age = age;
 }
 public int getAge() {
 return age;
 }
 public void setAge(int age) {
 this.age = age;
 }
}
 
public class FinalReferenceText {
 
 public static void main(String[] args) {
  
  final int [] arr = {5,6,12,9};
  System.out.println(Arrays.toString(arr));
  Arrays.sort(arr);
  System.out.println(Arrays.toString(arr));
  arr[2] = -8;
  System.out.println(Arrays.toString(arr));
  //下面對arr重新賦值,非法
  //arr = null;
  //final 修飾Person變量,p是一個引用變量
  final Person1 p = new Person1(45);
  //改變Person對象的實例變量,合法
  p.setAge(55);
  System.out.println(p.getAge());
  //下面對p重新賦值,非法
  //p = null;
 }
 
}

結果:
[5, 6, 12, 9]
[5, 6, 9, 12]
[5, 6, -8, 12]
55

final方法

Final修飾的方法不可被重寫,如果處于某種原因,不希望子類重寫父類的某個方法,則可以使用final關鍵字修飾該方法。

如果父類中的方法的是公有的,則子類中不能有一個一樣方法名,一樣參數的方法,但如果父類中的方法是私有的,那么子類中完全可以寫一個一樣的方法。

對于private類型的方法,由于其只能在當前類中可見,其子類無法訪問到該方法,所以子類無法重寫該方法,那么,如果子類中存在一個與父類private方法有相同方法名,一樣的參數列表,相同的返回值的方法,也不是方法的重寫,只是重新定義了一個新的方法。因此,final修飾一個private方法,依然可以在其子類中定義和父類private類型一樣的方法,不會有程序錯誤。

?
1
2
3
4
5
6
7
8
9
10
11
public class PrivateFinalText{
 
 //如果將訪問修飾符改成public,則其子類中的方法定義在程序編譯時會報錯
 private final void text();
 
}
 
class Sub extends PrivateFinalText{
 //下面的方法完全沒有問題
 public void text();
}

以上是我目前對Java中final關鍵字的總結,稍后會有補充!!!

總結

到此這篇關于Java中final關鍵字的文章就介紹到這了,更多相關Java的final關鍵字內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/IBLiplus/article/details/81072264

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久国产成人 | 99热最新网址 | 久久男人 | 在线a视频 | 精品久久久久久亚洲综合网 | 亚洲天堂中文字幕在线观看 | 欧美国产精品一区 | 中文字幕成人在线 | 色综合久久久久 | 激情网站免费观看 | www亚洲成人| 一区二区国产在线观看 | 美日韩免费视频 | 99riav在线| 综合久久av| 国产精品国产精品国产专区不片 | 精品美女久久久 | 夜夜操av | 日韩欧美中文字幕在线视频 | 日韩中文字幕在线视频 | 久久久久久国产精品 | 国产精品久久av | 久久精彩视频 | 国产日韩欧美 | 国产日韩一区二区三区 | 日韩精品 | 国产亚洲精品美女久久久久久久久久 | 亚洲一区二区久久 | 婷色综合 | 大白屁股一区二区视频 | 欧美精品成人一区二区在线 | 国产精品69毛片高清亚洲 | 一大道一二三区不卡 | 99久久精品一区二区成人 | 成人伊人 | 91在线区 | 欧美一级片在线 | 蜜桃一区| 91精彩视频在线观看 | 久色 | 欧洲一区二区三区 |