java構造方法this
⑴ java中「this」的用法是什麼
一、指自己所在的對象。
比如在一個方法中,調用其他對象的變數或方法時,可以使用那個對象的對象名,比如aa.abc();
而調用自己所在對象的方法或變數時,不知道別人給起了什麼名,所以直接用this.abc()就可以了。
二、看一個小例子中「this」的用法!
/**
* @author feng-neusoft
*
* 本示例為了說明this的三種用法!
*/
package test;
public class ThisTest {
private int i=0;
//第一個構造器:有一個int型形參
ThisTest(int i){
this.i=i+1;//此時this表示引用成員變數i,而非函數參數i
System.out.println("Int constructor i——this.i: "+i+"——"+this.i);
System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1));
//從兩個輸出結果充分證明了i和this.i是不一樣的!
}
// 第二個構造器:有一個String型形參
ThisTest(String s){
System.out.println("String constructor: "+s);
}
// 第三個構造器:有一個int型形參和一個String型形參
ThisTest(int i,String s){
this(s);//this調用第二個構造器
//this(i);
/*此處不能用,因為其他任何方法都不能調用構造器,只有構造方法能調用他。
但是必須注意:就算是構造方法調用構造器,也必須為於其第一行,構造方法也只能調
用一個且僅一次構造器!*/
this.i=i++;//this以引用該類的成員變數
System.out.println("Int constructor: "+i+"/n"+"String constructor: "+s);
}
public ThisTest increment(){
this.i++;
return this;//返回的是當前的對象,該對象屬於(ThisTest)
}
public static void main(String[] args){
ThisTest tt0=new ThisTest(10);
ThisTest tt1=new ThisTest("ok");
ThisTest tt2=new ThisTest(20,"ok again!");
System.out.println(tt0.increment().increment().increment().i);
//tt0.increment()返回一個在tt0基礎上i++的ThisTest對象,
//接著又返回在上面返回的對象基礎上i++的ThisTest對象!
}
}
運行結果:
Int constructor i——this.i: 10——11
String constructor: ok
String constructor: ok again!
Int constructor: 21
String constructor: ok again!
14
細節問題注釋已經寫的比較清楚了,總結一下,其實this主要要三種用法:
1、表示對當前對象的引用!
2、表示用類的成員變數,而非函數參數,注意在函數參數和成員變數同名是進行區分!其實這是第一種用法的特例,比較常用,所以那出來強調一下。
3、用於在構造方法中引用滿足指定參數類型的構造器(其實也就是構造方法)。但是這里必須非常注意:只能引用一個構造方法且必須位於開始!
還有就是注意:this不能用在static方法中!所以甚至有人給static方法的定義就是:沒有this的方法!雖然誇張,但是卻充分說明this不能在static方法中使用!
⑵ java 構造函數 this
你先要去弄懂this的三種用法:
有三種用法:
1、表示對當前對象的引用!
2、表示用類的成員變數,而非函數參數,注意在函數參數和成員變數同名是進行區分!其實這是第一種用法的特例,比較常用,所以那出來強調一下。
3、用於在構造方法中引用滿足指定參數類型的構造器(其實也就是構造方法)。但是這里必須非常注意:只能引用一個構造方法且必須位於開始!
還有就是注意:this不能用在static方法中!
你的實例中 在類B的構造方法中
public B(A a)
通過方法重載 帶了A的一個實例 通過this.a=a;
給類B中的A對象賦值
在類A中 b=new B(this);
因為B b=new B(new a());
而this表示當前類的實例
⑶ java中this的作用及用法是什麼
使用this調用本類中的屬性
現在觀察以下代碼,看會有那些問題:
public void setName(String name){
name = name ;
}
這裡面的兩個name都是setName方法中的name參數。
此時,特別希望可以通過一個指定的標識明確的表示要把傳入的name參數的值給類中的屬性,所以此時就需要使用this關鍵字,使用this.name就表示類中的屬性。
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.setName(name) ;
this.setAge(age) ;
}
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 void print(){
System.out.println("姓名:"+this.name+",年齡:"+this.age) ;
}
};
public class Demo35{
public static void main(String args[]){
Person p1 = new Person("張三",30) ;
p1.print() ;
}
};
使用this還可以從一個構造方法中調用其他構造方法。
例如:有以下一個要求,一個類中存在了三個構造方法,但是要求,不管怎麼調用,最終都要求可以在對象實例化的時候列印一個「新的對象產生了」的提示。
class Person{
private String name ;
private int age ;
public Person(){
System.out.println("新的對象產生了。。。") ;
}
public Person(String name){
System.out.println("新的對象產生了。。。") ;
this.setName(name) ;
}
public Person(String name,int age){
System.out.println("新的對象產生了。。。") ;
this.setName(name) ;
this.setAge(age) ;
}
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 void print(){
System.out.println("姓名:"+this.name+",年齡:"+this.age) ;
}
};
以上代碼雖然可以實現功能,但是同樣的代碼出現了三次,而且後面的兩次出現純屬多餘吧。用this()的形式可以調用類中的無參構造方法。
class Person{
private String name ;
private int age ;
public Person(){
System.out.println("新的對象產生了。。。") ;
}
public Person(String name){
// 最終都是調用無參構造方法
this() ;
this.setName(name) ;
}
public Person(String name,int age){
this(name) ;
this.setAge(age) ;
}
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 void print(){
System.out.println("姓名:"+this.name+",年齡:"+this.age) ;
}
};
public class Demo36{
public static void main(String args[]){
Person p1 = new Person("張三",30) ;
p1.print() ;
}
};
注意點1:
如果使用了this調用其他構造方法,則此語句,必須寫在構造方法的首行。
public void fun(){
// 發現在調用fun方法的時候,必須先設置name的值
this("zhangsan") ;
}
public Person(String name,int age){
this.setAge(age) ;
this(name) ; //--> 必須放在首行
}
注意點2:
使用this可以調用本類中的其他構造方法,但是至少留一個構造方法,作為程序的出口。
public Person(){
this("a",10) ;
System.out.println("新的對象產生了。。。") ;
}
public Person(String name){
// 最終都是調用無參構造方法
this() ;
this.setName(name) ;
}
public Person(String name,int age){
this(name) ; //--> 必須放在首行
this.setAge(age) ;
}
this最重要的特性 —— 表示當前對象
當前對象在程序中用以下形式體現:
· 當前操作此方法的對象,就稱為當前對象。
class Demo{
public void print(){
System.out.println(this) ;
}
};
public class Demo38{
public static void main(String args[]){
Demo d1 = new Demo() ;
System.out.println(d1) ;
d1.print() ;
System.out.println("---------------------") ;
Demo d2 = new Demo() ;
System.out.println(d2) ;
d2.print() ;
}
};
回顧:
之前講解的兩個對象比較的程序。
// 在類的內部增加一個比較的方法
public boolean compare(Person p){
Person p1 = this ;
Person p2 = p ;
if(p1.name.equals(p2.name)&&p1.age==p2.age){
return true ;
}else{
return false ;
}
}
分析程序的運行過程:
class A{
private B b = null ;
public A(){
this.b = new B(this) ;
this.b.fun() ;
}
public void hello(){
System.out.println("Hello World!!!") ;
}
};
class B{
private A a = null ;
public B(A a){
this.a = a ;
}
public void fun(){
this.a.hello() ;
}
};
public class OODemo40{
public static void main(String args[]){
A aa = new A() ;
}
};
⑷ Java 構造方法重載後,在構造方法中可以使用this語句進行構造方法之間的調用,
兩個構造方法不能用this相互調用,this調用構造方法的最大個數只能是構造方法總數-1
否則會出現無限遞歸調用。
也就是說兩個構造方法不能同時用this調用另一個,會產生無限的遞歸調用。
如下代碼:就會無限遞歸。
classA{
inta;
intb;
A(inta){
this(a,0);
}
A(inta,intb){
this(a);
thia.b=b;
}
}
⑸ java中this的用法
java中this有兩種用法:
1、代表當前類
public class Dog{
private String name;
private float age;
public setName(String name){
this.name = name;
}
.......
}
這里的this就代表的當前的這個Dog類。this.name可以理解為dog.name,只是理解,不是等於。
2、在構造函數中的使用
public class Dog{
private String name;
private int age;
//有一個參數的構造函數
public Dog(String name){
this.name = name;
}
public Dog(String name,int age){
this.name = name;
this.age = age;
}
//這個無參構造方法里調用的有兩個參數的構造方法,這個也就是this的第二種用法了!
public Dog(){
this("nihao",20);
}
}
⑹ this()在java中什麼意思
this表示類實例本身。
this的用法:
1、表示對當前對象的引用!
publicclassA{
publicAgetA(){
returnthis;//表示獲取當前實例本身
}
}
2、表示類的成員變數,而非函數參數,注意在函數參數和成員變數同名是進行區分!
publicclassA{
privateinta=0;//位置1
publicAgetA(inta){
this.a=a;//前面this.a表示位置1的a,賦值=號右側的表示參數a
}
}
3、用於在構造方法中引用滿足指定參數類型的構造器。
publicclassA{
publicA(inta){
}
publicA(){
this(1);//這里調用自身的構造函數publicA(inta){
}
}
⑺ java構造方法中「this.x=a」與「this.x=x」分別是什麼意思
我想你對java中的 成員變數和局部變數 的定義和范圍不太了解吧。
先簡單的解釋一下
1、成員變數
指代在類中,方法外 定義的 基本數據類型 稱之為 成員變數,當然了,也是可以定義對象的,那樣就稱為成員屬性。
2、局部變數
指代在方法中定義出來的變數,可以是方法內聲明的,也可以是方法的傳入參數。
再解釋你上面的情況:
private int x ; 就是 成員變數了
public Abc(int a ){this.x=a; }
這個里的 int a 是方法的參數,也是局部變數 。
而內部使用的this.x 指代的是獲取當前類的屬性,這個屬性可以是方法,可以是變數,可以是對象。
因此,這個this.x 就是獲取了成員變數的 x
而你後面的方法
public Abc(int x ){this.x=x; }
這2個 x 是不同的 一個是 局部變數 ,一個是成員變數
this的都是成員的東西~
⑻ 關於Java中構造方法中使用this的問題,新手求大神解答
this 就是指的當前對象 也就是 你例子中 Person 的對象 this(name) 相當於調用了public Person(String name) 構造函數
你應該知道 super 指的是當前對象的父類對象 你經常在 當前對象的構造函數中看到 super();
這個就是在調用 父類對象的 空函數構造方法, this() 當然就是調用當前對象的空函數構造方法了
this(name) 自然就是調用當前對象帶一個參數的構造方法
⑼ java的構造方法裡面用this();再調用構造方法有什麼好處,有什麼用啊
java中this關鍵字有三個作用:
區別全局變數和局部變數
在方法中this表示誰調用該方法 this就代表誰
例如:public void show(){
Synchronized(this){
……}
}
同步代碼塊表示 哪個對象調用該方法 就得到哪個對象的對象鎖
構造器中this()表示調用形式參數相同的同一個類中的另一個構造器,這樣就可以代碼復用
就拿你那段代碼來說 this()就表示調用該類中 名稱是Note 形參是空的構造器 讓裡面的代碼在這個有參的構造器中再跑一遍