java中成员变量和局部变量有哪些区别?

先来看下总结吧,主要有以下一些区别:

1.变量定义位置
成员变量:类中,方法外,一种是有static修饰,一种是实例变量没有static修饰
局部变量:形参/非静态代码块中

2.修饰符使用
成员变量:public、protected、private、final,static,volatile,transient
局部变量:只有final

3.作用域
成员变量:当前类中的this,在其他类中的对象名访问,
静态变量:在当前类中的类名.,在其他类中的类名.或对象名.访问
局部变量:局部变量冲声明处开始,到所属的“}”结束

4.值存储位置
实例变量:存放于堆空间中
静态变量:存放于方法区中,1.8之后静态变量是存放在堆区,是实际数据的存储。方法中使用直接引用其指针,在栈中使用
局部变量:存放于栈中

5.生命周期
局部变量:每一个线程每一次调用执行都是新的生命周期(随着方法进栈而诞生,随着方法出栈而死亡)
实例变量:跟随实例对象的生命周期(对象创建诞生,对象回收消失)
静态变量:跟随类的生命周期(类加载诞生,类卸载消失),静态变量可以被所有实例对象共享

6.使用优先级不同
局部变量优先于成员变量(就近原则)

好了,说多了都是废话,我们先上个demo从代码里面来看区别:

public calss Demo{
    String str;//成员变量
	public static Integer a = 10;//静态变量
	int i = 5;
	
    public void test1(){
        int num=20;//局部变量 默认值null
        System.out.println(num);
        System.out.println(str);
    }
    
    public void test2(int i){
        int age;
        //System.out.println(age);//错误写法 未赋值不能使用,必须赋值
        //方法的参数就是局部变量
        System.out.println(i);//优先使用局部变量
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值