Java成员变量和局部变量

Java成员变量和局部变量

变量至关于一个有名称的容器,用于装不一样类型的数据。而Java中根据变量定义位置的不一样,又把变量分为成员变量和局部变量。
因为对修饰符尚未系统学习,就暂且以public访问权限最高的做为修饰符。
仍是先上一段代码:学习

package com.my.pac03;

/**
 * @author Summerday
 * @date 2019/11/29 14:44
 */

public class VariablesTest {
    //成员变量会默认初始化
    public int value;//定义实例变量
    public static String name;//定义类变量,属于类,而不是类的单个实例。

    //main方法,程序入口
    public static void main(String[] args) {
        VariablesTest test = new VariablesTest();
        //实例访问实例变量
        test.value = 10;
        //类访问类变量
        VariablesTest.name = "typeName";
        System.out.println(VariablesTest.name);//typeName
        //实例访问类变量
        test.name = "noTypeName";
        System.out.println(VariablesTest.name);//noTypeName
        VariablesTest test2 = new VariablesTest();
        //另外一个实例访问类变量
        System.out.println(test2.name);//noTypeName
        int val = test.addNum(5);
        System.out.println(val);//15
        System.out.println(test.value);//15
        //System.out.println(m);  错误,形参变量m已经消失
        //System.out.println(n);  错误,方法局部变量n也会消失
        test.printForeachOneTOTen();
    }

    public int addNum(int m) {
        int n;//方法局部变量并不会初始化
        //public int m;//局部变量不容许使用访问修饰符修饰
        //System.out.println(n);报错,由于方法局部变量不会初始化
        n = 3;

        return value += m;
    }
    public void printForeachOneTOTen(){
        for(int i = 1;i<=10;i++){
            System.out.print(i+" ");
        }
        //System.out.println(i);错误,i的值存在于代码块中,代码块以外就莫得了
    }

}

既然是做为变量,那么命名方面就应该遵循变量命名的规范,由多个有意义的英文单词连成,首单词首字母小写,其余单词首字母大写,务必见名知义。测试

成员变量

  • 是在类里定义的变量,有些地方也叫作字段(field),也能够叫作
  • 根据变量是否由static关键字修饰,分为实例变量类变量,有些地方也叫作实例域和静态域(类域)。

实例变量

1. 定义实例变量code

//定义实例变量
public int value;
  • 没有static修饰
  • 从类的实例被建立开始存在,实例消亡时毁灭。

2. 访问实例变量作用域

//实例访问实例变量
    test.value = 10;
  • 经过实例访问,格式:实例.实例变量

类变量

1. 定义类变量it

//定义类变量
public static String name;
  • 有static修饰
  • 从类的准备阶段起存在,类消亡时毁灭。

2. 访问类变量for循环

//类访问类变量
VariablesTest.name = "typeName";
 //实例访问类变量
test.name = "noTypeName";
System.out.println(VariablesTest.name);//noTypeName
VariablesTest test2 = new VariablesTest();
//另外一个实例访问类变量
System.out.println(test2.name);//noTypeName
  • 经过类访问,格式:类.类变量
  • 也能够经过实例访问,格式:实例.类变量
  • 关于类变量涉及到的static关键字,以后还会深刻学习。

第一条经过类直接访问类变量能够接受,但第二条有点迷惑,但也能够理解,毕竟类存在的范围比实例要大。
经过测试:该实例并不拥有这个类变量,因此他访问的不是实例变量,而依然是类变量。因此上面的操做,经过实例修改类变量和经过类直接修改类变量效果时同样的。那么,若是实例能够直接修改该类的类变量的话,那么这个类再建立其余实例时,这个所谓的“共有的特性”就说改就改,变得十分不堪。class

局部变量

是在方法里定义的变量,根据定义形式的不一样,分为如下三种:test

形参变量

//参数列表里是形参
public int addNum(int m) {
    int n;
    n = 3;
    return value += m;
}
  • 在定义方法签名(方法名+参数列表)时定义的变量。
  • 做用域在整个方法内有效。
  • 形参不用显式初始化。
int val = test.addNum(5);
System.out.println(val);//15

形参m的值人为指定,初始化在调用方法的时候由系统完成。这里至关于,把5赋值给了int类型的形参变量m。容器

方法局部变量

public int addNum(int m) {
//int类型的n为方法局部变量
    int n;//局部变量并不会初始化
    //System.out.println(n);报错,由于方法局部变量不会初始化
    n = 3;
    return value += m;
}
  • 是在方法体内定义的局部变量。
  • 做用域在该变量定义时生效,到方法结束时失效。
  • 须要显式初始化,不然会报错。

代码块局部变量

//i就是存在于for循环代码块中的代码块局部变量
public void printForeachOneTOTen(){
    for(int i = 1;i<=10;i++){
        System.out.print(i+" ");
    }
    //System.out.println(i);错误,i的值存在于代码块中,代码块以外就莫得了
}
  • 在代码块中定义的局部变量。
  • 做用域在定义该变量时生效,在代码块结束时失效。
  • 须要显示初始化,不然会报错。

关于命名

  • 在同一个类中,不能定义两个同名的成员变量,就算是一个类变量,一个实例变量也不行。
  • 一个方法里面不能定义两个同名的方法局部变量,且方法局部变量和形参变量不能同名。
  • 同一个方法中,不一样代码块内的代码块局部变量能够同名。
  • 先定义代码块,后定义方法局部变量,二者也能够同名。
  • 若是方法局部变量和成员变量同名,那么局部变量会覆盖成员变量。(尽可能避免)
相关文章
相关标签/搜索