根据定义变量位置的不同,可以将变量分为成员变量和局部变量
成员变量是在类范围内定义的变量
局部变量是在一个方法内定义的变量
类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
package com.cnblogs; /* * 本类用于测试成员变量 */ public class TestMemberVar { //成员变量:类中,方法外定义 String name = "柒";//实例变量 static int age = 21;//类变量 public static void main(String[] args) { // System.out.println(name);//实例变量在静态方法中不可以直接调用 System.out.println(age);//类变量可以在任何方法中直接调用 结果-->21 //实例化一个a对象 TestMemberVar a = new TestMemberVar(); a.testVar();// 结果 -->柒 21 a.age = 99; a.name = "张三"; a.testVar();// 结果 -->张三 99 //实例化一个b对象 TestMemberVar b = new TestMemberVar(); b.testVar();// 结果 -->柒(实例变量只改变对象自身的值,所以a对象的name改变,不影响对象b的name变量) 99(类变量是针对所有对象的,所以a改变age,b的age也改变) } public void testVar() { System.out.println(name);//实例变量在非静态方法中可以直接调用 System.out.println(age);//类变量可以在任何方法中直接调用 } }
成员变量可以不自行初始化,系统会自动对其进行默认初始化,布尔值默认值为 false ,除了基本数据类型,其余的默认值都是null。
package com.cnblogs; /* * 本类用于测试成员变量 */ public class TestMemberVar { //成员变量:类中,方法外定义 String name;//实例变量 static int age;//类变量 public static void main(String[] args) { System.out.println(age);//结果为 0 TestMemberVar a = new TestMemberVar(); a.test();//结果为null } public void test() { System.out.println(name); } }
成员变量需要自行初始化值
package com.cnblogs; /* * 本类用于测试局部变量 */ public class TestPartVar { public static void main(String[] args) { //定义局部变量 // int num; // System.out.println(num);//这里会提示错误The local variable num may not have been initialized(局部变量num可能尚未初始化) //所以局部变量必须自行初始化值 int num1 = 0; System.out.println(num1);//结果为0 } }
java的局部变量和成员变量是可以重名的,局部变量会覆盖成员变量的值。
package com.cnblogs; /* * 本类用于测试局部变量 */ public class TestPartVar { //定义成员变量 int num = 99;//实例变量 static int num2 = 9;//类变量 public static void main(String[] args) { //定义局部变量 int num = 88; int num2 = 8; System.out.println(num);// 结果为88 System.out.println(num2);// 结果为8 TestPartVar a = new TestPartVar(); a.test();// 结果为66 6 } public void test() { //定义局部变量 int num = 66; System.out.println(num); int num2 = 6; System.out.println(num2); } }