最近得看看Java,想学一学Flink实时的东西了,当然Scala语法也有这样的规定,简单看一下这两个吧,都比较容易忽视
实例变量和局部变量
实例变量和局部变量是常见的两种变量类型,区别
-
作用域:
- 实例变量:实例变量属于类的实例,可以在整个类中被访问和使用。每个类的实例(对象)都有一份自己的实例变量副本。
- 局部变量:局部变量只在声明它的方法或代码块中可见,超出该范围就无法访问。
-
生存周期:
- 实例变量:实例变量的生命周期与对象的生命周期相同,当对象被销毁时,实例变量也会被销毁。
- 局部变量:局部变量的生命周期仅限于声明它的方法或代码块执行期间,当方法或代码块执行完毕时,局部变量会被销毁。
-
默认值:
- 实例变量:实例变量会有默认值,如数值类型默认为0,布尔类型默认为false,引用类型默认为null。
- 局部变量:局部变量没有默认值,必须在使用前进行初始化。
具体例子如下
public class VariableExample {// 实例变量private int instanceVar;public void exampleMethod() {// 局部变量int localVar = 10;System.out.println("实例变量值:" + instanceVar); // 实例变量有默认值0System.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
关键字通常用来引用当前对象的实例。它可以用来区分对象的实例变量和局部变量,也可以在对象的方法中调用其他方法或构造函数。
-
区分实例变量和局部变量:当实例变量和局部变量重名时,可以使用
this
关键字来引用实例变量,以区分两者。 -
在构造函数中调用其他构造函数:在一个构造函数中调用同一个类的其他构造函数时,可以使用
this()
来实现。 -
传递当前对象的引用:在方法中需要将当前对象的引用传递给其他方法时,可以使用
this
关键字。
this
关键字可以在以下情况下被省略:
-
当没有歧义时:如果在方法中没有局部变量和实例变量同名的情况下,可以省略
this
关键字。 -
在静态方法中:静态方法中没有
this
关键字,因为静态方法是与类相关联而不是与对象实例相关联的。
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编程》的图