Java编程思想学习笔记(4)——初始化与清理(二)

前言:本节介绍初始化清理的第二部分与一部分访问权限控制的内容

一、成员初始化
1.Java尽力保证所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,Java以编译错误的形式来保证这个原则。如果你在变量的定义未初始化时使用它。那么编译器就会为其抛出错误。
2.对于基本数据类型与一些其他类型,编译器在其定义但未初始化时会为其初始化。如下表所示:

数据类型默认初始值
booleanfalse
char[ ]
byte0
short0
int0
long0
float0.0
double0.0
class(interface)null

3.当你在定义一个变量并为其赋值时称为指定初始化。

二、构造器初始化
1.利用构造器为类中的属性来进行初始化是一种常见的行为。
2.在类的内部,变量定义的先后顺序决定了初始化顺序。即使变量定义散布于方法定义的空间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。
3.无论创造多少对象,静态数据都只占用一份储存区域。static关键字不能应用于局部变量,因此它只能作用于域。如果一个域是静态的基本类型域,且没有对它进性初始化,那么它就会获得基本类型的标准初值;如果它是对象的引用,那么它默认的初始化值是null
4.静态初始化会先于非静态初始化。 假设存在一个名为Dog的类
a)当首次创建类型为Dog对象时(构造器可以看作静态方法),或者Dog类的静态方法/静态域首次被访问时,Java解释器查找类的路径,定位Dog.class文件
b) 载入Dog.class,有关静态初始化的所有动作都会执行。故静态初始化的所有动作仅在Class对象首次加载的时候进行一次。
c)当使用new关键字创建对象时(Dog),首先在堆上分配空间。
d)这块区域的储存空间会被清零,从而自动地将对象中所有基本数据类型设置为默认值,对象的引用设置为null
e)执行所有字段定义处的初始化动作。
f)执行构造器。
5.显式的静态初始化:Java允许将多个静态初始化动作组织成一个特殊的“静态语句”(静态块)例如:

public class Spoon{
	static int i;
	static{i=47}//这段代码仅执行一次
		    //首次生成这个类的一个对象时,或者首次访问属于那个类的静态数据成员时(可能从未生成该对象)
}

6.非静态实例初始化:Java中也有被称为实例初始化的类似语法,用来初始化每一个对象的非静态变量例如:

class Mug{
	Mug(int marker){}
	void f(int market)
}
public class Mugs{
	Mug mug1;
	Mug mug2;{
		mug1=new mug(1);
		mug2=new mug(2);
	}

}

三、数组初始化
1.可以这样创建数组

	int[] a1;
	int a1[];

两种方法等价
2.可变参数列表:上述两种数组的创建方法中,第二种方法可以提供一种方便的语法来创建对象并调用方法,以获得与C的可变参数列表一样的效果。这可以应用于参数个数或类型未知的场合。利用所有类继承与Object类,所以可以创建以Object数组为参数的方法,例如:

class A{}
public class VarArgs{
	public static void main(String...args){
		Object[] ob1=new Object[]{
		new Integer(47),new Float(3.14),new Double(11.11)
		};
	}
}

3.可变参数列表中可以使用任何类型的参数,包括基本类型。
4.可变参数列表可以与自动包装机制和谐共处。例如,可以将单一的参数列表中将类型混合在一起,而自动包装机制将有选择地将int参数提升为Integer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值