1. 程式人生 > >十、java基礎之this介紹

十、java基礎之this介紹

/*
一、this關鍵字:
  1.this什麼?
this是一個引用型別
在堆中的每一個java物件上都有this
this儲存的記憶體地址指向自身
  2.this能用在哪裡?
第一:this可以用在成員方法中
第二:this可以用在構造方法中
      this(實參);
      通過一個構造方法去呼叫另一個構造方法
      目的:程式碼複用
      注意:this(實參)必須出現在構造方法中第一個語句;否則報:Error:(40, 13) java: 對this的呼叫必須是構造器中的第一個語句
   3.this可以用來區分成員變數和區域性變數

   4.this不能用在靜態方法中
    1.靜態方法的執行根本不需要java物件的存在,直接使用,型別,的方式訪問
    2.而this代表的是當前的物件,所以靜態方法中根本沒有this
 
 */

1.原始程式碼:
public class ThisTest06 {

    public static void main(String[] args){

        //建立物件
        MyDate t1=new MyDate(2018,8,23);
        System.out.println(t1.year+"年"+t1.mouth+"月"+t1.day+"日");

        //建立物件

        MyDate t2=new MyDate();
        System.out.println();
    }
}

class MyDate{ //Field int year; int mouth; int day; //constructor MyDate(){} MyDate(int _year,int _mouth,int _day){ year=_year; mouth=_mouth; day=_day; } }

 

2.this可以用在成員方法中
public class ThisTest07 {

    public static void main(String[] args){
        Employee em
=new Employee(1234,"chushujin"); em.work(); Employee em1=new Employee(12345,"chushujin1"); em1.work(); } } class Employee{ //員工編號 int empno; //員工名 String ename; //Constructor Employee(){} Employee(int _empno,String _ename){ empno=_empno; ename=_ename; } //提供一個員工工作方法 //this用在成員方法中,誰去呼叫這個成員方法,this就代表誰 //this指的就是當前物件 public void work(){ System.out.println(this.ename+"在工作!"); //System.out.println(ename+"在工作!");//可以省略 } public void m1(){ this.m2(); } public void m2(){ System.out.println("THIS"); } }

 

2.this可以用在構造方法中

      this(實參);
      通過一個構造方法去呼叫另一個構造方法
      目的:程式碼複用
      注意:this(實參)必須出現在構造方法中第一個語句;否則報:Error:(40, 13) java: 對this的呼叫必須是構造器中的第一個語句
public class ThisTest10 {

    public static void main(String[] args){
        MyDatee MDe=new MyDatee();
        System.out.println(MDe.year+"年"+MDe.mouth+"月"+MDe.day+"日");

    }
}

class MyDatee{
    //Field
    int year;
    int mouth;
    int day;

    //constructor
    //預設1999-1-1日
    MyDatee(){

        this(1999,1,1);
        /*year=1999;
        mouth=1;
        day=1;
        */
        //this(1999,1,1);
    }

    MyDatee(int _year,int _mouth,int _day){
        year=_year;
        mouth=_mouth;
        day=_day;
    }
}

3.this可以用來區分成員變數和區域性變數

public class ThisTest08 {

    public static void main(String[] args){

        Manager m1= new Manager("KING");

        Manager m2=new Manager("JOY");

        System.out.println("m1---->"+m1.getName());
        System.out.println("m2---->"+m2.getName());



    }
}

class Manager{
    //Field
    private String name;

    //Constructor
    Manager(String name){
        this.name=name;
    }
    //Method
    //成員方法
    public void setName(String name){
        this.name=name;

    }
    public String getName(){
        return this.name;
    }
}
4.this不能用在靜態方法中
    1.靜態方法的執行根本不需要java物件的存在,直接使用,型別,的方式訪問
    2.而this代表的是當前的物件,所以靜態方法中根本沒有this

public class ThisTest09 {


    //沒有static的就是成員變數,成員變數不能直接訪問,引用.變數名
    String str;
    public static void main(String[] args){
        Person.m1();


        //System.out.println(str);Error:(13, 28) java: 無法從靜態上下文中引用非靜態 變數 str

        ThisTest09 tt=new ThisTest09();
        System.out.println(tt.str);//null


    }
}

class Person{

    //Field
    String name;
    //Constructor
    Person(){}

    Person(String name){
        this.name=name;
    }

    //靜態方法
    public static void m1(){
        //System.out.println(this.name);

        //如果想要訪問name
        Person p=new Person("kk");
        System.out.println(p.name);

    }
}