作用域和构造器的一些使用细节

java中变量作用域的使用细节

      • 属性和局部变量可以重名,访问时遵循就近原则。

      • 在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名。[举例]

      • 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变
        量,
        生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁。
        即在一次方法调用过程中。
        e11937fea76b4381645481c7dd5e150a.pnge11937fea76b4381645481c7dd5e150a.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.png0a445886713f97a499aaad9e6c0e74d4.png
posted @ 2022-06-30 15:48  AINIBYM  阅读(37)  评论(0)    收藏  举报