Java 程序设计基础之 Java 变量
变(常)量——Java 程序中最基础的元素。我们在前面提到过,Java 字面值是 Java 数据具体、直观的表现,就是一个具体的值。事实上, Java 中字面值的主要功能就是来给变量、常量进行赋值用的。程序设计语言中变量的引入是至关重要的,有了变量后续的一切才是有意义的。
Java 变量
什么是变量
变量你可以将其看成是一个个带有名字的小盒子,用来存放我们的数据(字面值),方便后续在程序中引用(使用),这是有意义的。
严格来说,
在 Java 中,变量是指向计算机内存中的某一存储区域的引用,该区域有自己的名称(变量名)和数据类型(变量类型)。
事实上,变量的类型是,变量所指向的存储区域中所存储数据的类型。
该区域的数据可以在同一类型范围内不断的变化~
变量定义
Java 语言是强类型(Strongly Typed)语言,强类型包含以下两方面的含义:
- 所有的变量必须先定义(声明)、后使用
- 指定数据类型的变量只能接受类型与之匹配的值
定义(声明)变量,就是要告诉编译器这个变量的数据类型,和变量的名称,编译器才知道它能存放什么样的数据,需要分配多少空间给它,以及如何找到它。
1 –> 声明变量
在 java 中用户可以通过指定数据类型和标识符来声明变量,其基本语法如下所示:
DataType identifier;
或者:
DataType identifier=value;
注意:同一代码块范围内不允许有多个相同命名的变量。
2 –> 初始化变量
初始化变量是指为变量指定一个明确的初始值,变量声明后并不会分配内存空间,只有赋值之后才会分配内存。
初始化变量有两种方式:
- 声明时直接赋值
- 先声明、后赋值。
1 | // 声明时直接赋值 |
多个同类型的变量可以同时定义或者初始化,但是多个变量中间要使用逗号分隔,声明结束时用分号分隔。
1 | # Java 编码规范中不推荐使用 |
Java 中初始化变量时需要注意以下事项:
- 变量是类或者结构中的字段(属性),如果没有显式地初始化,默认状态下会创建变量并初始化为【默认值】,默认值见:【数据类型默认值对照表】。
- 方法中的变量必须显式地初始化,否则在 使用该变量时 就会出错
常量
常量,一种特殊的变量!
当使用 final 关键字来修饰一个变量时,就成为一个 常量,也称为 final 变量。Java 语言使用 final 关键字来定义一个常量,其语法如下所示:
final dataType variableName = value
常量有很多种说法,比如不能改变等等。但更为准确的描述是:
当一个变量被 final 修饰的时候,该变量 只有一次赋值的机会!!!
==========================================
You Need Know More:
- final 关键字不仅可以用来修饰基本数据类型的常量(或引用类型的变量),还可以用来修饰类、和方法。
- 当定义的 final 变量为成员变量(类或结构中的属性)时,必须在定义时就设定它的初始值(没有显式初始化,会被隐式初始化为0),如果再次对其进行赋值将会提示编译错误
- 当定义的 final 变量为方法中的局部变量时,则需要开发者在声明后,第一次使用该变量之前,显式的赋初始值,实例化该变量
Java 中 final 修饰符的用法详细见:Java 中的 final 修饰符,你可以看到 final 修饰类,方法的使用场景。
变量的作用域
变量的作用域,也称为:变量的有效范围。
变量的有效范围是指:程序代码中能够访问该变量的区域,若超出该区域进行访问,则在编译时会出现错误。
在程序中,一般会根据变量的有效范围将变量划分为:
- 成员变量
- 局部变量
成员变量
成员变量是指:定义在类下面,不属于任何一个方法的变量。
别名:字段,属性,Field
作用域是:从变量声明的位置开始,整个类都可以访问得到
类中的成员变量,根据是否有无 static 修饰符修饰,可以分为:
1 –> 实例变量
无 static 修饰符修饰;访问方式:对象名.变量名;生命周期:只要对象被当作引用,实例变量就将存在。
2 –> 类变量(静态变量)
有 static 修饰符修饰;访问方式:类名.变量名(推荐,编码规范),或对象名.变量名;生命周期:其生命周期取决于类的生命周期,类被垃圾回收机制彻底回收时才会被销毁。
注意:Java 中 static 关键字只作用于成员变量,局部变量无法使用 static 修饰。
示例代码如下:
变量声明代码如下所示:
1 | public class DataTest { |
测试类代码如下所示:
1 | public class HelloJava { |
上面,name 和 age 显示系统默认初始化的值,website 和 URL 显示初始化的值。且用 static final 修饰的变量必须赋予初始值。
关于 static 修饰符的用法详细见:Java 中的 static 修饰符。
局部变量
局部变量是指:在方法或者方法代码块中定义的变量。
别名:参数
根据其所处的位置可以分为三种:
1 –> 方法局部变量(方法内定义)
作用域是:从定义这个变量开始到方法结束这一段时间内有效。
2 –> 方法参数变量(形参)
作用域是:整个方法内均有效。局部变量在使用前必须主动初始化值。
3 –> 代码块局部变量(代码块内定义)
作用域是:从定义这个变量开始到代码块结束这一段时间内有效。
观察下面程序是否可正常运行:
1 | public class HelloJava { |
重名问题
想象一种场景:如果局部变量和成员变量重名,那么在方法中调用打印标识符时,显示的是局部变量的值,还是成员变量的值?
java 采用局部优先的思想。局部变量可以和成员变量相同,使用标识符调用时,优先使用局部变量。想调用成员变量怎么办?如果该变量是实例变量,可使用 this.变量名,否者可使用 类.变量名。
数据类型默认值对照表
数据类型 | 初始值 |
---|---|
boolean | false |
char | ‘/uoooo’(null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
引用型(String等) | null |
注:引用型数据类型包括:类(class)、接口(interface)、数组(Array)、字符串(String),默认值都为 null。
install_url
to use ShareThis. Please set it in _config.yml
.