变量
含义:在程序过程中变量的值会发生变化,直白来说就是用来存储可变化的数据
变量的好处:使内存空间的得到重复利用
举个例子:
1 System.out.println(10); 2 System.out.println(10); 3 System.out.println(10);
这三个10都是字面量,每一个字面量占用的都是不同的内存空间,就算这几个字面量相同,占用的也是不同的空间,字面量的内存是无法重复利用的,这样就浪费了空间,但是使用变量之后,内存空间就得到了重复利用。
变量的三要素:
1. 变量的数据类型(数据类型决定了内存空间的大小)
2. 变量的名字(方便程序访问这个数据)
3. 变量保存的值(保存的数据)
注解:变量必须先声明,再赋值才能访问(没有赋值不能访问, 不然会报错),直白来说变量就是一个存储数据的一个盒子
注意:在同一个域中,变量名不能重名
1 int a = 10; 2 double a = 10.01 3 //重名了 不能编译成功
变量的分类
变量分为局部变量、成员变量。成员变量又分为实例变量(属性)和静态变量
在方法体内声明的变量为:局部变量(在方法结束后,局部变量的内存空间就释放了)
在类中,方法外声明的变量为成员变量,对于实例变量来说,声明了没有手动赋值,调用的时候系统默认赋值
类型 | 默认值 |
---|---|
byte、short、int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 |
boolean | false |
char | ' ' |
引用数据类型 |
注解:实例变量不能通过"类名."来访问
实例变量前加上修饰列表符static就成为了静态变量,static是不允许用来修饰局部变量的。
原因:被static关键字修饰变量随着类的加载而加载,被static修饰的变量成为了类变量 ,可以用类直接调用, 即作用域为全局,而局部变量在方法内,它的作用域在方法内,作用域变了,所以不允许用来修饰局部变量。
静态变量: 在类加载时初始化,分配空间
局部变量:在方法执行过程中分配空间
实例变量:构造方法执行、对象创建时分配空间
常量有三种类型:静态常量、成员常量、局部常量、字面值常量
字面值常量:
-
1 System.out.println(222); 2 System.out.println(-111);
-
浮点型常量
1 System.out.println(3.14); 2 System.out.println(3.1f);
-
字符常量
System.out.println('a');
System.out.println('f');
-
字符串型常量
1 System.out.println("zhangsan"); 2 System.out.println("123456");
-
布尔类型常量
1 System.out.println(false); 2 System.out.println(true);
-
- 在定义常量时就需要对该常量进行初始化,常量的值是不可改变的量、一次赋值,永不改变,也可以不用在声明时就初始化,但是初始化后必须在使用这个常量之前初始化。
- final修饰的实例变量必须手动初始化,不能采用系统默认值
静态常量:被static和final修饰的成员变量
注解:在定义静态常量时,就必须初始化,不然会报错
例如下面的代码:
1 public class Test { 2 final static int i = 100; 3 public static void main(String[] args) { 4 System.out.println(i); 5 } 6 }
成员常量:被final修饰的成员变量
注解:当常量是成员常量时,在定义的时候必须初始化,不然编译会报错
例如下面的代码:
1 public class Test { 2 final int i = 100; 3 public static void main(String[] args) { 4 Test test = new Test(); 5 System.out.println(test.i); 6 } 7 }
局部常量:被final修饰的局部变量
例如下面的代码:
1 public class Test { 2 public static void main(String[] args) { 3 final int i = 100; 4 System.out.println(i); 5 } 6 }