温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-06-30 17:47:33 来源:亿速云 阅读:170 作者:Leah 栏目:大数据

今天就跟大家聊聊有关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
学生姓名:张三
成绩为0

Process 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关键字有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI