Java开发笔记(四十六)类的构造方法

前面介绍了如何定义一个简单的类,以及它的成员属性和成员方法,从示例代码能够看到,无论是OrangeSimple仍是OrangeMember,都要先利用关键字new建立一个实例,而后才能经过实例名称访问成员属性和成员方法。不知道你们有没有注意到,new后面的类名跟着一副圆括号,就像下面代码这样:html

		// 建立OrangeMember的一个实例
		OrangeMember orange = new OrangeMember();

 

可圆括号一般是方法的标配呀,为啥类名后面也能直接跟着圆括号呢?这是由于,类定义除了成员属性和成员方法,还有一种构造方法,构造方法的用途是构建并返回该类的实例。好比“OrangeMember()”实际上对应的是类定义中的下述构造方法:java

	// 默认的构造方法
	public OrangeMember() {
	}

 

因为构造方法就是要给外部建立实例用的,所以必须声明为public对外开放;同时构造方法的返回值固定是该类的实例,便没必要重复写明它的返回值;至于类名后面的一对圆括号及一对花括号,显然与普通方法的定义保持一致。可是以前OrangeSimple和OrangeMember的类定义都没有看到它们的构造方法,这又是何故?原来上述形如“类名()”的构造方法,实际上是默认的构造方法,即便程序员未在类定义中写明该方法,Java在编译之时也会自动补上默认的构造方法,因此对于简单的类定义来讲,不写这个默认的构造方法,也不影响类的正常使用。
既然构造方法拥有一对圆括号,就意味着它容许定义输入参数,而且花括号内部也支持填写业务逻辑代码。假如从新定义一个橘子类OrangeConstruct,同时编写带有输入参数的构造方法,且输入参数为产地字段,则该类的构造方法应当书写以下:程序员

	// 只有一个输入参数的构造方法
	public OrangeConstruct(String inputPlace) {
		place = inputPlace;
		if (place.equals("淮北")) {
			name = "枳子";
		} else {
			name = "橘子";
		}
	}

 

若是须要其它的输入参数,也可定义输入参数各异的另外一个构造方法,就像普通方法的重载操做那样。例如再定义一个拥有三个输入参数的构造方法,在方法内部对成员属性加以赋值,此时新构造方法的实现代码以下所示:htm

	// 拥有三个输入参数的构造方法
	public OrangeConstruct(String inputPlace, double inputWeight, boolean inputRipe) {
		place = inputPlace;
		if (place.equals("淮北")) {
			name = "枳子";
		} else {
			name = "橘子";
		}
		weight = inputWeight;
		isRipe = inputRipe;
	}

 

对于输入参数非空的构造方法,外部调用的时候,一样把参数字段依次填写便可,具体的调用代码示例以下:blog

	// 演示OrangeConstruct类的调用
	private static void testConstruct() {
		// 建立OrangeConstruct的一个实例
		OrangeConstruct orange = new OrangeConstruct("淮北", 100, false);
		// 打印该实例的详细信息
		System.out.println(orange.toString());
	}

 

须要注意的是,一旦定义了带输入参数的构造方法,Java在编译之时就不会自动补上默认的构造方法。此时若想继续使用默认的构造方法,就得在类定义中写明不带参数的构造方法。ip



更多Java技术文章参见《Java开发笔记(序)章节目录开发

相关文章
相关标签/搜索