<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      不可觸及

      導航

      Java里this的作用和用法

      對象創(chuàng)建的過程和this的本質(zhì)

        構造方法是創(chuàng)建Java對象的重要途徑,通過new關鍵字調(diào)用構造器時,構造器也確實返回該類的對象,但這個對象并不是完全由構造器負責創(chuàng)建。創(chuàng)建一個對象分為如下四步:

        1. 分配對象空間,并將對象成員變量初始化為0或空

        2. 執(zhí)行屬性值的顯示初始化

        3. 執(zhí)行構造方法

        4. 返回對象的地址給相關的變量

        this的本質(zhì)就是“創(chuàng)建好的對象的地址”! 由于在構造方法調(diào)用前,對象已經(jīng)創(chuàng)建。因此,在構造方法中也可以使用this代表“當前對象” 。

        this最常的用法:

        1.  在程序中產(chǎn)生二義性之處,應使用this來指明當前對象;普通方法中,this總是指向調(diào)用該方法的對象。構造方法中,this總是指向正要初始化的對象。

        2. 使用this關鍵字調(diào)用重載的構造方法,避免相同的初始化代碼。但只能在構造方法中用,并且必須位于構造方法的第一句。

        3. this不能用于static方法中。

      【示例4-8】this代表“當前對象”示例

       1 public class User {
       2     int id;        //id
       3     String name;   //賬戶名
       4     String pwd;   //密碼
       5  
       6     public User() {
       7     }
       8     public User(int id, String name) {
       9         System.out.println("正在初始化已經(jīng)創(chuàng)建好的對象:"+this);
      10         this.id = id;   //不寫this,無法區(qū)分局部變量id和成員變量id
      11         this.name = name;
      12     }
      13     public void login(){
      14         System.out.println(this.name+",要登錄!");  //不寫this效果一樣
      15     }   
      16      
      17     public static void main(String[] args) {
      18         User  u3 = new User(101,"高小七");
      19         System.out.println("打印高小七對象:"+u3);
      20         u3.login();
      21     }
      22 }

       

       

      
      

       

       【示例4-9】this()調(diào)用重載構造方法

       

       1 public class TestThis {
       2     int a, b, c;
       3  
       4     TestThis() {
       5         System.out.println("正要初始化一個Hello對象");
       6     }
       7     TestThis(int a, int b) {
       8         // TestThis(); //這樣是無法調(diào)用構造方法的!
       9         this(); // 調(diào)用無參的構造方法,并且必須位于第一行!
      10         a = a;// 這里都是指的局部變量而不是成員變量
      11 // 這樣就區(qū)分了成員變量和局部變量. 這種情況占了this使用情況大多數(shù)!
      12         this.a = a;
      13         this.b = b;
      14     }
      15     TestThis(int a, int b, int c) {
      16         this(a, b); // 調(diào)用帶參的構造方法,并且必須位于第一行!
      17         this.c = c;
      18     }
      19  
      20     void sing() {
      21     }
      22     void eat() {
      23         this.sing(); // 調(diào)用本類中的sing();
      24         System.out.println("你媽媽喊你回家吃飯!");
      25     }
      26  
      27     public static void main(String[] args) {
      28         TestThis hi = new TestThis(2, 3);
      29         hi.eat();
      30     }
      31 }

       

      this, 一個官方的說法是,this首先是一個對象,它代表調(diào)用這個函數(shù)的對象。

      根據(jù)面向?qū)ο蟮幕菊Z法,每當調(diào)用變量或者函數(shù)的時候,都要按照類名.變量(函數(shù))的格式來調(diào)用,意即每個變量或函數(shù)都必須屬于某一個實際的對象而不是一個類(static的除外).
             在不會產(chǎn)生混淆的地方, this是可以省略的,但一般都會加上,(Think in Java里面說最好不要加,因為大家都不加)

      例如,下面的程序中,類"Person"里面加與不加 this 編譯運行后的結果是一樣的:

       package testThis;
       2 
       3 public class Test {
       4     public static void main(String args[]){
       5         Person p1 = new Person();
       6         p1.name = "zhangsan";
       7         Person p2 = new Person();
       8         p2.name = "lisi";
       9         
      10         p1.talk();
      11         p2.talk();
      12     }
      13 }
      14 
      15 class Person{
      16     String name;
      17     void talk(){
      18         System.out.println("My name is " + this.name);
      19     }
      20 }
      復制代碼

       上面的代碼里第18行,不管是"this.name"還是"name",運行的結果都是:

      My name is zhangsan
      My name is lisi

       因為前面已經(jīng)把p1和p2里面的name變量賦值,所以執(zhí)行方法的時候,都會打印出它們各自的數(shù)據(jù).

      但是,當函數(shù)里面有參數(shù)時,如果函數(shù)的參數(shù)和成員變量一樣,這時不加this的話,程序就會根據(jù)"就近原則",自動調(diào)用最近的值,如下面的代碼:

      
      

       因為前面已經(jīng)把p1和p2里面的name變量賦值,所以執(zhí)行方法的時候,都會打印出它們各自的數(shù)據(jù).

       

      上面已經(jīng)把對象p1和p2里面的變量name分別賦值為"zhangsan"和"lisi",但類"Person"里面的方法"talk"現(xiàn)在有了參數(shù)"String name",而且沒有加"this",這時如果運行這個方法,方法就會接收后面參數(shù)傳送給它的值,分別是"zhang"和"li",這時運行結果就會是:

      My name is zhang
      My name is li

      所以,這里雖然對象p1和p2各有自己的變量 name,但它們調(diào)用的方法接收的卻是參數(shù)里面的值,(從系統(tǒng)里各變量的顏色背景也可心看出對應的變量),而不是它們自己本身的值.所以這里輸出的結果跟它們自己內(nèi)部的值無關.

      如果想要在它們各自調(diào)用talk()方法時分別輸出自己內(nèi)部的值,則需要在類 "Person"里面的方法"talk"里加上"this",這樣,當它們各自調(diào)用這個方法時,輸出的結果都是它們各自內(nèi)部變量的值了

       

      參考博文:http://www.rzrgm.cn/livterjava/p/4709383.html

       

      posted on 2019-06-04 22:58  不可觸及  閱讀(15066)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 日韩永久永久永久黄色大片| 精品无码国产一区二区三区AV| 亚洲丰满熟女一区二区蜜桃| 熟女性饥渴一区二区三区| 人妻系列无码专区69影院| 亚洲大尺度无码专区尤物| 伊人久久大香线蕉av五月天| 精品久久久久无码| 一面膜上边一面膜下边视频| 鄂伦春自治旗| 中文无码热在线视频| 国产永久免费高清在线观看| 中文人妻av高清一区二区| 午夜福利国产精品视频| 久久婷婷国产精品香蕉| 台东市| 午夜福利电影| 亚洲一区二区三级av| 亚洲国产日韩伦中文字幕| 在线aⅴ亚洲中文字幕| 色综合国产一区二区三区| 亚洲综合中文字幕第一页| 九色精品国产亚洲av麻豆一| 国产一级r片内射免费视频| 鲁一鲁一鲁一鲁一澡| 久热久热中文字幕综合激情| 国产福利免费在线观看| 亚洲成A人片在线观看无码不卡| 99热成人精品热久久66| 亚洲国产精品久久久天堂麻豆宅男| 精品无人乱码一区二区三区的优势| 柳林县| 亚洲中文字幕日产无码成人片| 国产精品色哟哟在线观看| 国产一区二区av天堂热| 国产微拍一区二区三区四区| 一区二区三区午夜无码视频| 亚洲视频欧美不卡| 精品视频在线观看免费观看| 亚洲欧美不卡视频在线播放| 好爽毛片一区二区三区四|