Java this關鍵字詳解
一.this關鍵字的意義
this 關鍵字通常用來表示當前物件本身,或當前類的一個實體,通過this可以呼叫本物件的所有方法和屬性,其實簡單來說,this就是所在函式所屬類的所屬物件的參考,哪個物件呼叫了this所在的函式,this就代表哪個物件,
其實學到面向物件的this關鍵字的時候,很多人多少在概念上會被繞進去,博主就是其中之一,所以在此我想通過list集合,Comparable內部比較器來詳細解釋this關鍵字,希望能夠幫助大家從源頭理解this關鍵字的作用,以下是案例,
有一個Monkey類:
public class Monkey implements Comparable<Monkey>{
private String name;
private int age;
public Monkey(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Monkey{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Monkey o) {
return this.getAge()-o.getAge();
}
}
這是Monkey類的測驗類:
public class TestM {
public static void main(String[] args) {
Scanner scanner = new Scanner(System .in);
ArrayList<Monkey> monkeys = new ArrayList<>();
Monkey monkey1=new Monkey("飛飛1",1);
Monkey monkey2=new Monkey("飛飛2",2);
Monkey monkey3=new Monkey("飛飛3",3);
Monkey monkey4=new Monkey("飛飛4",4);
Monkey monkey5=new Monkey("飛飛5",5);
monkeys.add(monkey1);
monkeys.add(monkey2);
monkeys.add(monkey3);
monkeys.add(monkey4);
monkeys.add(monkey5);
//打亂
Collections.shuffle(monkeys);
System.out.println(monkeys);
//排序
Collections.sort(monkeys);
System.out.println(monkeys);
//交換
Collections.swap(monkeys,0,2);
System.out.println(monkeys);
//查找--前提是集合先升序排序
Collections.sort(monkeys);
System.out.println(Collections.binarySearch(monkeys,new Monkey("肉肉",5)));
}
}
在這我們通過list集合創建了五只monkey物件并存入list集合中去,實際上我們創建了五只猴子,也就是五個物件,然后比較器寫的方法是用來實作將五只猴子通過年齡大小來進行從小到大的排序的,
然后利用五只猴子分別呼叫有參構造方法將資訊分別傳遞給Monkey類中有參構造里的形參name和形參age,我們可以直接將這個程序理解為一個將實際引數傳遞給形式引數的程序,然后再將形參name和age的值賦給this.name和this.age,到這,就可以理解為monkey1.name=monkey1通過有參構造傳過去的實際姓名 monkey1.age=monkey1通過有參構造傳過去的實際年齡,以此類推monkey2,3,4,5,所以就能理解為什么說this是用來代表當前物件,
然后是**比較器**里的this.getAge() 和o.getAge(),其實是可以簡單理解為其中一只猴子用了這種辦法來和其它四只猴子包括它自己進行年齡上的比較,后面定義的o是用來表示屬于Monkey大類的五只猴子的,而this只能用來代表五只猴子中的一只,五只猴子中的哪一只猴子用了這個辦法那么哪只猴子就是this,所以this.getAge()就可以和o.getAge()區分開來,因為五只猴子都用了這個辦法來比較年齡,所以就實作了通過年齡進行排序,
this關鍵字的應用
1.使用this來區分同名變數
成員變數與方法內部的變數重名時,要在方法內部呼叫成員變數,就需要用到this關鍵字,
public class Monkey{
private String name;
private int age;
public Monkey(String name, int age) {
this.name = name;
this.age = age;
}
}
上面有參構造里的用法就是非常典型的使用this來區分同名變數,
2.作為方法名來初始化物件
也就是相當于呼叫本類的其它構造方法,他必須作為構造方法的第一句,如下:
public class Monkey{
private String name;
private int age;
//無參構造
public Monkey(){
this("哈KK",21);
}
//有參構造
public Monkey(String name, int age) {
this.name = name;
this.age = age;
}
}
值得注意的是:
1.在構造方法中呼叫另一個構造方法,呼叫動作必須置于最起始的位置,
2.不能在構造方法以外的任何方法內呼叫構造方法,
3.在一個構造方法內只能呼叫一個構造方法
3.作為引數來傳遞
需要在某些完全分離的類中呼叫一個方法,并將當前物件的一個參考作為引數傳遞時,
public class Demo{
public static void main(String[] args){
B b=new B(new A);
}
}
class A{
public A(){
new B(this).print(); //匿名物件
}
public void print(){
System.out.println("hello from A!");
}
}
class B{
A a;
public B(A a){
this.a=a;
}
public void print(){
a.print();
System.out.println("hello from B!");
}
}
運行結果:
Hello from A!
Hello from B!
如果物件只使用一次,就可以作為匿名物件,代碼中new B(this).print();等價于(new B(this)).print(),先通過new B(this)創建一個沒有名字的物件,再呼叫它的方法,
以上就是我對this關鍵字的理解
最后祝大家“鍵盤敲爛,年薪百萬”!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/204102.html
標籤:java
上一篇:java中jdk的下載與安裝
