前面介绍了如何定义一个简单的类,以及它的成员属性和成员方法,从示例代码能够看到,无论是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开发笔记(序)章节目录》开发