java中的内存空间:栈、堆、全局数据区、全局 代码区

栈:基本数据类型的值、引用类型的地址

堆:引用类型的值

全局数据区:类属性 加了static的属性

全局代码区:所有方法的代码

java语言中 根据变量的位置不同 讲变量分为 成员变量和局部变量

成员变量

在类的范围里面定义的变量 也叫成员属性

成员变量又被分为两种:类属性和实例(对象)属性。定义一个属性时不使用static修饰的就是实例属性;使用static修饰的就是类属性。

类属性的作用域与这个类的生存范围相同,它作为类的一个成员,与类共存亡。只要类存在,程序就可以访问该类的类属性。

实例属性则从这个类的实例(对象)被创建开始存在,直到系统完全销毁这个实例,它作为实例(对象)的一个成员,与实例(对象)共存亡。只要实例存在,程序就可以访问该实例的实例属性。

eg:使用类属性

public class Student{
public String naame;
public int no;
public static String school;
public String className;
public void say(){
System.out.println("学号:"+no+"姓名:"+name+"学校:"+school+"班级:"+className);
}
public Student(String name,int no, String className){
this.name=name;
this.no=no;
this.className=className
}
public static void main(String[] args){
Student s1=new Student("虞姬",1,"12级1班");
Student s2=new Student("安琪拉",2,"12级1班");
Student s3=new Student("小乔",3,"12级2班");
Student.school="王者荣耀学院";
s1.say();
s2.say();
s3.say();
Student.school="王者荣耀大学";
System.out.println("改成后");
s1.say();
s2.say();
s3.say();
} 
}

局部变量

在方法的范围里面定义的变量

局部变量根据定义形式的不同 又可以分为 形参、方法局部变量、代码块局部变量

eg:
public class Test {
//在方法中的变量叫局部变量
public void fun1(int param){//param形参   也是局部变量
int a=10;//方法局部变量
for(int i=0;i<10;i++){//i是代码块 的局部变量
int b=0;//b代码块的局部变量
}
}
}

说明:

与成员变量不同,局部变量除了形参外,都必须初始化(必须赋值)后才可以使用,否则会报错。形参不需要显示初始化,其实在调用方法时实参的值就传给了形参。

public class Test {
public int t;
//在方法中的变量叫局部变量
public void fun1(int param){//param形参   也是局部变量
int a;//方法局部变量
System.out.println(t);//属性可以不用赋值就直接使用,属性有初始值
System.out.println(a);//局部变量除了形参必需初始化后(或赋值)才能使用
for(int i=0;i<10;i++){//i是代码块 的局部变量
int b=0;//b代码块的局部变量
}
}
}

成员变量可以不用初始化,系统会给他们分配默认值。

系统初始值:

byte、short、int、long ----》  0
float、double ----》  0.0
char 
boolean

引用类型

.局部变量使用前,除了形参外都需要显示的初始化。