亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java中final作用于變量、參數、方法及類該如何處理

2024-07-13 10:14:25
字體:
來源:轉載
供稿:網友

Java中方法用final修飾參數的作用

在方法參數前面加final關鍵字就是為了防止數據在方法體重被修改。

主要分為兩種情況:第一,用final修飾基本數據類型;第二,用final修飾引用數據類型。

第一種情況,修飾基本數據類型,這時參數的值在方法體內是不能被修改的,即不能被重新javascript/13407.html">賦值。否則編譯就不通過。

第二種情況,修飾引用類型。這時參數java/221873.html">變量所引用的對象是不能被改變的。但是對于引用數據類型,如果修改其屬性的話是完全可以的。

所以,final這個關鍵字,想用的話就用基本數據類型,還是很有作用的。

final變量:

對于基本類型使用final:它就是一個常量,數值恒定不變

對于對象引用使用final:使得引用恒定不變,一旦引用被初始化指向一個對象,就無法再把 它改為指向另一個對象。然而,對象自身卻是可以被修改的,java并沒有提供使任何對象恒定不變的途徑。這一限制同樣也使用數組,它也是對象。

例子:

class Value{ int i; public Value(int i){  this.i = i; }}public class FinalData { private static Random random = new Random(47); private String id;  public FinalData(String id){  this.id = id; }  private final int valueOne = 9; private static final int VALUE_TWO = 99; public static final int VALUE_THREE = 39; private final int i4 = random.nextInt(20); static final int INT_5 = random.nextInt(20);  private Value v1 = new Value(11); private final Value v2 = new Value(22); private static final Value VAL_3 = new Value(33);  private final int[] a = {1, 2, 3, 4, 5, 6}; public String toString(){  return id + ": " + "i4 = " + i4 + ", INT_5 = " + INT_5; }   public static void main(String[] args) {  FinalData fd1 = new FinalData("fd1");  //! fd1.valueOne++; // 因為valueOne是基本類型常量,其數值恒定不變  fd1.v2.i++; //final修飾的對象的內容可以改變  fd1.v1 = new Value(9);  for(int i = 0; i < fd1.a.length; i++)   fd1.a[i]++;  //! fd1.v2 = new Value(0); // 因為v2是final修飾的引用類型,其引用不能被修改指向另一個對象  //! fd1.VAL_3 = new Value(1); // 表示占據一段不能改變的內存空間  //! fd1.a = new int[3]; // final修飾的數組  System.out.println(fd1);  System.out.println("Creating new FinalData");  FinalData fd2 = new FinalData("fd2");  System.out.println(fd1);  System.out.println(fd2); }}/*output:fd1: i4 = 15, INT_5 = 18Creating new FinalDatafd1: i4 = 15, INT_5 = 18fd2: i4 = 13, INT_5 = 18*/

分析:

對于fd1,fd2兩個對象,其中i4是唯一的,即每個對象都有一個i4,但INT_5被聲明為static,即是類共享的,fd1和fd2共享INT_5,在裝載時已經被初始化,而不是每次創建新對象時初始化(例如i4);但它同時被設置成final,所以它的引用是不可改變的,即不能被修改指向另一個對象。

空白final:

被聲明為final但又沒有給定初值。必須在域的定義或者每個構造器中使用表達式對final進行賦值,這正是final域在使用前總是初始化的原因。

final參數:

這意味著你無法在方法中更改參數引用,使其指向另一個參數,但可以修改final對象所指向的內容

例子:

class Gizmo{ int i = 0; public void spin(){}}public class FinalArguments { void with(final Gizmo g){  //! g = new Gizmo(); // 無法修改final修飾的引用,使它指向另一個對象  g.i++; // 但可以修改final對象所指向的內容 } void without(Gizmo g){  g = new Gizmo();  g.spin(); } // int g(final int i){//  //! i++; //因為參數i是常量值// }  int g(final int i){  return i + 1; }  public static void main(String[] args) {  FinalArguments bf = new FinalArguments();  bf.without(null);  bf.with(null); }}

分析:

參數被聲明為final,若是基本參數,那它就是一個常量,不能被修改;若是一個引用變量,那么它就不能被修改指向另一個對象,但可以修改該引用所指對象的內容。

fianl方法:

使用原因:

