作用域


作用域

● 基本使用

面向对象中,变量作用域是非常重要知识点,相对来说不是特别好理解,请大家注意听,认真思考,要求深刻掌握变量作用域。

Scope01.java

1.在java编程中,主要的变量就是属性(成员变量)和局部变量。

2.我们说的局部变量一般是指在成员方法中定义的变量。【举例Cat类:cry】

3.java中作用域的分类

全局变量:也就是属性,作用域为整个类体Cat类:cry eat等方法使用属性

【举例】

局部变量:也就是除了属性之外的其他变量,作用域为定义它的代码块中!

4.全局变量(属性)可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用, 因为没有默认值。

public class Scope01 {
  public static void main(String[] args) {

  }
}

class Cat{
  //全局变量:也就是属性,作用域为整个整体
  //属性在定义时,可以直接赋值
  int age = 10; //指定的值是10

  double weight;
  //没有给属性赋值就会自带一个默认值
  public void cry(){
      int n = 10;
      String name = "jack";
      //这里的n和name就是局部变量
      //n和name的作用域仅仅只在cry方法中
      System.out.println("在cry属性中使用age=" + age);
  }
  public void eat(){
      System.out.println("在eat属性中使用age=" + age);
  }
}

注意事项和细节使用

VarScopeDetail.java

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

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

  3. 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的死亡而死亡。

    局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而死亡。

    即在一次方法调用过程中生效。

  4. 作用域范围不同 全局变量:可以被本类使用,或其他类使用 (通过对象调用) 局部变量:只能在本类中对应的方法中使用

  5. 修饰符不同 全局变量/属性可以加修饰符 局部变量不可以加修饰符

public class VarScopeDetail {
  public static void main(String[] args) {
      Person p1 = new Person();
      p1.say();
      //当执行say方法时,say方法的局部变量比如name,会创建,当say执行完毕之后,name局部变量就会销毁
      //但是全局变量(属性)仍然是可以使用的
      Tamplex t1 = new Tamplex();
      t1.test();
      t1.test2(p1);
      //此时可以传入一个对象
  }
}

class Tamplex{
  //创建一个类
  public void test(){
      //这里如果我们想要使用到其他类的变量
      Person p1 = new Person();
      System.out.println(p1.name);
      //可以直接将别的类的属性实例化
  }

  public void test2(Person p1){
      System.out.println(p1.name);
      //这里参数的对象就为main的p1,此时参数p1就指向了main中p1指向的对象

  }
}


class Person{

  //属性可以添加修饰符(public protected private)
  //局部变量是不能添加修饰符的
  public String name = "jack";

  public void say(){
      String name = "King";
      //属性和局部变量可以重名,访问时遵循就近原则。
      System.out.println("say() name = " + name);
  }

  public void hi(){
      String address = "北京";
      //String address = "上海";
      //错误,重复定义了变量
      String name = "mike";
      //这个name和say方法的name处于不同作用域,因此是正确的
  }

}

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/245305.html

(0)
上一篇 2022年4月18日
下一篇 2022年4月18日

相关推荐

发表回复

登录后才能评论