作用域
● 基本使用
面向对象中,变量作用域是非常重要知识点,相对来说不是特别好理解,请大家注意听,认真思考,要求深刻掌握变量作用域。
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
-
属性和局部变量可以重名,访问时遵循就近原则。
-
在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名。[举例
-
属性生命周期较长,伴随着对象的创建而创建,伴随着对象的死亡而死亡。
局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而死亡。
即在一次方法调用过程中生效。
-
作用域范围不同 全局变量:可以被本类使用,或其他类使用 (通过对象调用) 局部变量:只能在本类中对应的方法中使用
-
修饰符不同 全局变量/属性可以加修饰符 局部变量不可以加修饰符
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