目录
1、this
this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
this 的用法在 Java 中大体可以分为3种:
- 调用本类中的属性,也就是类中的成员变量或者方法;
- 普通的直接引用这种就不用讲了,this 相当于是指向当前对象本身;
- 调用本类中的其他构造方法,调用时要放在构造方法的首行。
注意事项:this不能用于static方法!(this指向当前对象,static方法跟对象没有一毛钱的关系)
public class Student {
String name;
int id;
public Student(String name,int id){
this(name);//通过this调用其他构造方法,必须位于第一句!
this.name = name;
this.id = id;
}
public Student(String name){
this.name = name;
}
public void setName(String name){
this.name = name; //让类中的一个方法,访问该类的另一个方法或属性。
}
2、static
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
JVM对这些static的东西只加载一次和分配一次内存。
static关键字的作用是:方便在没有创建对象的情况下来进行调用(方法/变量)
2.1、static 变量
static 修饰的变量我们称之为静态变量,没有用 static 修饰的变量称之为实例变量,他们两者的区别是:
静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且 JVM 也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。
但是实例变量则不同,它是伴随着实例的,每创建一个实例就会产生一个实例变量,它与该实例同生共死。所以我们一般在这两种情况下使用静态变量:对象之间共享数据、访问方便。
2.2、static 方法
static 修饰的方法我们称之为静态方法,我们通过类名对其进行直接调用。由于他在类加载的时候就存在了,它不依赖于任何实例,所以 static 方法必须实现,也就是说他不能是抽象方法 abstract。
在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的
2.3、static 代码块
被 static 修饰的代码块,我们称之为静态代码块,静态代码块会随着类的加载一块执行,而且他可以随意放,可以存在于该了的任何地方。
很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。
- 它是随着类的加载而执行,只执行一次,并优先于主函数。具体说,静态代码块是由类调用的。类调用时,先执行静态代码块,然后才执行主函数的。
- 静态代码块其实就是给类初始化的,而构造代码块是给对象初始化的。
- 静态代码块中的变量是局部变量,与普通函数中的局部变量性质没有区别。
- 一个类中可以有多个静态代码块
2.4、static修饰类
普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。详情阅读内部类