Java面试题集锦(21):成员变量与局部变量

直接上代码

以下代码的执行结果?

class Exam {
    static int s;//成员变量,类变量
    int i;//成员变量,实例变量
    int j;//成员变量,实例变量
    {
        int i=1;//非静态代码块中的局部变量i
        i++;j++;s++;
    }
    public void test(int j){//形参,局部变量j
        j++;i++;s++;
    }
    public static void main(String[] args) {//形参,局部变量args
        Exam o1=new Exam();//局部变量o1
        Exam o2=new Exam();//局部变量o2
        o1.test(10);
        o1.test(20);
        o2.test(30);
        System.out.println(o1.i+","+o1.j+","+o1.s);
        System.out.println(o2.i+","+o2.j+","+o2.s);
    }
}

在这里插入图片描述

局部变量和类变量的区别

1.声明的位置

  • 局部变量:方法体{}中 形参,代码块{}中
  • 成员变量:类中方法外。分为类变量(static修饰)和实例变量。

2.修饰符

  • 局部变量:只可能有final
  • 成员变量:public、private、protected、final、static、volatile、transient等

3.值存储的位置

  • 局部变量:栈
  • 实例变量:堆
  • 类变量:方法区

4.作用域

  • 局部变量:声明处开始,到 } 结束
  • 实例变量:在当前类中用this(有时可省)其他类中用“对象名.xxx”访问
  • 类变量:在当前类中用“类名.xxx”(有时可省)其他类中用“类名.xxx”或“对象名.xxx”访问

5.声明周期

  • 局部变量:每一个线程,每一次调用执行都是新的生命周期
  • 实例变量:随着对象的创建而初始化,随着对象的被回收而消亡,每一个对象的实例变量都是独立的
  • 类变量:随着类的创建而初始化,随着类的卸载而消亡,该类的所有对象的类变量是共享的

局部变量和类/实例变量重名

  • 与实例变量重名:在实例变量前面加“this.”
  • 与类变量重名:在类变量前面加“类名.”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值