JAVA 基礎 / 第二十四課: 類和對象 / JAVA 中的THIS 是什麼意思?傳參祥解,java祥解

來源:互聯網
上載者:User

JAVA 基礎 / 第二十四課: 類和對象 / JAVA 中的THIS 是什麼意思?傳參祥解,java祥解

2018-03-14

一、this這個關鍵字,相當於普通話裡的“我” ,例如:

小明說 “我吃了” 這個時候,“我” 代表小明 
小紅說 “我吃了” 這個時候,“我” 代表小紅 
"我"代表當前人物 。

1、this即代表當前對象:

public class Hero {         String name; //姓名         float hp; //血量         float armor; //護甲         int moveSpeed; //移動速度     //列印記憶體中的虛擬位址    public void showAddressInMemory(){        System.out.println("列印this看到的虛擬位址:"+this);    }         public static void main(String[] args) {        Hero garen =  new Hero();        garen.name = "蓋倫";        //直接列印對象,會顯示該對象在記憶體中的虛擬位址        //格式:Hero@c17164 c17164即虛擬位址,每次執行,得到的地址不一定一樣         System.out.println("列印對象看到的虛擬位址:"+garen);        //調用showAddressInMemory,列印該對象的this,顯示相同的虛擬位址        garen.showAddressInMemory();                 Hero teemo =  new Hero();        teemo.name = "提莫";        System.out.println("列印對象看到的虛擬位址:"+teemo);        teemo.showAddressInMemory();    }       }

2、通過this關鍵字訪問對象的屬性:

public class Hero {         String name; //姓名         float hp; //血量         float armor; //護甲         int moveSpeed; //移動速度     //參數名和屬性名稱一樣    //在方法體中,只能訪問到參數name    public void setName1(String name){        name = name;    }         //為了避免setName1中的問題,參數名不得不使用其他變數名    public void setName2(String heroName){        name = heroName;    }         //通過this訪問屬性    public void setName3(String name){        //name代表的是參數name        //this.name代表的是屬性name        this.name = name;    }         public static void main(String[] args) {        Hero  h =new Hero();                h.setName1("teemo");        System.out.println(h.name);                 h.setName2("garen");        System.out.println(h.name);                     h.setName3("死歌");        System.out.println(h.name);        }    }

3、通過this調用其他的構造方法:

如果要在一個構造方法中,調用另一個構造方法,可以使用this()

public class Hero {           String name; //姓名           float hp; //血量          float armor; //護甲            int moveSpeed; //移動速度            //帶一個參數的構造方法    public Hero(String name){        System.out.println("一個參數的構造方法");        this.name = name;    }          //帶兩個參數的構造方法    public Hero(String name,float hp){        this(name);        System.out.println("兩個參數的構造方法");        this.hp = hp;    }     public static void main(String[] args) {        Hero teemo =  new Hero("提莫",383);               System.out.println(teemo.name);            }      }

二、變數有兩種類型:基本類型和類類型;參數也是變數,所以傳參分為基本類型傳參和類類型傳參:

1、基本類型傳參:

在方法內,無法修改方法外的基本型別參數

public class Hero {           String name; //姓名            float hp; //血量            float armor; //護甲            int moveSpeed; //移動速度         public Hero(){}      //回血    public void huixue(int xp){        hp = hp + xp;        //回血完畢後,血瓶=0        xp=0;    }         public Hero(String name,float hp){        this.name = name;        this.hp = hp;    }     public static void main(String[] args) {        Hero teemo =  new Hero("提莫",383);        //血瓶,其值是100        int xueping = 100;                 //提莫通過這個血瓶回血                 teemo.huixue(xueping);                 System.out.println(xueping);             }      }

2、引用與=

如果一個變數是基本類型,比如 int hp = 50;我們就直接管hp叫變數,=表示賦值的意思。
如果一個變數是類類型,比如 Hero h = new Hero();我們就管h叫做引用。

=不再是賦值的意思,=表示指向的意思:

比如 Hero h = new Hero();這句話的意思是:引用h,指向一個Hero對象。

3、類類型傳參:

類類型又叫引用 
第24行的引用 teemo與 第17行的引用hero,是不同的引用 
通過調用garen.attack(teemo, 100); 使得這兩個引用都指向了同一個對象 
所以在第18行hero.hp = hero.hp - damage; 就使得該對象的hp值,發生了變化 
因此第25行,列印該對象的Hp值就是變化後的值

public class Hero {    String name; // 姓名     float hp; // 血量     float armor; // 護甲     int moveSpeed; // 移動速度     public Hero(String name, float hp) {        this.name = name;        this.hp = hp;
} // 攻擊一個英雄,並讓他掉damage點血 public void attack(Hero hero, int damage) { hero.hp = hero.hp - damage; } public static void main(String[] args) { Hero teemo = new Hero("提莫", 383); Hero garen = new Hero("蓋倫", 616); garen.attack(teemo, 100); System.out.println(teemo.hp); }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.