作用域和构造器的一些使用细节
java中变量作用域的使用细节
-
属性和局部变量可以重名,访问时遵循就近原则。
-
在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名。[举例]
-
属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变
量,
生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁。
即在一次方法调用过程中。![e11937fea76b4381645481c7dd5e150a.png]()
局部变量中的name属性会在say方法执行完毕后销毁,局部变量会随之销毁 -
作用域范围不同
全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)
局部变量:只能在本类中对应的方法中使用 -
修饰符不同
全局变量/属性可以加修饰符
局部变量不可以加修饰符
具体的代码体现如下
public class VarScopeDetail {
public static void main(String[] args) {
Person p1 = new Person();
p1.say();
// 当执行say方法的时候,say方法中的局部变量会被调用
//say执行完毕后,say方法调用的局部变量就会被销毁
T t = new T();
t.test();
t.test2(p1);//两种跨类访问对象属性方式
}
}
class Person {
String name = "JAMES";
public void say() {
//属性和局部变量可以重名,访问时遵循就近原则
String name = "MURRY";
//String name = "KOBE";//错误,同一方法内的局部变量不能重名
System.out.println("say()name " + name);
}
}
class T {
//全局变量可以被其他的类使用,但是局部变量不可以
public void test() {
Person P1 = new Person();
System.out.println(P1.name);//JAMES
}
public void test2(Person person){
System.out.println(person.name);//JAMES
}
}
构造器的使用细节
- 一个类可以定义多个不同的构造器,即构造器重载
比如:我们可以再给Person类定义一个构造器用来创建对象的时候,只指定人名,
不需要指定年龄 - 构造器名和类名要相同
- 构造器没有返回值
- 构造器是完成对象的初始化,并不是创建对象
- 在创建对象时,系统自动的调用该类的构造方法
- 如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也
叫默认构造器),Dog类中系统会生成Dog (){},使用javap指令反编译可以看到 - 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无
参构造器,除非显式的定义一下,即: Dog(){},示例如下![0a445886713f97a499aaad9e6c0e74d4.png]()



浙公网安备 33010602011771号