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

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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



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

posted @ 2019-01-08 21:58  pinlantu  阅读(432)  评论(0编辑  收藏  举报