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调用另一个构造器
- 使用 this 关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句
- this不能用于static方法中
- 参考这篇博客可以更深的理解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关键字的使用
- 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。
- 对于该类的所有对象来说,static 成员变量只有一份。被该类的所有对象共享!!
- 一般用“类名.类属性/方法”来调用。(也可以通过对象引用或类名(不需要实例
化)访问静态成员。) - 在 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 成员
- 静态初始化块执行顺序(学完继承再看这里):
- 上溯到 Object 类,先执行 Object 的静态初始化块,再向下执行子类的静态初始化块,直到类的静态初始化块为止。
- 构造方法执行顺序和上面顺序一样!
static {
System.out.println("执行类的初始化工作");
company = "北京尚学堂";
printCompany();
}