前言:
- 某一天, 我在方法中访问类成员的时候, 一不小心给这个成员申明了类型, 结果造成了空指针异常. 花了几十毫秒之后的观察后, 我发现, 原来这申明了一个变量, 于是决定通过这篇小记来记录下这件事.
可以省略 this 来访问实例成员
- 实例方法
- this 即实例
- 在 Java 中, this 就表示了实例
- this 是可以省略的
- 在实例方法中, 如果一个 变量名 没有在作用域中声明, 那么可以直接 访问到 实例上的成员, 而无需每次通过 this.xxx 来访问.
- this 即实例
public class Cat {
public String name ;
public Number age ;
public Cat(){ }
public Cat(String name, Number age){
this.name = name;
this.age = age;
}
// 这里通过 name 访问到了 this.name
public void meow(){
System.out.println(" 喵, 我是" + name + ", 我的名字长度为: "
+ name.length());
}
public void meow(String str){
System.out.println(str);
}
public void tellAge(){
System.out.println(age);
}
public void tellAge2(){
int age = 200;
System.out.println(age);
}
}
可以省略类名来访问 静态成员
public class Home {
public static Cat black;
public static Cat white;
public static void main(String[] args) {
createTwoCats();
System.out.println(black);
System.out.println(white);
}
public static void createTwoCats() {
Home.black = new Cat(); // 这里访问了静态类成员
Home.black.name = "Black";
white = new Cat(); // 这里也访问了静态类成员
white.name = "White";
}
}
注意事项 - 本来想访问成员时, 结果不小心声明了一个变量:
注意在局部作用域中区别 : 成员访问 和 变量声明
变量声明是带类型的
public class Home {
public static Cat black;
public static Cat white;
public static void main(String[] args) {
createTwoCats();
System.out.println(black);
System.out.println(white);
}
public static void createTwoCats() {
Cat black = new Cat(); // 这里申明了类型, 就变成了在声明此处局部作用域中的对象, 而不是静态成员 Home.black
black.name = "Black";
white = new Cat();
white.name = "White";
}
}
tips: 快速区分 普通成员, 静态成员 和 局部变量
IDEA 通过字体的颜色和样式, 传递了变量类型的信息.
- 普通类成员
- 粗体的紫色名字
- 静态类成员
- 是一个斜体的紫色名字
- 普通变量名
- 没有任何样式的普通黑色字体.