疯狂JAVA5.3
成员变量和局部变量
package com.crazyJava.chacpter03.Methods;
/**
* @ClassName: VariableTest
* @Description:成员变量和局部变量
* @Author: 01412126
* @Date: 2022/1/25 9:33
*/
/*
* 变量分为成员变量和局部变量
* 成员变量:类变量和实例变量,其作用范围是整个类
*
* 局部变量:形参(方法签名中定义的变量)其作用范围是整个方法
* 方法局部变量(方法内部定义的变量)其作用范围是从定义该变量的地方到方法结束
* 和代码块局部变量(代码块内部定义的变量)其作用范围是从定义该变量的地方到代码块结束
*
* 类变量的生存周期与这个类是一起的,实例变量的生存周期与这个实例是一起的
*
*
* */
class Person{
/*
* 成员变量不需要显示地初始化
* */
public static String name;
public Integer age;
}
public class VariableTest {
public void say(){
{
/*
* 局部变量必须显示地初始化,
* 但是形参无需显式地赋值
* */
int b = 0;
System.out.println(b);
}
/*
* 局部变量必须显示地初始化
* */
int a = 0;
System.out.println(a);
}
public static void main(String[] args) {
System.out.println(Person.name);
Person p = new Person();
p.age = 12;
p.name = "dd";
Person p1 = new Person();
System.out.println(p1.name);
/*
* 想验证的就是当使用实例去调用类变量的时候,其实最后还是使用了类去调用类变量
* 所以使用另一个实例去调用类变量的时候给出的是修改过后的类变量
* 不支持用实例访问类变量
* */
}
}
成员变量初始化和内存中的运行机制
package com.crazyJava.chacpter03.Methods;
/**
* @ClassName: FileVariable
* @Description:成员变量的初始化和内存中的运行机制
* @Author: 01412126
* @Date: 2022/1/25 10:39
*/
public class FileVariable {
public static void main(String[] args) throws ClassNotFoundException {
/*
* 首先new Person()如果是第一次使用Person类的话,就会在堆内存里面创建一个Person类,Person类里面只有类变量name
* 其默认值是null,然后又在创建了一个person对象并在栈内存里面添加了p1变量,p1指向这个person对象,这个person对象里面
* 只有age的属性且默认值为0。
* */
Person p1 = new Person();
Person p2 = new Person();
p1.name = "zhangsan";
p2.name = "lisi";
p1.age = 2;
p2.age = 3;
Class.forName("java.lang.String");
}
}
局部变量的初始化和内存中的运行机制
/* * 局部变量必须显式地赋值,因为系统不会为局部变量初始化。这意味着定义这个局部变量后, * 系统并没有为这个局部变量分配内存空间,直到程序为这个局部变量赋值时系统才为它分配内存空间。 * * 与成员变量不同它不属于任何类或实例,所以它总是存放在其所在方法的栈内存里面的。 * * 它的生命周期是随着方法的结束而结束,栈内存无需进行垃圾回收。 * * 因为局部变量只保存基本类型的值或对象的引用,所以一般它所占的空间较小。 * * */
成员变量和局部变量的内存机制这一块详解见疯狂JAVA18章和深入理解JVM,接下来需要单独理这一块。