注意事项和细节一:
- 属性和局部变量可以重名,访问时遵循就近原则。
- 在同一个作用域中,比如在同一个成员方法中,两个局部变量不能重名。
- 属性的生命周期较长,伴随着对象的创建而创建,伴随着对象的死亡而死亡。
- 局部变量的生命周期较短,伴随着它的代码块的执行而创建,伴随着代码快的结束而销毁。即在一次方法的调用过程中。
代码演示:
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";//可以}}
运行结果:
