java中的成员变量、静态变量与局部变量
java中的变量分为成员变量(又叫实例变量)、静态变量和局部变量。
1.成员变量
1.1 成员变量(实例变量)是在类中定义的非static修饰的变量,可以不用赋初始值,不同的数据类型有默认的初始值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package test; import org.junit.Test; public class VariableTest { byte bt; short s; int age; long l; float f; double d; char c; boolean flag; String name; @Test public void cvariable(){ VariableTest vt= new VariableTest(); System.out.println( "byte类型的默认值为:" +vt.bt); System.out.println( "short类型的默认值为:" +vt.s); System.out.println( "int类型的默认值为:" +vt.age); System.out.println( "long类型的默认值为:" +vt.l); System.out.println( "float类型的默认值为:" +vt.f); System.out.println( "double类型的默认值为:" +vt.d); //'\u0000'为空 if (c== '\u0000' ){ System.out.println( "char类型的默认值为'\u0000'" ); } System.out.println( "boolean类型的默认值为:" +vt.flag); System.out.println( "String类型的默认值为:" +vt.name); } } |
运行结果:
1 2 3 4 5 6 7 | byte 类型的默认值为: 0 short 类型的默认值为: 0 int 类型的默认值为: 0 long 类型的默认值为: 0 float 类型的默认值为: 0.0 double 类型的默认值为: 0.0 char 类型的默认值为' |
1.2 实例变量只有初始化一个副本之后才可以使用,每当实例化一个对象,会在堆中创建一个副本并初始化,各个对象中对实例变量的修改互不影响。
1 | package test;<br> import org.junit.Test;<br><br> public class VariableTest {<br> int age; <br> @Test <br> public void cvariable2(){<br> VariableTest vt1= new VariableTest();<br> vt1.age++;<br> System.out.println( "vt1.age:" +vt1.age); //vt1.age:1<br> VariableTest vt2=new VariableTest();<br> vt2.age++;<br> System.out.println("vt2.age:"+vt2.age); //vt2.age:1<br> }<br>} |
2.静态变量
定义在类中被static修饰的变量,类加载时在方法区中分配存储空间,被类所拥有,任意一个对象对其修改都会改变该变量的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package test; import org.junit.Test; public class VariableTest { static int num; @Test public void staticVariableTest(){ VariableTest vt1= new VariableTest(); vt1.num++; System.out.println(vt1.num); //1 VariableTest vt2= new VariableTest(); vt2.num++; System.out.println(vt2.num); //2 } } |
3.局部变量
局部变量是指定义在方法体中的变量,变量定义后必须赋初始值。若为基本类型,值直接存储在栈中,若为引用类型,其对象存储在堆中,而把对象的引用存储在栈中。
4.成员变量的作用域
成员变量的作用域:
- public:当前类,同一package的其他类,其他package的当前类的子类,其他package的类都可以访问(4);
- private:只有当前类能访问(1);
- protected:当前类,同一package的其他类,其他package的当前类的子类都可以访问(3);
- default:只有当前类和其位于同一包内的类可以访问(2);
这些修饰符只能修饰成员变量,不能修饰局部变量。(只有public,abstract,final能用来修饰类)。
未经授权,不得转载!
posted on 2019-04-29 21:37 BlueTree2 阅读(1049) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步