注意事项和细节一:
- 属性和局部变量可以重名,访问时遵循就近原则。
- 在同一个作用域中,比如在同一个成员方法中,两个局部变量不能重名。
- 属性的生命周期较长,伴随着对象的创建而创建,伴随着对象的死亡而死亡。
- 局部变量的生命周期较短,伴随着它的代码块的执行而创建,伴随着代码快的结束而销毁。即在一次方法的调用过程中。
代码演示:
public class Main {
public static void main(String[] args) {
Person p = new Person();
/*
属性的生命周期较长,伴随着对象的创建而创建,伴随着对象的死亡而死亡。
局部变量的生命周期较短,伴随着它的代码块的执行而创建,伴随着代码快的结束而销毁。
即在一次方法的调用过程中。
*/
//当执行say方法时,say方法的局部变量比如name,会创建
p.say();
//say方法执行完毕后,name局部变量被销毁
//但是,属性(全局变量)中的name任然可以使用
}
}
class Person{
String name = "WTY";
public void say(){
//属性和局部变量可以重名,访问时遵循就近原则。
String name = "WTY1";
System.out.println("say() name = " + name);
}
public void hi(){
String address = "大陆";
//int address = 3;//变量重名,报错!!!
String name = "WTY2";//可以
}
}
注意事项和细节二:
- 作用域范围不同
- 全局变量(属性):可以被本类使用,或其他类使用(通过对象调用)
- 局部变量:只能在本类中对应方法中使用。
- 修饰符不同
- 全局变量(属性)可以加修饰符
- 局部变量不可以加修饰符
代码演示:
package test;
public class Main {
public static void main(String[] args) {
Person p = new Person();
/*
属性的生命周期较长,伴随着对象的创建而创建,伴随着对象的死亡而死亡。
局部变量的生命周期较短,伴随着它的代码块的执行而创建,伴随着代码快的结束而销毁。
即在一次方法的调用过程中。
*/
//当执行say方法时,say方法的局部变量比如name,会创建
p.say();
//say方法执行完毕后,name局部变量被销毁
//但是,属性(全局变量)中的name任然可以使用
T t1 = new T();
t1.test();//第一种跨类访问对象的方式
t1.test1(p);//第二种跨类访问对象的方式
}
}
class T{
//全局变量(属性):在其他类使用(通过对象调用)
public void test(){
Person p1 = new Person();
System.out.println(p1.name);
}
public void test1(Person p){
System.out.println(p.name);
}
}
class Person{
//全局变量(属性)可以加修饰符
public int a = 10;
private int b = 10;
protected int c = 10;
String name = "WTY";
public void say(){
//属性和局部变量可以重名,访问时遵循就近原则。
String name = "WTY1";
System.out.println("say() name = " + name);
//局部变量不可以加修饰符
//public int a = 10;//报错!!!
}
public void hi(){
String address = "大陆";
//int address = 3;//变量重名,报错!!!
String name = "WTY2";//可以
}
}
运行结果: