与所有程序设计语言一样,Java 也使用变量 来存储值 。
Java语言是一个 强类型语言 。
所有变量,必须先声明类型 ,后使用 。 指定类型的变量只能装 该类型对应的数据 。
1、定义
【修饰符】类型 field名 = 默认值;
2、变量的声明、赋值、使用、修改
声明 :向栈内存 申请空间 。
对于基本类型 的变量(如:int、float 等),声明时系统会为其分配固定的内存空间。
如:int 类型占用 4 字节,double 类型占用 8 字节。 对于引用类型 的变量(如:对象、数组等),声明时不会直接分配内存来存储数据 。
而是分配一个存储引用值的内存空间。 这个引用指向实际对象 或数组的内存地址 。 赋值 :向内存中填内容 。
new 指令就是向 堆内存申请空间,并为 成员变量 赋予默认值 ,此时对象处于半初始化状态 。
使用 :通过名字调用内存中的值 。修改 :用新的值替代旧的值 。
int vacationDays;
vacationDays = 12 ;
int vacationDays1 = 12 ;
3、局部变量(可以有的修饰符:final)
方法中的 参数 、方法或 语句块内部定义的 变量 。
方法里的局部变量 ,仅在该方法内有效。 代码块里的 局部变量 ,仅在代码块内有效。 形参,在整个方法内有效。
规则:
声明一个局部变量 后,必须用赋值语句 显式地初始化 变量。
在使用局部变量 之前,必须显式初始化 它们,否则将发生编译错误 。
public class Example {
public static void main ( String [ ] args) {
int x;
System . out. println ( x) ;
}
}
在 Java 10 中,如果可以从变量的初始值 推导出变量 的数据类型 。
那么,可以用 var 关键字 声明局部变量 ,而无须指定数据类型 。
即:从等号右边 明显看出数据类型 ,在这种情况下都可以使用 var 表示法。 注意:var 关键字 只能用于方法 中的局部变量 ,参数 和字段 的数据类型 必须声明 。
var date = new Date ( ) ;
4、实例变量 / 对象属性
从有实例开始,实例变量就存在了。 实例被销毁,实例变量就不存在了。 0~N 个,程序每创建 一个实例,系统就为实例变量分配一块内存。
规则:系统会为成员变量执行默认的初始化。
整型初始化为 0 浮点型初始化为 0.0 boolean 类型初始化为 false char 类型的初始化为 ‘\u0000’ 引用数据类型初始化为 null 。
5、类变量 / 静态属性 / 类属性
从类开始,类变量就存在了。 一个 JVM 里,类信息只有一个。 每个 JVM 最多只加载一个类一次,系统只为类变量分配一块内存。
规则:系统会为成员变量执行默认的初始化。
整型初始化为 0 浮点型初始化为 0.0 boolean 类型初始化为 false char 类型的初始化为 ‘\u0000’ 引用数据类型初始化为 null 。
public class AboutNull {
static int staticFiled = 123 ;
int ordinaryFiled = 123 ;
private static void staticMethod ( ) { System . out. println ( "静态方法:staticMethod" ) ; }
private void ordinaryMethod ( ) { System . out. println ( "普通方法:ordinaryMethod" ) ; }
public static void main ( String [ ] args) {
AboutNull aboutNull = null ;
System . out. println ( aboutNull instanceof AboutNull ) ;
aboutNull. staticMethod ( ) ;
System . out. println ( aboutNull. staticFiled) ;
System . out. println ( aboutNull. ordinaryFiled) ;
aboutNull. ordinaryMethod ( ) ;
aboutNull = new AboutNull ( ) ;
System . out. println ( aboutNull instanceof AboutNull ) ;
}
}
注意:当程序通过实例来访问类变量 时----由于类变量本身就不属于实例 。
6、为什么成员变量命名不建议用 isXXX?