一、this關鍵字的作用
this關鍵字除了可以強調(diào)本類中的方法還具有以下作用。
1.表示類中的屬性
2.可以使用關鍵字調(diào)用本類中的構(gòu)造方法
3.this表示當前對象
1.1表示類中的屬性
package thiss;
class Person{
private int age;
private String name;
public Person(int age,String name){
this.age=age;//為類中的age屬性賦值
this.name=name;//為類中的name屬性賦值
}
public String getinfo(){
return "姓名為:"+name+","+"年齡為:"+age;
}
}
public class ThisDemo {
public static void main(String[] args) {
Person person = new Person(15,"張三");
person.getinfo();
System.out.println(person.getinfo());
}
}
1.2使用this調(diào)用構(gòu)造方法
如果在一個類中有多個構(gòu)造方法,也可以使用this調(diào)用構(gòu)造方法。使用this()調(diào)用構(gòu)造方法,此語句必須放在構(gòu)造方法的第一行。
package thiss;
class Person1{
private int age;
private String name;
public Person1(){//無參構(gòu)造方法
}
public Person1(String name){//一個參數(shù)的構(gòu)造方法
this();//調(diào)用無參構(gòu)造方法
this.name=name;
}
public Person1(int age,String name){//含有兩個參數(shù)的構(gòu)造方法
this(name);//調(diào)用含有一個參數(shù)的構(gòu)造方法
this.age=age;
}
public String getinfo(){
return "姓名為:"+name+","+"年齡為:"+age;
}
}
public class ThisDemo01 {
public static void main(String[] args) {
Person1 person = new Person1 (15,"張三");//調(diào)用構(gòu)造方法實例化對象并初始化成員屬性。
person.getinfo();
System.out.println(person.getinfo());//調(diào)用方法輸出年齡和姓名。
}
}
在使用this()調(diào)用構(gòu)造方法的時候,至少有一個構(gòu)造方法是不用this()調(diào)用的。
構(gòu)造方法出現(xiàn)遞歸調(diào)用:recursive constructor invocation//避免出現(xiàn)遞歸調(diào)用,如下面代碼所示
package thiss;
class Person1{
private int age;
private String name;
public Person1(){//無參構(gòu)造方法
**this("李四",10);//這樣會出現(xiàn)遞歸調(diào)用,編譯都不能通過**
}
public Person1(String name){//一個參數(shù)的構(gòu)造方法
this();//調(diào)用無參構(gòu)造方法
this.name=name;
}
public Person1(int age,String name){//含有兩個參數(shù)的構(gòu)造方法
this(name);//調(diào)用含有一個參數(shù)的構(gòu)造方法
this.age=age;
}
public String getinfo(){
return "姓名為:"+name+","+"年齡為:"+age;
}
}
public class ThisDemo01 {
public static void main(String[] args) {
Person1 person = new Person1 (15,"張三");//調(diào)用構(gòu)造方法實例化對象并初始化成員屬性。
person.getinfo();
System.out.println(person.getinfo());//調(diào)用方法輸出年齡和姓名。
}
}
1.3可以使用this表示當前對象
package thiss;
class Person2 {
public String getinfo() {
System.out.println("Person類的對象---》" + this);
return null;
}
}
public class ThisDemo02 {
public static void main(String[] args) {
Person2 person = new Person2();//調(diào)用構(gòu)造方法實例化對象
System.out.println("輸出main中的對象---》" + person);//輸出person中的對象
person.getinfo();//調(diào)用Person2中的對象是否和main中的對象相同
}
}
E:\Java\jdk\bin\java.exe “-javaagent:E:\Java\IDEA\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar=58205:E:\Java\IDEA\IntelliJ IDEA 2019.1.3\bin” -Dfile.encoding=UTF-8 -classpath E:\Java\jdk\jre\lib\charsets.jar;E:\Java\jdk\jre\lib\deploy.jar;E:\Java\jdk\jre\lib\ext\access-bridge-64.jar;E:\Java\jdk\jre\lib\ext\cldrdata.jar;E:\Java\jdk\jre\lib\ext\dnsns.jar;E:\Java\jdk\jre\lib\ext\jaccess.jar;E:\Java\jdk\jre\lib\ext\jfxrt.jar;E:\Java\jdk\jre\lib\ext\localedata.jar;E:\Java\jdk\jre\lib\ext\nashorn.jar;E:\Java\jdk\jre\lib\ext\sunec.jar;E:\Java\jdk\jre\lib\ext\sunjce_provider.jar;E:\Java\jdk\jre\lib\ext\sunmscapi.jar;E:\Java\jdk\jre\lib\ext\sunpkcs11.jar;E:\Java\jdk\jre\lib\ext\zipfs.jar;E:\Java\jdk\jre\lib\javaws.jar;E:\Java\jdk\jre\lib\jce.jar;E:\Java\jdk\jre\lib\jfr.jar;E:\Java\jdk\jre\lib\jfxswt.jar;E:\Java\jdk\jre\lib\jsse.jar;E:\Java\jdk\jre\lib\management-agent.jar;E:\Java\jdk\jre\lib\plugin.jar;E:\Java\jdk\jre\lib\resources.jar;E:\Java\jdk\jre\lib\rt.jar;E:\Java\project\out\production\Demo01 thiss.ThisDemo02
輸出main中的對象—》thiss.Person2@4554617c
Person類的對象—》thiss.Person2@4554617c
Process finished with exit code 0
1.4比較兩個對象是否相同
class Person{ // 定義Person類
private String name ; // 姓名
private int age ; // 年齡
public Person(String name,int age){
this.setName(name) ;
this.setAge(age) ;
}
public boolean compare(Person per){
// 調(diào)用此方法時里面存在兩個對象:當前對象、傳入的對象
Person p1 = this ; // 當前的對象,就表示per1
Person p2 = per ; // 傳遞進來的對象,就表示per2
if(p1==p2){ // 判斷是不是同一個對象,用地址比較
return true ;
}
// 之后分別判斷每一個屬性是否相等
if(p1.name.equals(p2.name)&&p1.age==p2.age){
return true ; // 兩個對象相等
}else{
return false ; // 兩個對象不相等
}
}
public void setName(String name){ // 設置姓名
this.name = name ;
}
public void setAge(int age){ // 設置年齡
this.age = age ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
};
public class ThisDemo08{
public static void main(String args[]){
Person per1 = new Person("張三",30) ; // 聲明兩個對象,內(nèi)容完全相等
Person per2 = new Person("張三",30) ; // 聲明兩個對象,內(nèi)容完全相等
// 直接在主方法中依次取得各個屬性進行比較
if(per1.compare(per2)){
System.out.println("兩個對象相等!") ;
}else{
System.out.println("兩個對象不相等!") ;
}
}
};
到此這篇關于Java基礎之this關鍵字的使用的文章就介紹到這了,更多相關this關鍵字的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!