一、全局变量和局部变量
简单理解:全局变量就是定义在类中的变量,它可以用在该类中的任何地方。局部变量就是定义在方法里面的变量,只能在该方法内使用。(不是很准确,但是可以这样简单理解)
class var{
//这里的age就是全局变量,作用域是整个var类
int age;
public void say(){
//1.这里的n和name就是局部变量
//2.局部变量的作用域只限于say方法里面
int n = 10;
String name = "jack";
sout("n=" + n + "name=" +jack);
}
public void eat(){
sout("age=" + age);
}
}
Tips:
- 全局变量定义的时候可以不赋值,因为有系统默认的初始值,但是局部变量不可以,定义的时候必须要赋值!
- 全局变量(属性)和局部变量可以重名,访问时遵循就近原则。(this关键字那篇涉及到)
- 在同一个作用域中,例如在同一个成员方法中,两个局部变量不能重名。
- 全局变量(属性)的生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。
- 局部变量的生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而死亡。
下面用一段代码来解释上面的Tips:
class Person{
String name = "jack";
Person p1 = new Person();
p1.say();
//当执行say方法时,say方法里面的局部变量name会被创建。当say方法执行完毕后,局部变量name就会被销毁,但是全局变量(属性)仍然可以使用。
public void say(){
//全局变量(属性)和局部变量可以重名,访问时遵循就近原则。
String name = "king";
}
public void hi(){
String name = "mu";
}
}
二、二者的区别
作用域范围不同:
- 全局变量:可以被本类使用,也可以被其他类使用(通过对象调用)。
- 局部变量:只能在本类中对应的方法里使用。
修饰符不同:
- 全局变量(属性):可以加修饰符。(private, public, protected......)
- 局部变量:不可以加修饰符。
三、两种跨类访问属性的方式
- 通过实例化对象访问属性
public class Scope{
public static void main(String[] args){
T t1 = new T();
t1.test1(); //第一种跨类访问属性的方式
t1.test2(p2) //第二种跨类访问属性的方式,把对象当参数传进去
}
}
class T{
public void test1(){
Person p1 = new Person();
sout(p1.name);
}
public void test2(Person p){
sout(p.name);
}
}
class Person{
String name = "jack";
public void say(){
String name = "king";
}
public void hi(){
String name = "mu";
}
}