所有变量
--成员变量
--局部变量
成员变量
--实例变量(不以static修饰)
--类变量(以static修饰)
局部变量
--形参(方法签名中定义的变量)
--方法局部变量(在方法内定义)
--代码块局部变量(在代码块内定义)
代码块局部变量
public class BlockTest
{
public static void main(String[] args)
{
{
// 定义一个代码块局部变量a
int a;
// 下面代码将出现错误,因为a变量还未初始化
//System.out.println("代码块局部变量a的值:" + a);
// 为a变量赋初始值,也就是进行初始化
a = 5;
System.out.println("代码块局部变量a的值:" + a);
}
// 下面试图访问的a变量并不存在
//System.out.println(a);
}
}
成员变量的作用范围是整个类,一个类不能有相同名的成员变量,即使一个是类变量一个是实例变量也不行。
一个方法不能定义两个相同的方法局部变量,方法局部变量与形参也不能同名。
同一方法中不同代码块内的代码局部变量可以同名。
如果先定义代码块局部变量,后定义方法局部变量,也可以相同。
java容许方法局部变量和成员变量同名,局部变量会覆盖成员变量。
public class VariableOverrideTest
{
// 定义一个name实例变量
private String name = "李刚";
// 定义一个price类变量
private static double price = 78.0;
// 主方法,程序的入口
public static void main(String[] args)
{
// 方法里的局部变量,局部变量覆盖成员变量
int price = 65;
// 直接访问price变量,将输出price局部变量的值:65
System.out.println(price);
// 使用类名作为price变量的限定,
// 将输出price类变量的值:78.0
System.out.println(VariableOverrideTest.price);
// 运行info方法
new VariableOverrideTest().info();
}
public void info()
{
// 方法里的局部变量,局部变量覆盖成员变量
String name = "孙悟空";
// 直接访问name变量,将输出name局部变量的值:"孙悟空"
System.out.println(name);
// 使用this来作为name变量的限定,
// 将输出name实例变量的值:"李刚"
System.out.println(this.name);
}
}