[TOC]
# 变量
在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。
在实际的程序中,可以根据数据在程序运行中是否发生改变,来选择应该是使用变量代表还是常量代表。
## 变量定义
数据类型 变量名称
~~~
int=4;
~~~
## 变量作用域
类变量:独立于方法之外的变量,用 static 修饰。
实例变量:独立于方法之外的变量,不过没有 static 修饰。
局部变量:类的方法中的变量。
~~~
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}
~~~
#### 局部变量
* 局部变量是在栈上分配
* 局部变量只在声明它的方法、语句块中可见;
* 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
* 局部变量在方法或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁
#### 实例变量
* 在堆上分配
* public 能够被任何其他类访问 private 只能被所属类访问*
* 当一个对象被实例化之后创建,在对象被销毁的时候销毁,或者垃圾回收.
* 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null.变量的值可以在声明时指定,也可以在构造方法中指定;
* *实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名ObejectReference.VariableName。
#### 类变量
* 在方法区(静态区)分配
* 与实例变量具有相似的可见性。
* 静态变量在程序开始时创建,在程序结束时销毁。
* 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
# 常量
### 常量定义
不变的变量
final 数据类型 常量名称 = 值;
> Java编码规范中,要求常量名必须大写。
# 直接量
直接量是指在程序中直接通过源代码的方式指定的值,有时也成为字面量。
~~~
int b = 10; //b为常量,10为字面量
~~~
> 在编译的时候,JVM 就定义到常量池中。
* int 默认 12
* long 加L
* float 加F
* double 12.8默认
* boolean 布尔直接量true、false
* char 单引号内的单个字符
* String 双引号内的字符序列
> 错误的字面量
比int的最大值还要大1的直接量2147483648是错误的,因为超过int表示的范围,应该使用2147483648L表示