Java_实例变量和局部变量及this关键字详解

最近得看看Java,想学一学Flink实时的东西了,当然Scala语法也有这样的规定,简单看一下这两个吧,都比较容易忽视

实例变量和局部变量

实例变量和局部变量是常见的两种变量类型,区别

  1. 作用域

    • 实例变量:实例变量属于类的实例,可以在整个类中被访问和使用。每个类的实例(对象)都有一份自己的实例变量副本。
    • 局部变量:局部变量只在声明它的方法或代码块中可见,超出该范围就无法访问。
  2. 生存周期

    • 实例变量:实例变量的生命周期与对象的生命周期相同,当对象被销毁时,实例变量也会被销毁。
    • 局部变量:局部变量的生命周期仅限于声明它的方法或代码块执行期间,当方法或代码块执行完毕时,局部变量会被销毁。
  3. 默认值

    • 实例变量:实例变量会有默认值,如数值类型默认为0,布尔类型默认为false,引用类型默认为null。
    • 局部变量:局部变量没有默认值,必须在使用前进行初始化。

具体例子如下

java 复制代码
public class VariableExample {
    // 实例变量
    private int instanceVar;

    public void exampleMethod() {
        // 局部变量
        int localVar = 10;

        System.out.println("实例变量值:" + instanceVar); // 实例变量有默认值0
        System.out.println("局部变量值:" + localVar);

        instanceVar = 20; // 修改实例变量的值
        System.out.println("修改后的实例变量值:" + instanceVar);

        // 下面一行代码会报错,因为局部变量必须初始化后才能使用
        // System.out.println("未初始化的局部变量:" + uninitializedVar);
    }

    public static void main(String[] args) {
        VariableExample obj = new VariableExample();
        obj.exampleMethod();
    }
}

this关键字

this 关键字通常用来引用当前对象的实例。它可以用来区分对象的实例变量和局部变量,也可以在对象的方法中调用其他方法或构造函数。

  1. 区分实例变量和局部变量 :当实例变量和局部变量重名时,可以使用 this 关键字来引用实例变量,以区分两者。

  2. 在构造函数中调用其他构造函数 :在一个构造函数中调用同一个类的其他构造函数时,可以使用 this() 来实现。

  3. 传递当前对象的引用 :在方法中需要将当前对象的引用传递给其他方法时,可以使用 this 关键字。

this 关键字可以在以下情况下被省略:

  1. 当没有歧义时 :如果在方法中没有局部变量和实例变量同名的情况下,可以省略 this 关键字。

  2. 在静态方法中 :静态方法中没有 this 关键字,因为静态方法是与类相关联而不是与对象实例相关联的。

java 复制代码
public class Person {
    private String name;

    public Person(String name) {
        this.name = name; // 使用 this 关键字区分实例变量和局部变量
    }

    public void setName(String name) {
        this.name = name; // 使用 this 关键字区分实例变量和局部变量
    }

    public void printName() {
        System.out.println("My name is " + this.name); // 可以省略 this,但为了清晰起见,保留比较好
    }

    public void changeName(String name) {
        setName(name); // 在方法中调用其他方法时,可以省略 this
    }
}

图片来源:我截的《Scala编程》的图

相关推荐
FQNmxDG4S7 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
前端老石人8 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang8 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
虹科网络安全8 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje8 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv79 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫9 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287929 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本9 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
止语Lab9 小时前
从手动到框架:Go DI 演进的三个拐点
开发语言·后端·golang