成员变量和局部变量

学习重点

   1、就近原则
   2、变量的分类
         成员变量:类变量、实例变量
         局部变量

  3、非静态代码块在执行:每次创建实例对象都会执行
  4、方法的调用规则: 调用一次执行一次

局部变量和成员变量的区别

1、声明的位置

       局部变量: 方法体{} 中,形参,代码块{}中
       成员变量: 类方法外
                        (1)类变量:有static修饰
                        (2)实例变量:没有static修饰

2、修饰符

       局部变量:final
       成员变量:public、 protected、private、final、static、volatile、stransient

3、值存储的位置

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

4、作用域

     局部变量:从声明开始,到所属的 } 结束
     实例变量:在当前类中“this”(有时this可以缺省)在其他类中“对象.名”访问
     类变量:在当前类名中“类名.”(有时类名.可以缺省),在其他类中“类名.”或者“对象名.”访问

5、生命周期

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

当局部变量与xx变量重名时,如何区分

    (1)局部变量和实例变量重名
             在成员变量前面加“this”
   (2)局部变量与类变量重名
             在类变量前面加“类名.”

代码练习


public class Exam5 {
    static int s; //成员变量,类变量
    int i; //成员变量,实例变量
    int j; //成员变量,实例变量
    {
        int i=1; //非静态代码块中的局部变量 i
        i++;
        j++;
        s++;
    }
    public void test(int j){//形参局部变量,j
        j++;  //j就近原则 取test(int j)里的j
        //this.j++; 如果是this.j 取第6行的成员变量j
        i++;
        s++;
    }

    public static void main(String[] args) {//形参局部变量,args
        Exam5 obj1= new Exam5();//局部变量,obj1
        Exam5 obj2= new Exam5();//局部变量,obj2
        obj1.test(10);
        obj1.test(20);
        obj2.test(30);
        System.out.println("obj1: "+obj1.i+","+obj1.j+","+obj1.s);
        System.out.println("obj2: "+obj2.i+","+obj2.j+","+obj2.s);
    }
}

运行结果:

obj1: 2,1,5
obj2: 1,1,5

Process finished with exit code 0

结果分析:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值