• 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开发笔记(序)章节目录

  • 相关阅读:
    刷题238. Product of Array Except Self
    刷题236. Lowest Common Ancestor of a Binary Tree
    刷题208. Implement Trie (Prefix Tree)
    A1070
    A1048
    A1050
    A1041
    A1092
    A1084
    n进制转十进制
  • 原文地址:https://www.cnblogs.com/pinlantu/p/10241691.html
Copyright © 2020-2023  润新知