1 变量与常量

1.1 变量

1.1.1 声明变量

在Java中,每个变量都有一个类型,在声明变量时,必须先指定变量的类型,然后是变量名。

可以在一行中声明多个同类型变量,但不提倡这种风格。

如下的命名都是合法的:

int num;
double salary;
long earthPopulation;
boolean done;
int i,j;

从上面可以看出,每个声明都以分号结束。

变量名的命名规范:

  1. 必须以字母或者下划线_开头(不能使用单下划线作为变量名),包括26个英文字母大小写,0~9数字,$美元符号,并且不能以Java中的关键字作为变量名,如:public, int, double等等;
  2. 变量名对大小写敏感,在对两个不同的变量命名尽量避免只有大小写的差异;
  3. 尽量保证见名知义,避免用a, b,c 这种没有意义的字母表示变量;
  4. 通常用小写字母表示变量名,但如果是由多个单词组合的,除了第一个单词外每个单词的首字母大写;
  5. 尽管$是一个合法字符,但不要用这个字符,他只用在Java编译器或其它工具生成的名字中。

1.1.2变量初始化

声明一个变量后,必须用赋值语句对变量,不能使用未初始化的变量值。如:

int num;
System.out.println(num);	//ERROR--variable not initialized(变量未初始化)

要对变量进行赋值,就需要使用赋值表达式,如等号(=),对变量初始化的时候,既可以把变量的声明和初始化放在同一行,也可以放在不同行,如下的初始化都是合法的:

int nowadays;
nowadays = 15;
-----------------
int nowadays = 15;

在Java中,变量的声明尽可能靠近第一次使用的地方。

从Java 10开始,对于局部变量,如果可以从变量的初始值推断出它的类型,就不需要再声明类型,只需要使用关键字var而无需指定类型,不过这种方法一般只用于对象:

var i = 13; //var是一个int类型 var j = "name" //var是一个字符串

1.2 常量

在Java中用关键字final指示常量,关键字final表示这个变量只能被赋值一次,一旦赋值后就不能再更改了。在Java中经常希望某个常量可以在一个类的多个方法中使用,通常将这些常量称为类常量,可以用关键字static final设置一个类常量,类常量定义在main方法的外部如下:

public class JavaTest{
    public static final double PPERHEIGHT = 15.1;//该常量可以被该包其他类下的方法使用
    static final double PI = 3.14;//该常量可以被该类下的其他方法使用
    public static void main(String[] args){
        final double PAPERWIDTH = 8.5;	//定义了一个常量,该常量只能在main方法下使用
        int age = 18;					//定义了一个变量age,该变量只能在main方法中使用
        for (int i = 0; i < 10; i++) {
            System.out.println(i);		//定义了一个变量i,该变量只能在for循环使用
    	}
	}
}

习惯上,常量名使用全大写。

一般来说,常量和变量作用范围仅在包含它的大括号中。

1.3 枚举类型

有时候,变量的取值就在一个有限的集合中。例如性别只有男或者女,我们可以设置为1或0,man或者woman,但是这种设置可能出错,如下:

String personSex = "man";
personSex = "HELLO";

很明显我们希望personSex的值是man或者woman,但可能因为错误的输入导致上述情况,很明显,HELLO是一个错误的值,但是编译器却无法发现这种问题,最终导致结果出错。针对这种情况,可以自定义枚举类型,枚举类型包括有限个命名的值,如:

enum Sex {man,woman};
Sex personSex = Sex.man;

Sex类型的变量只能储存这个类型声明给定的枚举值man或者woman,或者特殊值null,null表示这个变量没有设置任何值。