java中this和super的区别

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公司也没有给出相关的声明,导致此处有些模棱两可,所以不必纠结其他,记住这个结论就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值