Java SE 是什么,包括哪些内容(十二)?
本文内容参考自Java8标准
本篇博文描述的都是有关Java成员初始化的问题
Java尽力保证:所有的变量在初始化前,都能得到正确的初始化。
1、Java局部变量初始化(强制初始化)
局部变量就是存在于Java代码块以及方法中的变量。
Java通过编译期错误的形式来保证局部变量的正确初始化。
代码示例:
i是局部变量,为初始化就直接进行自增操作,Java编译器直接报错。
初始化后能通过编译:
本来编译器可以给局部变量默认赋一个初始值,但是未初始化局部变量更有可能是程序员的一个疏忽,如果直接赋默认值,可能会掩盖这种错误,因此强制程序员提供一个初始值,往往能够找出程序中的缺陷。
2、类成员变量初始化(默认初始化)
如果是类成员变量,那么情况就会变得不同,正如前面博文中提到的一样:类成员,Java能确保它们在使用前都会有初始值,不要求程序员强制赋值,如果程序员忘记初始化(赋值)操作,Java会给类成员赋一个默认值。
⑴、每种基本类型都会有自己对应的默认初始值。
代码示例:每种基本类型的默认初始值分别是什么:
// 每种基本类型的默认初始值分别是什么。
//类名称InitialValues
public class InitialValues {
//boolean类型类变量。
boolean t;
//char类型类变量。
char c;
//byte类型类变量。
byte b;
//short类型类变量。
short s;
//int类型类变量。
int i;
//long类型类变量。
long l;
//float类型类变量。
float f;
//double类型类变量。
double d;
//方法printInitialValues()
void printInitialValues() {
//打印字符串"Data type Initial value"(中间的空白是有效的)
System.out.println("Data type Initial value");
//打印boolean类型的默认初始值(中间的空白是有效的)
System.out.println("boolean "+t);
//打印char类型的默认初始值(中间的空白是有效的)
System.out.println("char ["+c+"]");
//打印byte类型的默认初始值(中间的空白是有效的)
System.out.println("byte "+b);
//打印short类型的默认初始值(中间的空白是有效的)
System.out.println("short "+s);
//打印int类型的默认初始值(中间的空白是有效的)
System.out.println("int "+i);
//打印long 类型的默认初始值(中间的空白是有效的)
System.out.println("long "+l);
//打印float类型的默认初始值(中间的空白是有效的)
System.out.println("float "+f);
//打印double类型的默认初始值(中间的空白是有效的)
System.out.println("double "+d);
}
//程序的执行入口main方法
public static void main(String[] args) {
//创建对象
InitialValues iv = new InitialValues();
//调用方法
iv.printInitialValues();
}
}
以上代码的执行结果:
可见,尽管没有给这些数据成员进行初始化,但是他们确实有了初始值。
有一点需要强调一下,char类型的默认初始值是0,所以结果是空白。
⑵、引用类型的默认初始值是:“null”。
代码示例:引用类型的默认初始值分别是什么:
// 引用类型的默认初始值分别是什么
//类名称InitialValues
public class InitialValues {
//引用类型类变量。
InitialValues reference;
//方法printInitialValues()
void printInitialValues() {
//打印引用类型的默认初始值(中间的空白是有效的)
System.out.println("reference "+reference);
}
//程序的执行入口main方法
public static void main(String[] args) {
//创建对象
InitialValues iv = new InitialValues();
//调用方法
iv.printInitialValues();
}
}
以上代码的执行结果:
在类里定义一个对象引用时,如果不将其初始化,此引用就会获得一个特殊值null。
3、类成员变量初始化(指定初始化)
如果想为某个变量赋初始值,有一种很直接的办法,就是在定义变量的时候直接赋值(C++中是不允许这样做的)。
代码示例:
// 每种基本类型的默认初始值分别是什么。
//类名称InitialValues
public class InitialValues {
//boolean类型类变量。
boolean t = true;
//char类型类变量。
char c = 'x';
//byte类型类变量。
byte b = 47;
//short类型类变量,初始化的形式为八进制,还能以二进制和十六进制进行初始化。
short s = 0xff;
//int类型类变量。
int i = 999;
//long类型类变量。
long l = 1;
//float类型类变量。
float f = 3.14f;
//double类型类变量。
double d = 3.14159;
}
也可以用同样的方法初始化引用类型的对象,如果Depth是一个类,那么可以像下面这样创建一个对象并初始化它:
// 创建引用类型的对象
//类Depth
class Depth{
//类内容省略
}
//类Measurement
public class Measurement{