栈,堆,变量,常量

2017-05-07  本文已影响0人  云承寒
两类数据类型
栈内存
for(//作用域){
  //局部变量,随域一次循环结束,释放。
}
if(){
 //作用域
}
Person p1 = new Person();
Person p2 = new Person();
p1 = p2; 
//p1,p2即存放在栈内存中的引用地址,指向堆内存中开辟的对象空间。
//p1 = p2; 改变的是引用地址的指向(内存地址)。
//即p1在栈内存中的引用变为p2,而不是堆内存中开辟的p2空间覆盖p1空间。

new 做的三件事
1.在内存(堆内存)中开辟一块空间。
2.在开辟的空间中创建对象。
3.调用对象的构造函数初始化对象。
堆内存
方法区

成员变量与局部变量的区别
成员变量 局部变量
定义位置 当前类中 函数中
应用范围 所在类中任何位置都有效 形参,函数作用域内
生命周期 跟随对象创建,消失 跟随作用域创建,消失
存储位置 堆内存 栈内存
初始值 若new时没有赋值,将赋默认值 无默认值,想使用必须指定赋初值
static
class Demo{
    public static int sTest = 1;
    public static String mStr = "Test log";

    public static void test(){
        只能调用静态成员,不能用this,super,原因:静态生命周期
        System.out.println(mStr);
    }
}

调用方式
public static void main(String[] args) {
        Demo.test();
        System.out.println(Demo.sTest);
}
final
class Demo{
    final修饰的常量不会被初始化,必须手动赋初值,只能赋值一次
    命名规则:所有字母都大写,如果由多个单词组成,单词间通过 _ 连接。
    final public static int S_TEST = 1;

    final修饰的函数不能被继承,重写
    final public static void test(){
        System.out.println("Test log");
    }
}

内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。

上一篇 下一篇

猜你喜欢

热点阅读