  • 把方法鎖定,以防任何繼承類修改它的含義,即該方法不會被繼承的類覆蓋
  • 效率,若一個方法指明為final,那么就同意編譯器將針對該方法的所有調用轉為內嵌調用。

類中所有的private方法都隱式地指定為final,由于無法取用private方法,所以也就無法覆蓋它??梢詫rivate方法添加final修飾詞,但這并不會給該方法帶來任何額外的意義。

例子:

class WithFinals{ private final void f(){  System.out.println("WithFinals.f()"); } private void g(){  System.out.println("OverridingPrivate.f()"); }}class OverridingPrivate extends WithFinals{ private final void f(){  System.out.println("OverridingPrivate.f()"); } private void g(){  System.out.println("OverridingPrivate.g()"); }}class OverridingPrivate2 extends OverridingPrivate{ /*  * 當使用Override注解強制使f()方法覆蓋父類的f()方法時,會報錯  * 因為它不知道父類是否有該方法,對于g()方法來說,它只是生成了一個新的方法,  * 并沒有覆蓋掉父類中的g()方法。  */ //@Override public final void f(){  System.out.println("OverridingPrivate2.f()"); } public void g(){  System.out.println("OverridingPrivate2.g()"); }}public class FinalOverridingIllusion{ public static void main(String[] args) {  OverridingPrivate2 op2 = new OverridingPrivate2();  op2.f();  op2.g();    // 可以向上轉型  OverridingPrivate op = op2;  //! op.f(); // 父類中final方法對子類來說是不可見的  //! op.g();  WithFinals wf = op2;  // wf.f();  // wf.g(); }}/*output:OverridingPrivate2.f()OverridingPrivate2.g()*/

分析:

覆蓋何時發生:

  1,子類中出現與父類完全一致的方法

