Java基础笔记23——3种变量
Java中主要有3种类型的变量:
1.静态变量:在类中声明为static的属性 --老大,无私贡献
属于类级别的变量,在类被加载的时候即保存在内存,只要类存在,静态变量就存在,属于共享变量
2.实例变量:即类的属性,也是全局变量 --老二,相对自私,所有东西自己专有
属于对象级别的变量,在new对象的时候存在内存当中,只要对象存在,实例变量就存在,属于对象专有的变量
3.局部变量:定义在方法体中的变量;或是方法的形参 --老三,一直跟着方法跑,方法被调用,老三在;方法调用完成,老三不见了
当方法被调用时,局部变量即保存在内存中;当方法执行结束,局部变量生命周期结束
4.栈和堆:栈stack:栈的存放速度比堆快,效率高。在栈内保存基本数据类型的局部变量和对象的引用值
堆heap:堆可以保存那些对空间要求较大的变量。如对象的属性和数组的元素
5.匿名对象:不定义对象的句柄,直接调用对象的方法,适用于对象只需要使用一次的场景
new 类名().方法名()
6.对象何时变成垃圾:
(1)对象的引用被赋值为null,例如:Person p = new Person(); p = null;
(2)一次性使用的匿名对象:例如,new Person().saidHello();
(3)超出生命周期的:
例如:
for(int i = 0; i < 100; i++){
Person p = new Person();
}
7.例子:
package com.lqh.chapter01; public class _21variables { /* 静态变量:在类中声明为static的属性 属于类级别的变量,在类被加载的时候即保存在内存,只要类存在,静态变量就存在,属于共享变量 */ static String identity = "human"; /* 实例变量:即类的属性,也是全局变量 属于对象级别的变量,在new对象的时候存在内存当中,只要对象存在,实例变量就存在,属于对象专有的变量 */ String name; /*局部变量:定义在方法中的变量,或是方法的形参 当方法被调用时,局部变量即保存在内存中;当方法执行结束,局部变量生命周期结束 */ public void setName(String name) { //name为局部变量 this.name = name; } public static void main(String[] args) { _21variables tom = new _21variables(); tom.name = "汤姆"; tom.setName("superTom"); tom.identity = "superHuman"; System.out.println(tom.name); System.out.println(tom.identity); _21variables john = new _21variables(); john.name = "约翰"; System.out.println(john.name); System.out.println(john.identity);//tom修改了identity的值,john再获取到的值是修改后的值 //匿名对象 new _21variables().setName("匿名对象"); } }
输出结果为:
superTom
superHuman
约翰
superHuman