目录
一.this关键字
1.对象创建的过程和this的本质
构造方法是创建Java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回该类的对象,但这个对象并不是完全由构造器负责创建。
创建一个对象 分为如下四步:
1.分配对象空间,并将对象成员变量初始化为0或空
2.执行属性值的显式初始化(int id)
3.执行构造方法
4.返回对象的地址给相关的变量
this的本质就是“创建好的对象的地址”!由于在构造方法调用前, 对象已经创建。
因此,在构造方法中也可以使用this代表“当前对象”。
2.this最常的用法:
在程序中产生二 义性之处, 应使用this 来指明当前对象;普通方法中,this 总是指向调用该方法的对象。构造方法中,this 总是指向正要初始化的对象。
使用 this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
this 不能用于static方法中。
public class User {
int id;//用户名
String name;//账户名
String pwd;//密码
public User(int id,String name){
this.id=id; //用this来避免歧义
this.name=name;
}
public User(int id, String name, String pwd) {
//this可以调用其他构造器,且必须位于第一位
this(id,name); //相当于调用了上面的构造函数
this.pwd = pwd;
}
public void login(){
System.out.println("登陆了:"+this.name); //快捷键sout
}
public static void main(String[] args) { //快捷键psvm
User u1=new User(100,"hh");
u1.login();
}
}
二.static关键字
在类中,用static声明的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。
它有如下特点:
为该类的公用变量, 属于类,被该类的所有实例共享,在类被载入时被显式初始化。
对于该类的所有对象来说, static 成员变量只有一份。被该类的所有对象共享! !
一般用"类名类属性/方法”来调用。 (也可以通过对象引用或类名(不需要实例化)访问静态成员。)
在static方法中不可直接访问非static的成员。
public class User {
int id;//用户名
String name;//账户名
String pwd;//密码
static String affection="爱情好苦";
public User(int id,String name){
this.id=id; //用this来避免歧义
this.name=name;
}
public User(int id, String name, String pwd) {
//this可以调用其他构造器,且必须位于第一位
this(id,name); //相当于调用了上面的构造函数
this.pwd = pwd;
}
public void login(){
System.out.println("登陆了:"+this.name); //快捷键sout
}
public static void printCompany(){
//login();调用非静态成员,编译就会报错
System.out.println(affection);
}
public static void main(String[] args) { //快捷键psvm
User u1=new User(100,"hh");
User.printCompany();
User.affection="我选择放弃";
User.printCompany();
}
static{
System.out.println("类的静态初始化");
affection="test";
}
}
输出:
类的静态初始化
test
我选择放弃