国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

J2SE綜合——對Final的一點認識

2019-11-18 11:54:29
字體:
來源:轉載
供稿:網友

  在編程的過程中,我們總是會碰到final要害字,那么我們對final怎么理解呢,下面是我的一點粗淺熟悉,和大家共享。
  
  package zy.PRo.jbd.demo;
  
  public class FinalDemo {
  
  final  int  numInt1=16;
  
  final String str="zy";
  final String str1;
  
  注重:str1在此沒有初始化,那么必須要在構造函數中初始化,否則要報錯。也就是說,final變量必須要進行初始化。
  
  public FinalDemo() {
  str1="zy";
  }
  
  public static void main(String[] args){
  System.out.println("-------------------------------------------------");
  }
  public void executeFinalTest(){
  
  }
  private void testFinalInt(){
  
  numInt1+=1;
  
  上面,我們定義了numInt1為final變量,在次將會出現一個錯誤:cannot assign a final value to final variable numInt1 at line 24
  
  由此可見,假如一個基本型別的變量被定義成了final,那么此變量將不能再被改變。
  
  System.out.println(numInt1);
  }
  private void testFinalString(){
  
  str=str+"aaaaa";
  
  此處同樣也會報錯。
  
  System.out.println(str);
  }
  }
  我們再作一個測試:
  
  (1)先創建一個類:A.java
  package zy.pro.jbd.testbase;
  
  public class A {
  int t=10;
  public A() {
  }
  public void setT(int t){
  this.t=t;
  }
  public int getT(){
  return this.t;
  }
  }
  (2)寫如下測試代碼
  
  final A a = new A();
  
  public void testFinalObject() {
  a.setT(29);
  System.out.println("t:   " + a.getT());
  }
  測試輸出的結果是:
  
  t:   29
  
  由此可見,結果發生了改變,說明final定義的變量是可以改變的,但是改變的不是變量的引址(即reference),而是變量的內容。
  我們假如寫如下代碼
  /*
  * some error will be threw
  A b=new A();
  a=b;
  */
  則會發生錯誤,說明final類型的對象不能指向另外一個同類型的對象。
  
  上邊說的比較亂,我們總結一下:
  
  總結:
  
  (1)Final 修飾 基本類型變量,則此變量是不可改變的
  (2)Final 修飾 對象,則其指向是不能改變的,但是其值是答應改變的.(即對象中的任一個屬性發生改變都意味著此對象的值發生了改變)
  (3)Final 修飾方法,則此方法將不能被重載,但是能被繼續,也就是說在子類中可以調用父類的final方法;private方法僅答應在父類中調用.在子類中你也可以定義同名的方法,這意味著,private方法對子類來說是不可見的.
  
  附錄:
  
  1)  A.java
  package zy.pro.jbd.testbase;
  
  public class A {
  int t=10;
  public A() {
  }
  public void setT(int t){
  this.t=t;
  }
  public int getT(){
  return this.t;
  }
  public final void finalA(){
  System.out.println(" final  method  finalA");
  }
  private void privateA(){
  System.out.println("private method privateA");
  }
  private final void privateFinalA(){
  System.out.println("private final method privateFinalA");
  }
  }
  
  2)  AA.java 繼續自A.java
  package zy.pro.jbd.testbase;
  
  public class AA
  extends A {
  public AA() {
  }
  /*
  public final void finalA(){
  System.out.println(" final  method  finalA");
  }
  
  這幾行代碼是錯誤的
  
  */
  private void privateA() {
  System.out.println("private method privateA in class AA");
  
  }
  
  private final void privateFinalA() {
  System.out.println("private final method privateFinalA in class AA");
  }
  
  }
  
  3)我的測試程序FinalDemo.java
  package zy.pro.jbd.demo;
  
  /**
  * this demo is created to test the usage of the final reserved Word
  */
  
  import zy.pro.jbd.testbase.A;
  
  public class FinalDemo {
  
  final int numInt1 = 16;
  final String str = "zy";
  final String str1;
  final A a = new A();
  
  public FinalDemo() {
  str1 = "zy";
  }
  
  public static void main(String[] args) {
  System.out.println("-------------------------------------------------");
  FinalDemo fd = new FinalDemo();
  fd.executeFinalTest();
  
  }
  
  public void executeFinalTest() {
  this.testFinalInt();
  this.testFinalString();
  this.testFinalObject();
  }
  
  private void testFinalInt() {
  //numInt1+=1;
  
  System.out.println(numInt1);
  }
  
  private void testFinalString() {
  //str=str+"aaaaa";
  System.out.println(str);
  }
  
  public void testFinalObject() {
  a.setT(29);
  System.out.println("t:   " + a.getT());
  /*
  * some error will be threw
  A b=new A();
  a=b;
  */
  }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大宁县| 全州县| 济源市| 东海县| 洱源县| 疏勒县| 汾西县| 夏邑县| 甘南县| 绿春县| 西乡县| 墨江| 唐山市| 怀安县| 乾安县| 新民市| 安阳县| 柳州市| 分宜县| 鄢陵县| 澜沧| 江陵县| 竹山县| 新乡市| 泸溪县| 福泉市| 陇南市| 土默特右旗| 二连浩特市| 宁乡县| 当涂县| 永丰县| 武夷山市| 克东县| 宕昌县| 安溪县| 上思县| 福贡县| 宽甸| 乌海市| 克什克腾旗|