❶ java中this的作用和用法以及含義!
this指直譯是「這個」,在java中指「當前的」。不管在哪裡,只要用到this,指的一定就是當前的這個對象。最常見的用法是在寫java bean中。比如下面的代碼
publicclassStudent{
privateStringname;
privateintage;
publicStudent(){}
publicStudent(Stringname,intage){
this();
this.setName(name);
this.age=age;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnthis.age;
}
}
上面的代碼是一個java bean。所謂的java bean就是一個類,這個類有一些屬性,方法只有這些屬性的Getter 或者Setter (從Object類繼承的方法不算在此列)。
這個bean有兩個屬性,在構造器中為屬性賦值的時候寫的this.setName(name).意思是調用當前你創建的這個對象的Setter給這個對象的屬性賦值。而setName裡面的this.name = name;這一句,等號之前的this.name表示當前對象的name,也就是在類裡面定義的private String name這個變數,而等號之後的name表示從外界調用這個方法時候傳進來的參數。所以這句話的意思就是將外界傳來的字元串變數的值賦給當前對象的name屬性。
那麼構造器第一行的this()是做什麼的呢?這句話是調用當前這個對象的無參構造,就是調用上面的public Student(){}這個構造器。在這段代碼里this()體現不出來什麼作用。但是我們知道構造器的作用是在構造對象的時候給屬性賦值的。如果上面個無參構造裡面寫一些賦值語句的話那麼這里就可以避免代碼的重復了。但是請注意,調用this()的時候一定要寫在該方法的第一行,否則會報錯。
另外,this關鍵字不能使用在有static關鍵字修飾的方法和代碼塊裡面。因為static是這個類的所有對象共用的,而this指的只是當前這個對象的「私人」的一些東西,在屬性上面就沖突了。
說到this就得順帶提一下super關鍵字了。super關鍵字的用法同this差不多,同樣不能與static一起使用。同樣有super()的寫法,且需要寫在方法第一行。但是super所指示的東西可不一樣,一般指的是當前這個類的直接父類。如果在子類中需要使用父類的構造器或者屬性的時候可以使用super關鍵字。比如下面的代碼:
{
publicStudent(){
super();
}
@Override
publicbooleanequals(Objectobj){
returnsuper.equals(obj);
}
}
上面這段代碼就是在實現equals方法的時候調用其直接父類的Object類的equals方法。而在構造這個類的對象的時候也調用了其父類的構造方法。
註:上面代碼中的extends Object其實完全不必寫,因為所有的類都直接或者間接是Object類的子類(除了Object類本身)。如果不寫extends的話默認繼承Object類。這里為了需要所以這樣寫
❷ java里this是什麼意思
Java關鍵字this只能用於方法方法體內。
個對象創建後,Java虛擬機(JVM)就會給這 個對象分配一個引用自身的指針,這個指針的 名字就是 this。因此,this只能在類中的非靜 態方法中使用,靜態方法和靜態的代碼塊中絕 對不能出現this,這在「Java關鍵字static、fina l 使用總結」一文中給出了明確解釋。並且this只 和特定的對象關聯,而不和類關聯,同一個類 的不同對象有不同的this。
❸ java里的「this」到底是什麼意思
this為一系統資源,只允許用戶讀而不允許寫,它存放當前對象的地址(引用)。
this變數有以下作用:
1. 構造方法重用:
public class Rectangle{
public Rectangle(Location at, Shape size) {…}
public Rectangle(Shape size,Location at){
this(at, size); }
public Rectangle(Location at) {
this(at, new Shape(100,100));
}
public Rectangle(Shape size) {
this(size, new Location(1,1));
}
public Rectangle() {
this(new Location(1,1), new Shape(100,100));
}
}
2、消除歧義:
Location{
private int x;
private int y;
public Location(int x,int y) {
this.x=x;
this.y=y;
}
……
}
3、返回對象-鏈式方法調用:
public class Count {
private int i = 0;
Count increment() {
i++;
return this; //返回對象的地址,所以我們可以鏈式訪問它
}
void print() {
System.out.println("i = " + i);
}
}
public class CountTest{
public static void main(String[] args) {
Count x = new Count();
x.increment().increment().print();
}
}
4、作為參數傳遞"this」變數-進行回調:
假設有一個容器類和一個部件類,在容器類的某個方法中要創建部件類的實例對象,而部件類的構造方法要接受一個代表其所在容器的參數。例如:
class Container
{
Component comp;
public void addComponent()
{
comp = new Component(this); //代表你所創建的對象,因為它要用到.
}
}
class Component
{
Container myContainer;
public Component(Container c)
{
myContainer = c;
}
}
其中我們開發中最常用到的地方是第二點,消除歧義。
比方說有類
public class A
裡面有幾個變數
private String aa,
private String bb;
this 在這里就代表A ,其實它是對對象A的引用。
我們在用到aa或者bb的時候,this.aa 和 直接用aa 是沒有區別的。
但是假如你在某個方法里也有個變數aa,比如:
public void dosomething(String aa){
this.aa = aa;
//這個時候就this.aa 代表對象A中的變數,而不加this的話,代表方法中的變數。
}
❹ 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){
}
}