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

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

講述Java初學者必須要了解的兩個常識

2019-11-18 11:49:04
字體:
來源:轉載
供稿:網友

  一、對象(object)與引用(reference)
  
  我們知道:
  
  A a = new A();
  
  產生一個A類型的對象,a是這個對象的的一個引用,即a指向heap中真正的對象,而a和其他基本數據類型一起存放在stack中。也就是object通過reference操控,在底層的話,a更象一個指針。
  
  對于有些書本所說,a就是對象,初學者的話也沒什么大問題,因為對a的操作,就是對a指向的對象的操作。
  
  問題是,當a的指向發生改變時,a就是對象的說法就不能適應程序設計的需要。讓我們來看一個簡單的程序:
  
  class A
  {
  PRivate int i=0;
  public void setI(int x)
  {
  i=x;
  }
  public int getI()
  {
  return i;
  }
  }
  
  public class MyRef1
  {
  
  public static void main(String[] args)
  {
  A a=new A();
  A b=new A();
  a.setI(10);
  b.setI(15);
  System.out.println("a的i="+a.getI());
  System.out.println("b的i="+b.getI());
  a=b;
  a.setI(20);
  System.out.println("a的i="+a.getI());
  System.out.println("b的i="+b.getI());
  }
  }
  
  我想,大家對于程序的輸出應該認為是:
  
  a的i=10
  b的i=15
  a的i=20
  b的i=15
  
  第一,第二行應該沒什么異義,第三行是對a設置后i的值,問題是,第四行是不會輸出i=15的,正確結果是:
  
  i=20
  
  因此,a,b都是對對象的引用,當我們將b的引用賦予a時,a已經重新指向了b,對指向發生改變后的a的操作,就是對b的操作。當然,那些堅持"a,b就是對象"說法的人,還是可以解釋這個問題。
  
  我們知道,java通過final來定義常量:
  
  final int i=10;
  
  當我們對一個常量重新賦值時,會發生編譯錯誤:
  
  i=5;//編譯不通過
  
  我們也可以通過final來定義常量對象:
  
  final A a = new A();
  
  這樣的話,我們將不能對a重新賦值。
  
  假如a本身是個對象,那么,這個對象就不能發生改變,其實,a只不過是一個引用,它只能指向原來指向的對象,
  
  并不是說它所指的對象的狀態不能改變,因此,我們可以通過不改變a原來的指向的情況下對對象狀態進行改變,看程序:
  
  class A
  {
  private int i=0;
  public void setI(int x)
  {
  i=x;
  }
  public int getI()
  {
  return i;
  }
  }
  
  public class MyRef1
  {
  
  public static void
  main(String[] args)
  {
  
  final A a = new A();
  System.out.println(a.getI());
  a.setI(8);
  System.out.println(a.getI());
  
  }
  
  }
  
  假如a本身是個對象,那么,根本就不可能a.setI(8);而實際a是一個引用,程序可以編譯并運行: 顯示:8
  
  總之,Java通過renfence來操控object,是深入學習Java知識的基礎。
  
  二,Java參數是值(value)傳遞還是引用(reference)傳遞我們先看程序:
  
  public class MyRef2
  {
  
  static int x=10;
  static int y=20;
  public static void fangfa(int i)
  {
  i++;
  x=i;
  }
  
  public static void main(String[] args)
  {
  System.out.println("x="+x);
  System.out.println("y="+y);
  MyRef2.fangfa(y);
  System.out.println("x="+x);
  System.out.println("y="+y);
  
  }
  
  }
  
  顯然,將顯示:
  
  x=10
  y=20
  x=21
  y=20
  
  y的值并沒有發生改變,MyRef2.fangfa(y)使用的僅僅是y的值,里面的i++也不會作用到y本身。顯然,java的參數是值傳遞,但是,為什么會有引用傳遞的說法呢?看下面這個程序:
  
  class A
  {
  private int i=0;
  public void setI(int x)
  {
  i=x;
  }
  public int getI()
  
  return i;
  }
  }
  
  public class MyRef1
  {
  
  public static void setA1(A newA,int t)
  {
  newA.setI(t);
  
  }
  
  public static void main(String[] args)
  {
  A a=new A();
  System.out.println(a.getI());
  MyRef1.setA1(a, 30);
  System.out.println(a.getI());
  }
  
  }
  
  按照值傳遞的說法,MyRef1.setA1(a,30);將使用a所指的對象的一個復件,最終對這個對象沒有作用,而事實是,方法對這個對象起了作用,程序將顯示0,30。那么,Java參數是值傳遞是不是錯誤了呢?其實并不是的,我們要記住,a只不過是對象的reference,而reference的復件與原來的reference指向的是同一個對象,我們對復件的操作,與對a的操作一樣,最終還是對指向對象的操作,因此,Java的參數,只有值傳遞。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美自拍视频在线观看| 国产精品女人久久久久久| 国产精品扒开腿做爽爽爽视频| 日韩国产中文字幕| 国产成人拍精品视频午夜网站| 国产精品入口夜色视频大尺度| 91精品久久久久久久| 亚洲乱码av中文一区二区| 亚洲黄页网在线观看| 久久成人一区二区| 91欧美视频网站| 福利微拍一区二区| 国产精品亚洲激情| 国产精品香蕉在线观看| 日韩久久免费视频| 韩国v欧美v日本v亚洲| 国产精品对白刺激| 日韩av片免费在线观看| 欧美俄罗斯性视频| 亚洲高清色综合| 成人妇女免费播放久久久| 91网站免费看| 91国偷自产一区二区三区的观看方式| 欧美亚洲另类视频| 精品人伦一区二区三区蜜桃网站| 欧美亚洲一级片| 久久久久日韩精品久久久男男| 亚洲日本成人女熟在线观看| 国产91精品久久久久久久| 日韩欧美亚洲综合| 国产视频久久久久久久| 亚洲精品一区二区三区婷婷月| 韩国三级电影久久久久久| 日韩高清电影免费观看完整版| 国产欧美精品一区二区三区介绍| 国产成人精品免费视频| 欧美黑人xxxx| 在线观看免费高清视频97| 欧美激情va永久在线播放| 国产亚洲日本欧美韩国| 亚洲美女在线看| 欧美在线一级va免费观看| 欧美成人午夜激情在线| 亚州精品天堂中文字幕| 日韩免费av在线| 91精品国产免费久久久久久| 国产日韩欧美日韩| 韩国精品美女www爽爽爽视频| 国产精品一区二区三区久久久| 91精品国产电影| 国产精品欧美在线| 日韩精品一二三四区| 日韩美女视频在线观看| 精品国内产的精品视频在线观看| 欧美性xxxx| 欧美激情视频免费观看| 日韩中文字幕精品| 国产精品高清网站| 国产欧美一区二区三区久久人妖| 亚洲在线观看视频| 精品国产依人香蕉在线精品| 亚洲精品福利免费在线观看| 夜夜狂射影院欧美极品| 精品久久久香蕉免费精品视频| 神马久久桃色视频| 亚洲精品视频中文字幕| 欧美性猛交xxxx乱大交| 国产亚洲综合久久| 在线观看日韩www视频免费| 国产一区欧美二区三区| 亚洲最大福利网站| 亚洲欧洲日本专区| 日本在线观看天堂男亚洲| 亚洲国产精品999| 欧美黄色免费网站| 亚洲精品午夜精品| 欧美—级a级欧美特级ar全黄| 国产色婷婷国产综合在线理论片a| 亚洲女性裸体视频| 亚洲999一在线观看www| 午夜剧场成人观在线视频免费观看| 日韩成人久久久| 国产高清在线不卡| 自拍偷拍亚洲区| 亚洲第一精品夜夜躁人人爽| 在线观看日韩www视频免费| 国产剧情久久久久久| 国产精品手机播放| 亚洲精品www| **欧美日韩vr在线| 国产欧洲精品视频| 精品一区二区三区四区| 亚洲第一综合天堂另类专| 亚洲自拍偷拍在线| 日韩综合视频在线观看| 国产成人精品久久二区二区91| 91亚洲精品在线观看| 日韩精品免费电影| 欧美三级欧美成人高清www| 黑人与娇小精品av专区| 欧美成人一区在线| 国产一区二区精品丝袜| 国内精品久久久久影院 日本资源| 国产精品v片在线观看不卡| 日韩国产精品视频| 日韩欧美在线播放| 久久精品欧美视频| 国产精品久久不能| 日韩亚洲综合在线| 国产一区二区三区四区福利| 亚洲国产私拍精品国模在线观看| 夜夜躁日日躁狠狠久久88av| 久久精品99国产精品酒店日本| 欧美国产视频日韩| 91精品成人久久| 中文字幕亚洲欧美日韩在线不卡| 国产一区二区av| 欧美精品性视频| 久久久爽爽爽美女图片| 久久精品国产亚洲精品2020| 国产欧美日韩综合精品| 精品视频久久久| 亚洲视频在线看| 欧美电影在线观看完整版| 国产精品久久久久aaaa九色| 国产亚洲精品va在线观看| 欧美国产日韩中文字幕在线| 亚洲第一男人天堂| 日韩精品在线观看网站| 亚洲综合中文字幕在线| 岛国av午夜精品| 中文欧美在线视频| 狠狠躁18三区二区一区| 国产精品一区二区三| 青草成人免费视频| 热久久这里只有| 青青草原一区二区| 色偷偷噜噜噜亚洲男人| 欧美一乱一性一交一视频| 欧美日韩国产精品一区| 日本免费一区二区三区视频观看| 日韩欧美一区二区在线| 北条麻妃一区二区三区中文字幕| 成人在线一区二区| 日韩国产精品亚洲а∨天堂免| 久久精品成人动漫| 欧美有码在线视频| 中文字幕一区二区三区电影| 欧美肥婆姓交大片| 555www成人网| 性欧美视频videos6一9| 久久亚洲欧美日韩精品专区| 久久夜色撩人精品| 国产精品色午夜在线观看| 国产精品a久久久久久| 日韩高清av一区二区三区| 精品国内亚洲在观看18黄| 久久视频在线看| 欧洲精品毛片网站| 欧美人与物videos| 欧美日韩爱爱视频| 色综合久久天天综线观看| 国产成人涩涩涩视频在线观看| 亚洲精品一区二区网址|