学习笔记之JavaSE(12)--面向对象编程3

今天学习的内容是this关键字


类的实例变量和非静态方法必须由对象调用,那么在非静态方法(包括构造函数也一样)中调用本类的实例变量和非静态方法时怎么弄呢?这就用到了this,它表示本类对象的引用,this关键字的知识点:

  • this只能在方法体中使用,表示对“调用方法的那个对象”的引用
  • 实际上,非静态方法(包括构造函数)中有一个隐含的this变量,调用这些方法就相当于给this进行了一次赋值
  • 在方法内部调用本类的实例变量或非静态方法,直接调用即可,实际上这是由于编译器帮着自动添加了this关键字
  • this不能用于静态方法内部(所以实例变量和非静态方法也不能直接在静态方法内部调用得意),这是由于调用静态方法压根不用创建该类对象,所以根本没有“调用方法的那个对象”!!静态方法中根本不存在隐含的this变量!!
  • this常用于在构造函数中(形参名和实例变量名相同的场景)标明实例变量,格式:this.实例变量
  • this还常用于在构造函数中调用本类的另一个构造函数,格式:this(参数)
  • this()必须在构造函数的第一行使用且只能调用一次
  • 每个构造函数可以选择调用this()或super(),但不能同时调用
示例程序:
public class Test26 {

	private String name;
	private Date date;
	
	public Test26(){
		System.out.println("无参构造函数");
	}
	
	public Test26(String name){
		this();//this()必须在构造函数的第一行使用且只能调用一次,调用无参构造函数
		//!super(); super()和this()不能同时调用
		this.name=name;//形参名和实例变量名相同的场景,this用来标明实例变量
		System.out.println("参数为String的构造函数,参数为"+this.name);
	}
	
	public Test26(Date date){
		this("k");//调用参数为String的构造函数
		this.date=date;//形参名和实例变量名相同的场景,this用来标明实例变量
		System.out.println("参数为Date的构造函数,参数为"+date);
	}
	
	public static void main(String[] args){
		//!System.out.println(this); 静态方法不能使用this
		//!System.out.println(name); 静态方法中不能直接调用非静态变量
		//!System.out.println(date); 静态方法中不能直接调用非静态变量
		//!bb(); 静态方法中不能直接调用非静态方法
		Test26 t=new Test26(new Date());
		System.out.println(t.name);
		System.out.println(t.date);
		t.bb();
	}
	
	public void aa(){
		System.out.println("aa()方法");
	}
	public void bb(){
		System.out.println("name="+name);//实际上编译器自动添加this关键字,this.name
		System.out.println("date="+date);//实际上编译器自动添加this关键字,this.date
		aa();//实际上编译器自动添加this关键字,this.aa()
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值