java 语言是强类型(Strongly Typed)语言,强类型包含以下两方面的含义:
- 所有的变量必须先声明、后使用。
- 指定类型的变量只能接受类型与之匹配的值。
这意味着每个变量和每个表达式都有一个在编译时就确定的类型。类型限制了一个变量能被赋的值,限制了一个表达式可以产生的值,限制了在这些值上可以进行的操作,并确定了这些操作的含义。
常量和变量是 Java 程序中最基础的两个元素。常量的值是不能被修改的,而变量的值在程序运行期间可以被修改。本文详细介绍 Java 中变量的声明和赋值方法。
声明变量
对开发人员来说,变量是用来描述一条信息的别名,可以在程序代码中使用一个或多个变量。变量中可以存储各种类型的信息,如登录信息、版本名称、文件的大小、某个英文单词以及飞机票价格等。
在 java 中用户可以通过指定数据类型和标识符来声明变量,其基本语法如下所示:
DataType identifier;
或者
DataType identifier=value;
上述语法代码中涉及 3 个内容:DataType、 identifier 和 value,其具体说明如下:
- DataType:变量类型,如 int、string、 char 和 double 等。
- identifier:标识符,也叫变量名称。
- value:声明变量时的值。
变量标识符的命名规范如下:
- 首字符必须是字母、下划线(―)、美元符号($)或者人民币符号(¥)。
- 标识符由数字(0~9)、大写字母(A~Z)、小写字母(a~z)、下划线(―)、美元符号($)、人民币符号(¥)以及所有在十六进制 0xc0 前的 ASCII 码组成。
- 不能把关键字、保留字作为标识符。
- 标识符的长度没有限制。
- 标识符区分大小写。
如下代码分别声明了 String、boolean 和 int 类型的变量。
- String employee; // String 类型的变量
- boolean isSave; // boolean 类型的变量
- int create_at; // int 类型的变量
变量赋值
初始化变量是指为变量指定一个明确的初始值。初始化变量有两种方式:一种是声明时直接赋值,一种是先声明、后赋值。如下代码分别使用两种方式对变量进行了初始化。
- char usersex='女'; // 直接赋值
或者
- String username; // 先声明
- username ="琪琪"; // 后赋值
另外,多个同类型的变量可以同时定义或者初始化,但是多个变量中间要使用逗号分隔,声明结束时用分号分隔。
- String username,address,phone,tel; // 声明多个变量
- int num1=12,num2=23,result=35; // 声明并初始化多个变量
Java 中初始化变量时需要注意以下事项:
- 变量是类或者结构中的字段,如果没有显式地初始化,默认状态下创建变量并默认初始值为 0。
- 方法中的变量必须显式地初始化,否则在使用该变量时就会出错。
变量的作用域规定了变量所能使用的范围,只有在作用域范围内变量才能被使用。根据变量声明地点的不同,变量的作用域也不同。
根据作用域的不同,一般将变量分为不同的类型:成员变量和局部变量。下面对这几种变量进行详细说明。
成员变量
java 的成员变量有两种,分别是全局变量和静态变量(类变量)。定义在方法体和语句块之外,不属于任何一个方法,作用域是整个类。
名称 | 修饰 | 访问 | 生命周期 |
---|---|---|---|
全局变量(实例变量) | 无 static 修饰 | 对象名.变量名 | 只要对象被当作引用,实例变量就将存在 |
静态变量(类变量) | 用 static 修饰 | 类名.变量名或对象名.变量名 | 其生命周期取决于类的生命周期。类被垃圾回收机制彻底回收时才会被销毁 |
假设在一个类中声明了 4 个变量,下面编写一个测试类输出引起变量的值改变的示例代码。
变量声明代码如下所示:
- public class DataClass {
- String name; // 成员变量、实例变量
- int age; // 成员变量、实例变量
- static final String website = "CSDN网"; // 成员变量、静态变量(类变量)
- static String URL = "http://csdn.net"; // 成员变量、静态变量(类变量)
- }
测试类代码如下所示:
- public class Test {
- public static void main(String[] args) {
- // 创建类的对象
- DataClass dc = new DataClass();
- // 对象名.变量名调用实例变量(全局变量)
- System.out.println(dc.name);
- System.out.println(dc.age);
- // 对象名.变量名调用静态变量(类变量)
- System.out.println(dc.website);
- System.out.println(dc.URL);
- // 类名.变量名调用静态变量(类变量)
- System.out.println(DataClass.website);
- System.out.println(DataClass.URL);
- }
- }
在本例的第一段代码中定义了 4 个成员变量,由输出结果可以看出,name 和 age 显示系统默认初始化的值,website 和 URL 显示初始化的值。且用 static final 修饰的变量必须赋予初始值。
局部变量
局部变量是指在方法或者方法代码块中定义的变量,其作用域是其所在的代码块。可分为以下三种:
- 方法参数变量(形参):在整个方法内有效。
- 方法局部变量(方法内定义): 从定义这个变量开始到方法结束这一段时间内有效。
- 代码块局部变量(代码块内定义):从定义这个变量开始到代码块结束这一段时间内有效。
局部变量在使用前必须被程序员主动初始化值。
1)方法局部变量
声明两个局部变量并输出其值,其实现代码如下:
- public class Test2 {
- public static void main(String[] args) {
- int a = 7;
- if (5 > 3) {
- int s = 3; // 声明一个 int 类型的局部变量
- System.out.println("s=" + s);
- System.out.println("a=" + a);
- }
- System.out.println("a=" + a);
- }
- }
上述实例中定义了 a 和 s 两个局部变星,其中 int 类型的 a 的作用域是整个 main() 方法,而 int 类型的变量 s 的作用域是 if 语句的代码块内,其执行结果如图 2 所示:
图 2 运行结果
如果在 if 方法外调用变量 s,则会报无法解析该变量的错误。
2)方法参数变量
作为方法参数声明的变量的作用域是整个方法。
声明一个方法参数变量,实现代码如下:
- public class Test3 {
- public static void testFun(int n) {
- System.out.println("n=" + n);
- }
- public static void main(String[] args) {
- testFun(3);
- }
- }
在上述实例中定义了一个 testFun() 方法,该方法中包含一个 int 类型的参数变量 n,其作用域是 testFun() 方法体内。当调用方法时传递进了一个参数 3,因此其输出控制台的 n 值是 3。
3)代码块局部变量
代码块局部变量常用于 try catch 代码块中,成为异常处理参数变量。
异常处理参数变量的作用域是在异常处理块中,该变量是将异常处理参数传递给异常处理块,与方法参数变量类似。
声明一个异常处理语句,实现代码如下:
- public class Test4 {
- public static void test() {
- try {
- System.out.println("Hello!Exception!");
- } catch (Exception e) { // 异常处理块,参数为 Exception 类型
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- test();
- }
- }
在上述实例中定义了异常处理语句,异常处理块 catch 的参数为 Exception 类型的变量 e,作用域是整个 catch 块。