  2. 子類可以通過向上轉型為父類,并調用父類中的那個方法

若父類中某個方法被聲明為final或者private,那么這個方法對子類來說是不可見的,就算在子類中創建了與父類一模一樣的方法,這也是一個新的方法,而不是從父類中覆蓋的方法。

final類:

即該類不能被繼承,不管是你還是別人,也就是這個類不需要做任何變動,也不需要任何子類,例如String類。

例子:

class SmallBrain{}final class Dinosaur{ int i = 7; int j = 1; SmallBrain x = new SmallBrain(); void f(){}}// error: The type Further cannot subclass the final class Dinosaur// Dinosaur類不能有子類// class Further extends Dinosaur{}public class Jurassic { public static void main(String[] args) {  Dinosaur n = new Dinosaur();  n.f();  n.i = 40;  n.j++; }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品在线免费播放| 成人国产精品久久久久久亚洲| 91精品国产91久久久久福利| 国产视频精品va久久久久久| 亚洲免费av片| 中文字幕日韩综合av| 海角国产乱辈乱精品视频| 日韩视频第一页| 成人综合网网址| 97在线看福利| 国产精品视频自在线| 欧美视频裸体精品| 青青草国产精品一区二区| 欧美日本中文字幕| 成人一区二区电影| 精品高清一区二区三区| 国产精品扒开腿爽爽爽视频| 国产精品香蕉在线观看| 91在线免费视频| 国产主播精品在线| 国产精品一区专区欧美日韩| 国产日韩在线精品av| 欧美成人精品在线| 九九热精品视频| 国产精品福利网| 亚洲欧美制服第一页| 国产欧美日韩中文字幕| 亚洲欧美中文日韩v在线观看| 久久久爽爽爽美女图片| 欧美黑人极品猛少妇色xxxxx| 97精品伊人久久久大香线蕉| 亚洲一区亚洲二区亚洲三区| 欧美夫妻性生活xx| 成人黄色免费看| 欧美一级淫片videoshd| 亚洲国产精品国自产拍av秋霞| 国产99久久精品一区二区 夜夜躁日日躁| 日韩av在线精品| 日韩美女av在线免费观看| 国产日本欧美一区| 亚洲精选一区二区| 日本精品一区二区三区在线播放视频| 国产视频一区在线| 欧美国产日韩二区| 久久久久久97| 成人黄色短视频在线观看| 欧美精品久久久久a| 成人网页在线免费观看| 色七七影院综合| 成人欧美在线视频| 成人精品视频久久久久| 亚洲精品永久免费精品| 亚洲一级免费视频| 亚洲大胆美女视频| 都市激情亚洲色图| 尤物九九久久国产精品的分类| 中文字幕精品影院| 日本精品免费一区二区三区| 国产在线观看精品一区二区三区| 亚洲专区在线视频| 国产精品第2页| 中文字幕日韩精品在线观看| 久久免费视频这里只有精品| 亚洲精品一区二区三区婷婷月| 亚洲娇小xxxx欧美娇小| 日韩国产精品一区| 国产成人a亚洲精品| 日韩欧美国产网站| 亚洲色图第一页| 国产91成人在在线播放| 九九热精品视频| 亚洲aⅴ日韩av电影在线观看| 久久精品国产2020观看福利| 欧美成人中文字幕| 日韩中文字幕在线视频播放| 亚洲激情在线视频| 欧美日本亚洲视频| 亚洲国产精品成人va在线观看| 国产免费一区二区三区在线观看| 国产精品视频xxxx| 欧美日韩人人澡狠狠躁视频| 成人激情免费在线| 日韩成人激情视频| 国产一区二区三区高清在线观看| 欧美在线一区二区三区四| 成人情趣片在线观看免费| 日韩中文字幕在线视频播放| 亚洲女人天堂视频| 国产精品91免费在线| 国产精品久久久久久久久久ktv| 国产精品影院在线观看| 九九精品在线视频| 91中文精品字幕在线视频| 欧美极品少妇xxxxⅹ免费视频| 九九热这里只有精品免费看| 欧美大片va欧美在线播放| 亚洲欧美日韩第一区| 一区二区福利视频| 2018中文字幕一区二区三区| 一二美女精品欧洲| 欧美激情啊啊啊| 欧美激情影音先锋| 国产一区二区在线免费| 国产一区二区动漫| 精品久久久久久久久久久| 77777少妇光屁股久久一区| 日韩中文字幕在线看| 亚洲一区二区三区成人在线视频精品| 亚洲第一免费播放区| 日韩美女视频在线观看| 国产不卡视频在线| www日韩中文字幕在线看| 国产精品美女主播在线观看纯欲| 久久亚洲精品中文字幕冲田杏梨| 国产伦精品一区二区三区精品视频| 另类天堂视频在线观看| 欧美电影在线观看完整版| 亚洲国产天堂久久综合| 欧美性黄网官网| 中文字幕免费精品一区| 国产精品嫩草影院一区二区| 欧美在线视频免费| 国产成人久久精品| 中文字幕亚洲国产| 日韩经典中文字幕在线观看| 国产精品永久免费视频| www日韩欧美| 亚洲的天堂在线中文字幕| 高清在线视频日韩欧美| 精品少妇v888av| 成人国内精品久久久久一区| 欧美中文在线观看| 亚洲欧洲偷拍精品| 亚洲国产精品成人va在线观看| 成人女保姆的销魂服务| 国产福利视频一区| 国产ts人妖一区二区三区| 欧美激情视频给我| 亚洲精品国产综合区久久久久久久| 91在线直播亚洲| 亚洲天堂第一页| 国产一区二区成人| 久久久久久亚洲精品不卡| 亚洲一区www| 日韩精品视频在线免费观看| 91精品久久久久久| 日韩av日韩在线观看| 亚洲缚视频在线观看| 亚洲免费人成在线视频观看| 日韩高清电影免费观看完整版| 欧美孕妇毛茸茸xxxx| 亚洲欧美日韩中文视频| 久久久伊人日本| 欧美俄罗斯乱妇| 欧美最猛性xxxx| 欧美成年人在线观看| 午夜精品久久久久久久99黑人| www.欧美三级电影.com| 日本一区二区在线免费播放| 精品国产一区二区三区在线观看| 国产精品一区二区三区毛片淫片| 国产精品爽爽爽爽爽爽在线观看| 亚洲精品资源在线| 91免费看片网站|