前言:
- 某一天, 我在方法中访问类成员的时候, 一不小心给这个成员申明了类型, 结果造成了空指针异常. 花了几十毫秒之后的观察后, 我发现, 原来这申明了一个变量, 于是决定通过这篇小记来记录下这件事.
可以省略 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.namepublic 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.blackblack.name = "Black";white = new Cat();white.name = "White";}}
tips: 快速区分 普通成员, 静态成员 和 局部变量
IDEA 通过字体的颜色和样式, 传递了变量类型的信息.
- 普通类成员
- 粗体的紫色名字
- 静态类成员
- 是一个斜体的紫色名字
- 普通变量名
- 没有任何样式的普通黑色字体.

