this static

本文详细解析了Java中this关键字在构造器中的作用,如何通过this调用其他构造器,以及static方法为何不能使用this和super。同时介绍了static关键字的用途,包括静态成员变量和静态方法,强调了静态方法不能访问非静态成员。此外,还讨论了静态初始化块及其执行顺序。
摘要由CSDN通过智能技术生成

this(隐式参数)

  • this的本质就是创建好的对象的地址,由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表当前对象。

创建对象的四步

1. 分配对象空间,并对成员变量初始化为0或者空
2. 执行属性值的显式初始化
3. 执行构造方法
4. 返回对象的地址给相关的变量 

过程分析

public class ThisStudy {
	int age;
	String sname;
	String pwd;
	
	public ThisStudy(int age,String sname) {
		this.age = age;
		this.sname = sname;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThisStudy t1 = new ThisStudy(20,"孙少聪");
	}

}

请添加图片描述

在构造器用this调用另一个构造器

  1. 使用 this 关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句
  2. this不能用于static方法中
  3. 参考这篇博客可以更深的理解this的作用

为什么static方法里面不能用this、super

Java static方法里为什么不能使用this关键字,和Super

public class ThisStudy {  
	int age;
	String sname;
	String pwd;
	
	public ThisStudy(int age,String sname,String pwd) {
		this(age,sname); //一个构造器调用另一个构造器时用this,且必须位于第一行
		this.pwd = pwd;
	}
	
	public ThisStudy(int age,String sname) {
		this.age = age;
		this.sname = sname;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThisStudy t1 = new ThisStudy(20,"孙少聪", "123456");
	}

}

static

  • 在类中,用 static 声明的成员变量为静态成员变量,也称为类变量。 类变量的生命周 期和类相同,在整个应用程序执行期间都有效。

static关键字的使用

  1. 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。
  2. 对于该类的所有对象来说,static 成员变量只有一份。被该类的所有对象共享!!
  3. 一般用“类名.类属性/方法”来调用。(也可以通过对象引用或类名(不需要实例
    化)访问静态成员。)
  4. 在 static 方法中不可直接访问非 static 的成员
  • 静态方法中不能调用非静态的方法和属性
public class StaticStudy {
	int id;
	String name;
	String pwd;
	static String company = "哈哈哈";
	
	public void login() {
		System.out.println("登录:"+name);
		System.out.println(company);
	} 
	
	public static void printCompany() {
		System.out.println(company);
//		静态方法中不能调用非静态的方法和属性
//		login();
//		System.out.println(name);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StaticStudy u = new StaticStudy();
		u.login();
		//新建一个对象调用static方法会造成空间浪费,编译器会警告,但是还是可以运行
		//u.printCompany();
		StaticStudy.printCompany();
	}

}

在这里插入图片描述

静态初始化块

  • 构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在静态初始化块中不能直接访问非 static 成员
  • 静态初始化块执行顺序(学完继承再看这里):
    1. 上溯到 Object 类,先执行 Object 的静态初始化块,再向下执行子类的静态初始化块,直到类的静态初始化块为止。
    2. 构造方法执行顺序和上面顺序一样!
static {
	System.out.println("执行类的初始化工作");
	company = "北京尚学堂";
	printCompany();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值