• 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);

           }

    }

     

  • 相关阅读:
    让程序调用运行linux shell命令
    纯C的字符串问题
    Linux的打包和解压缩命令
    ubuntu安装mosquitto-1.4.5
    无Teamview授权,使用Teamview方式
    有效利用家用宽带,动态域名服务(DDNS)
    pfx格式证书转成nginx可用的证书
    iis文件上传限制
    vue脚手架使用
    netcore中执行linux命令
  • 原文地址:https://www.cnblogs.com/superjishere/p/11796622.html
Copyright © 2020-2023  润新知