Java中的成员变量和局部变量

成员变量:是指在类中定义的变量。

局部变量:是指在方法中定义的变量。

成员变量可以细分为类变量和实例变量

  • 类变量:有static修饰。随着该类的准备阶段开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同。
  • 实例变量:没有static修饰。从该类的实例被创建开始存在,知道系统完全销毁这个实例。示例变量的作用域与对应实例的生存范围相同。
  • class Car{
        //定义一个实例变量 车的品牌
        public String brand;
        //定义一个类变量 发动机的数量
        public static int engineNum;
    }
    public class CarTest{
      private static int engineNum;
    	private String brand;
        public static void main(String[] args){
            //第一次加载Car类,该类初始化,static修饰的类变量同样开始初始化,值为0
            System.out.println("Car的engineNum变量值为:"+Car.engineNum);
            //创建Car对象
            Car c=new Car();
            //通过Car对象的引用car来访问Car对象brand的实例变量
            //通过实例访问engineNum类变量
            System.out.println("car变量的brand变量值是:"+c.brand);
            System.out.println("Car的engineNum变量值为:"+c.engineNum);
            //给brand实例变量赋值
            c.brand="奥迪";
            System.out.println("car变量的brand变量值是:"+c.brand);//此处将输出奥迪
            c.engineNum=2;//将类变量赋值
            System.out.println("Car的engineNum变量值为:"+c.engineNum);//此处将输出2
            //创建一个新的实例对象
            Car c2=new Car();
            //由于brand为实例变量,新建了实例之后需要重新赋值,所以输出为null
            System.out.println("car变量的brand变量值是:"+c2.brand);
            //由于c2访问的类变量依旧需要引用Car类,所以此处输出值仍然为2
             System.out.println("Car的engineNum变量值为:"+c.engineNum);
    
                
        }
    }

     

局部变量根据定义形式的不同可以分为如下三种

  • 形参:在定义方法签名时定义的变量,形参的作用域在整个方法里有效。
  • 方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效。
  • 代码快局部变量:在代码快中定义的局部变量,它的作用域是从定义该变量的地方生效,到该代码块结束时失效。
public  class Demotest{
    public static void main(String[] args){
        {
            //定义一个数字a并将其赋值
            int a=1;
            //输出到控制台,打印结果:2
            System.out.println(a);
        }
        //由于a是定义在语句块里的,这里超出了它的作用域,所以会找不到a
        // System.out.println(a);
    }
}

PS: 

方法签名=方法名+参数列表


如果一个参数列表不同,包括如下不同:

  • 参数的类型不同
  • 参数的个数不同
  • 参数的类型的顺序不同

在同一个类里,成员变量的作用范围对整个类有效,一个类里不能定义两个同名的成员变量(一个类变量一个实例变量也不行),一个方法里不能定义两个同名的方法局部变量,方法局部变量和形参也不能同名。但是同一个方法中不同代码块内的代码块局部变量是可以同名的,如果先定义代码块的局部变量,后定义方法局部变量,这两个变量也可以同名。

Java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,如果需要调用方法里引用被覆盖的成员变量,可以使用this或者类名作为调用者来限定访问成员变量。

public class Demo1{
    //定义一个name的实例变量
    private String name="唐蹦桶";
    //定义一个age的类变量
    private static int age=23;

    public static void main (String[] args){
        //方法里的局部变量,如果和成员变量同名,将覆盖
        int age=18;
        System.out.println(age);//输出18
        //使用类名定义的变量,其值还是成员变量的值
        System.out.println(Demo1.age);//输出23
        //运行info方法
        new Demo1().info();
    }
    public void info(){
    String name="哆啦A梦";
    //直接输出name,输出结果是被局部变量覆盖的name:哆啦A梦
    System.out.println(name);
    //使用this定义该变量,其值还是成员变量的值,效果和使用类名定义变量一样
    System.out.println(this.name);//输出:唐蹦桶
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值