Java——this关键字

1.5 this关键字

1.5.1 this是什么?

this是一个引用类型,堆中的每一个java对象上都有this, this保存内存地址指向自身。

1.5.2 this能用在哪些地方?

①this可以用在成员方法中。

②this可以用来区分成员变量和局部变量:

当局部变量(形参)和成员变量重名的时候,如果在方法内部需要使用成员变量,必须

添加this来表明该变量时类成员。

③this可以用在构造方法中。

在构造方法中使用“this(形参列表)”显式的调用本类中重载的其它的构造器(用一个构造方法调用另一个构造方法)。

语法:this(实参);

目的:代码重用。

要求:“this(形参列表)”要声明在构造器的首行!

注意:若一个类中有n个构造器,那么最多有n-1个构造器中使用了this(形参)。

1.5.3理解“this”

public class ThisTest01{

       public static void main(String[] args){ 

              /*

              //创建对象

              MyDate t1 = new MyDate(2008,8,8);

              System.out.println(t1.year+"年"+t1.month+"月"+t1.day+"日");

              //创建对象

              MyDate t2 = new MyDate(2012,12,20);

              System.out.println(t2.year+"年"+t2.month+"月"+t2.day+"日");

              */

              MyDate t3 = new MyDate();

              System.out.println(t3.year+"年"+t3.month+"月"+t3.day+"日");

       }

}

//日期

class MyDate{

       //Field

       int year;

       int month;

       int day;

       //Constructor

       //需求:在创建日期对象的时候,默认的日期是:1970-1-1

       MyDate(){

              this(1970,1,1);//this用在构造方法中

              /*

              this.year = 1970;

              this.month = 1;

              this.day = 1;

              */

       }

       MyDate(int _year,int _month,int _day){

              year = _year;

              month = _month;

              day = _day;

       }

}

 

 

1.5.4 this用在成员方法中

public class ThisTest02{

       public static void main(String[] args){

              //创建对象

              Employee e = new Employee(7369,"SMITH");

              //工作

              e.work();

              //创建对象

              Employee e1 = new Employee(7370,"FORD");

              //工作

              e1.work();

              e.m1();

       }

}

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 + "在工作"); //this. 可以省略

       }

       //成员方法

       public void m1(){

              this.m2();

              m2();

       }

       //成员方法

       public void m2(){

              System.out.println("TESTING");

       }

      

}

1.5.5 this用来区分成员变量和局部变量。

public class ThisTest03{

      

       public static void main(String[] args){

             

              Manager m1 = new Manager("KING");

             

              Manager m2 = new Manager();

              m2.setName("FORD");

             

              System.out.println(m1.getName()); //KING

              System.out.println(m2.getName()); //FORD

       }

      

}

 

class Manager{

      

       //Field

       private String name;

      

       //Constructor

       Manager(){}

      

       Manager(String name){

              this.name = name;

       }

      

       //Method

       //成员方法

       public void setName(String name){

              this.name = name;

       }

      

       //成员方法

       public String getName(){

              //return name;

              return this.name;

       }

      

}

1.5.6 this不能用在静态方法中:

静态方法的执行根本不需要java对象的存在。直接使用 类名.  的方式访问。而this代表的是当前对象。所以静态方法中根本没有this。

public class ThisTest04{

       String str;

       //入口

       public static void main(String[] args){

              Person.m1();

              //str是一个成员变量,必须由引用.  ”访问

              //System.out.println(str);

             

              ThisTest04 tt = new ThisTest04();

              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 p1 = new Person("刘德华");

              System.out.println(p1.name);

       }

}

 

posted @ 2019-11-05 09:53  阿江是个程序猿  阅读(228)  评论(0编辑  收藏  举报