百无聊赖之JavaEE从入门到放弃(五)this的本质_对象创建过程的4 步_隐式参数 & static

目录

一.this关键字

1.对象创建的过程和this的本质

2.this最常的用法:

二.static关键字

三.变量分类


一.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
我选择放弃

三.变量分类

猜你喜欢

转载自blog.csdn.net/weixin_44593822/article/details/115316645