变量
1、变量是用来存储数据的,代表了一块内存区域。
2、变量有三个要素:
(1)数据类型
(2)变量名
(3)变量值
数据类型:可以是Java的8种基本数据类型,也可以是Java的引用数据类型(包括数组、类等)
变量值:如果是基本数据类型,那么变量中存储的是数据值,
如果是引用数据类型,那么变量中存储的是地址值。
3、给变量赋值
基本数据类型:赋基本数据类型的值 int i = 1;
会有一个自动类型转换的过程 double d = 1;//自动类型提升
引用数据类型:必须给他new对象 MyDemo my = new MyDemo();
String str = "hello"; "hello"也是一个对象
4、变量根据声明位置不同,可以分为:
(1)成员变量:类中方法外面声明
(2)局部变量:方法中声明 方法的()中形参列表,方法体的{}中
5、成员变量和局部变量的区别
(1)声明位置不同
(2)内存中的位置不同
成员变量:
静态成员变量:方法区
非静态的成员变量:堆
局部变量:栈
(3)生命周期不同
成员变量:
静态成员变量:最长 随着类的加载和初始化而初始化,或者静态变量的生命周期 = 类的生命周期
非静态的成员变量:中等 每一个对象的实例变量的生命周期= 对象的生命周期
当new一个对象时,该对象的实例变量/非静态成员变量就分配内存,
当对象被GC回收后,内存释放。
局部变量:短命 每一次方法调用,局部变量都是独立,随着方法调用在栈中分配它的内存,方法调用结束,内存就自动释放。
(4)作用域
成员变量:
静态成员变量:在本类中任意位置都可见
非静态的成员变量:只能在本类的非静态方法中可以用
因为本类中静态的不能直接使用非静态(*****)
局部变量:作用域是非常小的,从声明处开始,到它所属的{}就结束了,
可能是作用域在一个方法中,可能只是某个if的{},可能是某个for{}中
(5)初始化的方式不同
成员变量:
如果没有手动初始化,会有默认值。
静态成员变量:在类初始化时完成。(早)
非静态成员变量:在new对象时完成。(晚)
局部变量:
必须手动初始化。
形参的初始化是发生在方法调用时,由实参给形参初始化。
方法体中的局部变量,必须手动