Java变量按其作用域可分为:成员变量和局部变量。注意:在Java中是没有全局变量这个概念的
一、成员变量:
成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰
实例变量的特点:
没有创建实例前是不会分配内存空间的;
从有实例开始,实例变量就存在了;
实例被销毁,实例变量就不存在了;
0~N个实例变量,程序每创建一个实例,系统就为该实例分配一块内存
类变量的特点:
从有类开始,类变量就存在了,一个JVM中类信息只要一个即可。
每个JVM最多只加载一个类一次,系统就为该类分配一块内存.(加载类或创建对象时即会加载类变量)
成员变量规则:
系统会为成员变量执行默认的初始化: 基本类型初始值为0、0.0、u00000、false;引用类型初始值为null
注意点:当程序通过实例来访问类变量的时候,由于类变量本身不属于实例因此底层实际上委托为通过类来访问。
1 class Var{ 2 String name; 3 int age; //实例变量 4 static int num;//类变量 5 }
1 public class TestVar{ 2 public static void main(String[] args){ 3 //Var v; //编译时报v变量未被初始化 4 //Var v = null; //当v为null时去调用num则会报空指针异常 5 Var v = new Var() ;//实例变量必须由程序员初始化 6 System.out.println(v.num); 7 8 Var v2 = new Var(); 9 v.age = 11; 10 System.out.println(v2.age); 11 v.num = 99; 12 System.out.println(v.num); //→ System.out.println(Var.num); 当程序通过实例来访问类变量时实际上都是通过类来访问的 13 } 14 }
二、局部变量:
局部变量是保存在相应的方法栈中的。
局部变量规则:
局部变量必须由程序员来赋值,系统不会对局部变量进行默认初始化
局部变量绝对不允许同名。一个方法内方法内变量名不能与方法中代码块的变量名相同,但两个代码块中允许出现同名的局部变量
局部变量只在代码块内有效,出了代码块则无效,形参则在当前方法内都是有效的
1 public class LocalVar { 2 public void info(String name){ 3 String s = "haha"; 4 //String name = "haha"; 编译报错 方法内参数名不能与形参相同 5 { 6 //String s = "test"; //同一个方法中,方法块中的变量名不能与方法中的变量相同 7 String s1 = "test"; 8 System.out.println(s1); 9 } 10 { 11 String s1 = "LocalTest"; 12 System.out.println(s1); 13 } 14 } 15 16 public static void main(String[] args){ 17 String s = "test"; //不同方法中,方法名是可以相同的 - 因为局部变量只在方法内有效 18 LocalVar v2 = new LocalVar(); 19 v2.info("avv"); 20 } 21 }