14-变量和声明变量
在程序执行过程中,其值不能改变的量成为常量,其值能被改变的量称为变量。变量和常量声明都必须使用合法的标识符,所有变量和常量只能在声明之后使用。
刻录光盘类比
可读可写(变量)
写一次就不能再写,但是可以读(常量)
声明变量
定义一个变量,就是告诉编译器这个变量属于哪种类型,只有这样编译器才能知道需要配置多少空间,内存空间内的值就是变量值。在声明变量时可以不给赋值,也可以直接赋初值。
int i; //声明变量没有初始化值
char c = 'a'; //声明变量并且给变量赋值Code language: JavaScript (javascript)
内存区域
内存大致分为三个区域:系统区OS、程序区Program、数据区Data。当程序执行时,程序代码会加载到内存中的程序区,数据暂时存在数据区中。
声明一个变量 先不初始化 然后赋值 之后使用
int age;
age = 123;
System.out.println("年龄是" + age);Code language: JavaScript (javascript)
各种变量声明示例
boolean b = true;
int i = 1;
float f = 1.1f;
double d = 1.2;
char c = 'a'; //声明同时赋值
byte be; //单单声明 没有赋值
be = 1; //赋值可以在后面重新赋值
short sh = 12;
System.out.println("你的年龄是:" + sh);Code language: JavaScript (javascript)
15-常量和声明常量
在程序运行过程中,一直不会改变的量成为常量,通常被成为final变量。常量在整个程序中只能被赋值一次。Java中声明常量和变量类型类似,只是在前面加一个final。
final double PI = 3.1415926;Code language: PHP (php)
常量的名称通常使用大写,但不是必需的。常量通常是在编译的时候被编译器替换成它的值。常量的目的是方便我们改一处地方,处处被改。比如圆周率在很多地方都用到,统一在一个地方定义它,其他地方统一调用它。
final int I = 12; //声明常量和变量类似 只是在前面加个final关键字 并且通常常量名称用大写
//I = 123; //常量一旦第二次给它赋值 就会报错 就好比刻录光盘
final float PI; //常量也有类型的
PI = 3.1415626F; //赋值可以分开 但是必须是第一次
System.out.println(PI);
//PI = 3.1415626927F; //常量只能赋值一次Code language: PHP (php)
常量定义成成员常量
public class Image {
static final float PI = 3.141592f;
public static void main(String[] args) {
System.out.println(PI * 1.2 * 1.2);
//PI = 3.1415626927F; //常量只能赋值一次
}
}Code language: PHP (php)
16-变量的有效范围
变量的有效范围是指程序代码能够访问该变量的区域。如果超出了它的范围去访问它,编译的时候就会报错。一般根据变量的访问区域,将变量分为成员变量和局部变量。
成员变量
在类体中定义的变量称为成员变量,成员变量在整个类中都有效。类的成员变量分为静态变量和实例变量两种。
static float pi = 3.141592f; //成员变量 属于类体里面定义Code language: JavaScript (javascript)
静态成员不能访问非静态成员(包括变量和方法),如果要访问必须new对象。静态变量也叫类变量,在变量前面加static关键字。静态变量的有效范围是可以跨类的,甚至整个应用程序之内都可以访问。静态变量在类内部可以直接通过名称访问,在类的外部可以通过”类名.静态变量”来访问。
局部变量
在类的方法体中定义的变量,方法体是{}中间。局部变量只在当前代码块中有效。局部变量的声明周期取决于方法,方法被调用时,java虚拟机为方法中的局部变量分配内存空间,当该方法的调用结束后,则会释放方法中局部变量占用的空间,局部变量也随着被销毁。
练一练
创建一个类,有静态成员变量和一个局部变量,它们是同名的,然后输出它们的值。
注意:当成员变量和局部变量同名时,当在方法内部访问这个变量的时候默认是局部变量,成员变量会被隐藏失效。如果要访问它则需要”类名.静态变量”。
变量的有效访问示例
public class Image {
static float pi = 3.141592f; //成员变量 属于类体里面定义
public static void main(String[] args) {
System.out.println(pi * 1.2 * 1.2);
int a = 12; //局部变量 是属于类体里面的方法体的变量 它的作用范围只是在方法体里面
ShowInt();
System.out.println(Image.pi2);
System.out.println(new Image().pi3);
float pi = 123.4f; //同名的话 会把成员变量 屏蔽了
System.out.println(pi * 1.2 * 1.2); //直接用pi的时候 默认是上面的这个局部变量 而不是外面的
System.out.println(Image.pi * 1.2 * 1.2);
}
public static void ShowInt() {
System.out.println(pi * 1.2 * 1.2);
//int b = a + 10;
System.out.println(pi2 * 1.2 * 1.2); //在方法里面 可以访问成员变量 和顺序没有关系
//因为我们的方法 是调用的时候 成员变量 已经创建了
}
//static float pi3 = pi2; //成员变量的也有顺序的
static float pi2 = pi; //成员变量 可以互相访问 static修饰的成员变量 是静态变量 Image.pi2;
float pi3 = pi2 * 2; //这是实例成员变量 Image i = new Image(); i.pi3;
}Code language: JavaScript (javascript)