千家信息网

Java中如何使用this和static关键字

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,今天就跟大家聊聊有关Java中如何使用this和static关键字,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. this1.1 对象创建
千家信息网最后更新 2024年11月19日Java中如何使用this和static关键字

今天就跟大家聊聊有关Java中如何使用this和static关键字,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1. this

1.1 对象创建过程

构造方法是创建 Java 对象的重要途径,通过 new 关键字调用构造器时,构造器也确实返回该类的对象,但这个对象并不是完全由构造器负责创建。创建一个对象分为如下四个步骤:

1.分配对象空间,并将对象成员变量初始化为0或空;

2.执行属性值的显式初始化;

3.执行构造方法;

4.返回对象的地址给相关的变量。

1.2 this的本质

this 的本质就是"创建好的对象的地址"!

由于在构造方法调用前,对象已经创建。

因此,在构造方法中也可以使用 this 代表"当前对象"。

1.3 this常见用法

在程序中产生二义性之处,应使用this来指明当前对象;

普通方法中,this 总是指向调用该方法的对象;

构造方法中,this 总是指向正要初始化的对象。

  • 注意

    • 使用 this 关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句

    • this 不能用于 static 方法中。

1.3.1 this的简单使用
package com.bigdataBC.demo;public class Student {    int id;    String name;    int score;    public Student() {    }    public Student(int id, String name) {        System.out.println("正在初始化已经创建好的对象:"+this);        this.id = id;        this.name = name;    }    public void stu_info(){        //加不加this都一样,这种情况可以省略        System.out.println("学生姓名:"+this.name+"\n"+"成绩为"+score);    }    public static void main(String[] args) {        Student student = new Student(001,"张三");        System.out.println("打印"张三"这个学生对象:"+student);        student.stu_info();    }}
>>    正在初始化已经创建好的对象:com.bigdataBC.demo.Student@1b6d3586打印"张三"这个学生对象:com.bigdataBC.demo.Student@1b6d3586学生姓名:张三成绩为0Process finished with exit code 0
1.3.2 this() 调用重载构造方法
package com.bigdataBC.demo;public class Student {    int id;    String name;    int score;    Student() {        System.out.println("正要初始化一个student对象");    }    Student(int id, String name) {        this(); //用来调用无参构造方法,注意必须位于第一行        /* 使用Student();是无法调用的,必须this(); */        /* 下面这两个指向的是成员变量 */        // 用于区分了成员变量和局部变量.这种情况占了this使用情况大多数!        this.id = id;        this.name = name;        /* 这里不用this.var的话就都只是指向局部变量而不是成员变量 */        id=888;        name="李四";    }    Student(int id,String name,int score){        this(id,name);  //调用带参的构造方法,也必须位于第一行        this.score=score;    }    void stu_info(){        //加不加this都一样,这种情况可以省略        System.out.println("学生姓名:"+this.name+"\t"+"成绩:"+score);    }    void print_stu(){        System.out.println("打印学生基本信息:");        this.stu_info();    //调用本类中的方法    }    public static void main(String[] args) {        Student student = new Student(001,"张三",700);        student.print_stu();    }}

看结果便一目了然了,嘿嘿!

>>正要初始化一个student对象打印学生基本信息:学生姓名:张三 成绩:700

2. static

2.1 概述

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

  • 特点

    • 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。

    • 对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享!

    • 一般用"类名.类属性/方法"调用。(也可以通过对象引用或类名(不需要实例化)访问静态成员。)

    • 在static方法中不可直接访问非static的成员。

2.2 static的简单使用

package com.bigdataBC.demo;public class Student {    int id;    String name;    //静态变量    static String address="北京";    public Student(int id, String name) {        this.id = id;        this.name = name;    }    public void test(){        System.out.println("学生姓名:"+name);    }    //静态方法    public static void static_test(){        /**         * 该静态方法中调用非静态成员,编译就会报错         *         * 比如上面test()方法中的System.out.println("学生姓名:"+name);         * 在这里就会报错,因为name是非静态变量         *         * 再比如调用test()方法,来个test();  显然也会报错,因为test是非静态方法         */        System.out.println("学生地址:"+address);    }    public static void main(String[] args) {        Student student = new Student(001,"张三");        student.test();        //静态成员可以直接使用"类名.类属性/方法"调用        Student.static_test();        Student.address="上海";        Student.static_test();    }}
>>    学生姓名:张三学生地址:北京学生地址:上海Process finished with exit code 0

2.3 静态初始化块

  • 构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在静态初始化块中不能直接访问非static成员。

  • 静态初始化块执行顺序

    • 上溯到 Object 类,先执行 Object 的静态初始化块,再向下执行子类的静态初始化块,直到类的静态初始化块位为止。

    • 构造方法执行顺序和此顺序一样

package com.bigdataBC.demo;public class Student {    int id;    String name;    //静态变量    static String address;    //静态块    static {        System.out.println("执行类的初始化工作");        address="北京";        static_test();    }    //静态方法    public static void static_test(){        System.out.println("学生地址:"+address);    }    public static void main(String[] args) {        Student student = new Student();    }}
>>执行类的初始化工作学生地址:北京Process finished with exit code 0

看完上述内容,你们对Java中如何使用this和static关键字有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0