Live2D
复制代码

06-this关键字

this关键字

1、什么是this?

/*
 *    this关键字:
 *              1.this是什么?
 *              this是一个引用类型
 *              在对中的每一个Java对象上都有this
 *              this保存内存地址指向自身
 *              
 *              2.this能用在什么地方
 *              第一:this可以应用在成员方法中
 *              
 *              第二:this可以应用在构造方法中
 *              语法:this(实参)
 *                    通过一个构造方法去调用另一个构造方法
 *                    this(实参);语句必须出现在构造方法的第一行
 *                    作用:使代码得到更简便的重用
 */
package gthis关键字;

public class ThisTest01 {
	
	public static void main(String[] args){
		
		//创建MyDate类对象
		MyDate u1 =new MyDate();
		System.out.println(u1.year+"年"+u1.month+"月"+u1.day+"日");
		
		MyDate u2 =new MyDate(2019,9,18);
		System.out.println(u2.year+"年"+u2.month+"月"+u2.day+"日");
	}

}

class MyDate{
	
	//属性
	int year;
	int month;
	int day;
	
	//构造方法
	
	//需求:在创建日期对象的时候,默认日期是1997-1-1
	MyDate(){//无参数的构造方法尽量也写出来
		this(1997,1,1);
	}
	
	MyDate(int _year,int _month,int _day){
		year=_year;
		month=_month;
		day=_day;
	}
}

2、this用在成员方法中

/*
 *   this用在成员方法中
 */
package gthis关键字;

public class ThisTest02 {
	
	public static void main(String[] args){
		
		//创建对象
		Employ w = new Employ("Smith",15545);
		w.work();
		
		//创建对象
				Employ w1= new Employ("Bob",15845);
				w1.work();
				w.m1();
	}

}

class Employ{
	
	//员工名字
	String name;
	//编号
	int num;
	
	Employ(){}
	
	Employ(String _name,int _num){
		name=_name;
		_num=num;
	}
	
	//提供一个成员工作的方法
	public void work(){
		//下面的name是成员变量,访问它用“引用.”
		//所以下面的name=this.name,this省略了
		/*
		 * 所以this用在成员方法中,谁(w or w1)去调用这个方法,this就代表谁
		 * this指的就是当前对象
		 */
		System.out.println(name+"在工作");
	}
	//成员方法1
	public void m1(){
		this.m2();//this.=w.
		m2();//这两个调用效果一致,集在成员方法中this.可省略
	}
	//成员方法2
	public void m2(){
		System.out.println("测试");
	}
}

3、this提供成员变量和局部变量

/*
 *    this可以用来提供局部变量和成员变量
 */
package gthis关键字;

public class ThisTest03 {
	
	public static void main(String[] args){
		
		Manager u1 = new Manager();//调用无参数的构造方法,系统默认赋值name=null
		u1.setManager("钟荣杰");//但此处又调用了赋值方法name="钟荣杰"
		System.out.println(u1.getManager());
		
		Manager u2 = new Manager("这句话啊睡觉啊上课卡是假的加大数据");
		System.out.println(u2.getManager());
		
		
	}

}
class Manager{
	
	//Field
	private String name;
	
	//constructor
	Manager(){}
	
	Manager(String name){//此构造方法也是一个赋值语句,与下面的一样
		this.name=name;//所以调用构造方法,再调用getManager方法
	}
	
	//Method
	public void setManager(String name){
		this.name=name;//加个this.就知道前面的name是成员变量了
	}
	public String getManager(){
		return name;//此处的this.可以省略
	}
}

4、this不能用在静态方法中

/*
 *   this不能用在静态方法中
 *         1.静态方法的执行根本不需要java对象的存在。直接使用  类名. 的方式
 *         而this代表的是当前对象。所以静态方法中根本没有this
 *
 */
package gthis关键字;

public class Test01 {
			
	//如:
	String skr;
	
	//入口
	public static void main(String[] args){
		
		//访问name(成员变量)用  引用.  
		//访问静态方法用  类名.  
		Person.m1();//m1是一个静态方法

		//skr是一个成员变量,只能用  引用.  去访问
		//在静态方法中不能System.out.println(skr);
		//而应该
		Test01 a = new Test01();
		
		System.out.println(a.skr);//null
		
	}

}
class Person{
	
	//Field
	String name;
	
	Person(){}
	
	Person(String name){
		this.name=name;
	}
	
	
	//静态方法
	public static void m1(){
		//System.out.println(name);Error:不能对非静态字段 name 进行静态引用
		
		//要想访问name:
		Person n=new Person("科技开发建设");
		System.out.println(n.name);
	}
}
posted @ 2021-07-22 22:12  Milen-jie  阅读(46)  评论(0)    收藏  举报