static、this和super

static

        static是Java语言中的关键字,表示“静态的”,可以用来修饰变量、方法、代码块等,static修饰的变量叫做静态变量,修饰的方法叫做静态方法,修饰的代码块叫做静态代码块。
        (1)在Java语言中凡是用 static修饰的都是类相关的,不需要创建对象,直接通过“类名”即可访问。
        (2)当一个属性是类级别的属性,所有对象的这个属性的值是一样的,建议定义为静态变量。

静态变量

        Java中的变量包括局部变量和成员变量,在方法体中声明的变量为局部变量,局部变量存储在栈中,方法结束之后局部变量的内存就会释放掉。在类体中声明的变量为成员变量,成员变量又包括实例变量和静态变量。
        成员变量声明时使用了static关键字则称为静态变量,没有使用static关键字称为实例变量。两者的区别如下:

  • 实例变量必须先创建对象通过"引用."的方式去访问,静态变量访问时则不需要创建对象,直接通过"类名."的方式访问。
  • 实例变量存储在堆内存中,静态变量存储在方法区中。
  • 实例变量在构造方法执行过程中初始化,静态变量在类加载时初始化。
    当一个类的所有对象的某个“属性值”不会随着对象的改变而变化的时候,建议将该属性定义为静态属性。

静态方法

        实际开发中,一般将“工具类”中的方法定义为静态方法,而需要对象参与时方法应定义为实例方法。将方法定义为静态方法比较方便使用,不需要创建对象,直接使用类名就可以访问。

[修饰符列表] static 返回值 方法名(形参列表){
	方法体
}

静态代码块

        静态代码块在类加载时执行,并且只执行一次。如果要在类加载的时候解析某个文件,并且要求该文件只解析一次,那么此时就可以把解析该文件的代码写到静态代码块当中。

类{
	// 静态代码块
	static{
		Java 语句;
	}
}

        静态代码块遵循自上而下的顺序依次执行,并且在main方法执行前执行,这是因为静态代码块在类加载时执行,并且只执行一次。

this

        this是一个引用,保存了当前对象的内存地址并指向自身,任何一个堆内存的java对象都有一个this。this使用在构造方法和实例方法中,不能在静态方法中使用,语法格式为"this.“和"this(…)”。
        this不能出现在 static的方法中,可以出现在实例方法中,代表当前对象,大部分情况下 this都是可以省略的,只有当在实例方法中区分局部变量和实例变量的时候不能省略

this使用在构造方法中

        this使用在构造方法的第一行,通过当前构造方法调用本类中其他构造方法实现代码复用时,语法格式为:this(实际参数列表)

public class Date{
	private int year;
	private int month;
	private int day;
	// 业务要求,默认创建日期为2000年1月6日
	public Date(){
		// this(实际参数列表)调用有参构造方法,实现代码复用
		this(2000,1,6)
	}
	// setter and getter
	public int getYear(){
		return year;
	}
	public void setYear(int year){
	this.year=year
	}
	public int getMonth(){
		return month;
	}
	public void setMonth(int month){
	this.month=month
	}
	public int getDay(){
		return day;
	}
	public void setDay(int day){
	this.day=day
	}
}
public class DateTest{
	public static void main(String[] args){
		Date d1=new Date();
		// 调用无参构造,结果为默认值:     2000年1月5日
		System.out.println(d1.getYear()+"年"+d1.getMonth()+"月"+d1.getDay()+"日");
		
		Date d2=new Date(2008,8,8);
		// 调用有参构造,结果为:     2008年8月8日
		System.out.println(d2.getYear()+"年"+d2.getMonth()+"月"+d2.getDay()+"日");
	}
}

super

        super与this可以对比着学习

this:

  • this是一个引用,保存内存地址指向自己
  • this出现在实例方法中,谁调用这个实例方法,this就代表谁,this代表当前正在执行该动作的对象。
  • this不能出现在静态方法中
  • this大部分情况可以省略,在方法中区分实例变量和局部变量时不能省略
  • this(实际列表参数)出现在构造方法的第一行,通过当前的构造方法调用本类当中其他的构造方法

super:

  • super并不是引用,只是一个关键字,代表当前对象中从父类继承过来的那部分特征。
  • super和this都可以使用在实例方法中
  • super不能使用在静态方法中,因为super代表了当前对象上的父类特征,静态方法中没有this,肯定也不能使用super
  • super(实际参数列表)用法通过当前的构造方法调用父类的构造方法

super使用在构造方法中
        语法格式为super(实际参数列表),this和super都只允许出现在构造方法的第一行。“super(实际参数列表)”这种语法表示子类构造方法执行过程中调用父类的构造方法。

super.什么时候不能省略
        父类和子类中有同名属性,或者说有同样的方法,
        想在子类中访问父类的,super. 不能省略。

super的使用:

	super.属性名				【访问父类的属性】
	super.方法名(实参)			【访问父类的方法】
	super(实参)					【调用父类的构造方法】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值