java中this和super的区别

it2022-05-05  272

this关键字: 一.this是什么? this是一个引用类型, 在堆中的每一个java对象上都有this,this保存内存地址指向自身。

二.this及this()能用在哪些地方? this可以用在成员方法中. this()可以用在构造方法中.语法: this(实参); 通过一个构造方法去调用另一个构造方法。 目的:代码重用。 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.year = 1970; this.month = 1; this.day = 1; */ } MyDate(int _year,int _month,int _day){ year = _year; month = _month; day = _day; }

} this为什么不能用在静态方法中. 静态方法的执行根本不需要java对象的存在。直接使用 类名. 的方式访问。而this代表的是当前对象。所以静态方法中根本没有this 根据构造方法的执行顺序,静态的方法是先于对象存在的,也就是说在静态方法加载的时候有,对象还没有创建!!!

三.super()用在构造方法中: 语法:super(实参); 作用:通过子类的构造方法去调用父类的构造方法. 语法规则:一个构造方法第一行如果没有this(...);也没有显示的去调用super(...); 系统会默认调用super(); 注意:

super(…);的调用只能放在构造方法的第一行. super(…)和this(…)不能共存。 super(…);调用了父类中的构造方法,虚拟机会创建父类对象,但不是new 出来的;是虚拟机在执行字节码时在初始化方法 init(该方法在字节码中)中创建的对象!!! 在java语言中只要是创建java对象,那么Object中的无参数构造方法一定会执行。

四.super关键字做引用, 语法:super.xx 来调用父类的成员方法或成员变量: 注意:super是一个引用但是却没办法输出,Sun公司也没有给出相关的声明,导致此处有些模棱两可,所以不必纠结其他,记住这个结论就行

最新回复(0)