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

Java开发笔记(四十六)类的构造方法的更多相关文章

  1. Java开发笔记(十六)非此即彼的条件分支

    前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向.在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Jav ...

  2. Java开发笔记(九十六)线程的基本用法

    每启动一个程序,操作系统的内存中通常会驻留该程序的一个进程,进程包含了程序的完整代码逻辑.一旦程序退出,进程也就随之结束:反之,一旦强行结束进程,程序也会跟着退出.普通的程序代码是从上往下执行的,遇到 ...

  3. Java开发学习(三十六)----SpringBoot三种配置文件解析

    一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...

  4. Java学习笔记(十六)——Java RMI

    [前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...

  5. Java开发学习(二十六)----SpringMVC返回响应结果

    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...

  6. Java基础笔记(十六)——继承

    继承 提取出一些共性特征,作为父类,子类就可以继承父类的这些开放成员,子类再添加自己独有的属性和方法.如果再有类具有这些共同特征,也可继承这个父类. 特点:1.利于代码复用     2.缩短开发周期 ...

  7. Java开发笔记(十四)几种运算符的优先级顺序

    到目前为止,我们已经学习了Java语言的好几种运算符,包括算术运算符.赋值运算符.逻辑运算符.关系运算符等基础运算符,并且在书写赋值语句时都没添加圆括号,显然是默认了先完成算术.逻辑.关系等运算,最后 ...

  8. JAVA学习第四十六课 — 其它对象API(二)Date类 & Calendar类(重点掌握)

    Date类(重点) 开发时,会时常遇见时间显示的情况,所以必须熟练Date的应用 <span style="font-family:KaiTi_GB2312;font-size:18p ...

  9. Java从零开始学四十六(Junit)

    一.软件测试 软件开发: 项目调研--需求分析--软件设计--程序编码--软件测试--运行维护 软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,使用人工或者自动手段来运行或测试某个系 ...

  10. 【Java学习笔记之十六】浅谈Java中的继承与多态

    1.  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更 ...

随机推荐

  1. seed实验——Set-UID Program Vulnerability实验

    一.实验描述 Set-UID是Unix OS中的一个·非常重要的安全机制.当一个Set-UID程序运行的时候,它具有代码拥有者的权限.举个例子,如果代码的拥有者是root用户,那么不论任何用户运行该程 ...

  2. python语法_函数

    ---恢复内容开始--- 函数: 1 减少重复代码 2 定义一个功能,需要直接调用 3 保持代码一致性 def  funcation_name(参数s): 功能代码块0 参数可以为多个,传入时按照前后 ...

  3. Mesos源码分析(1): Mesos的启动过程总论

  4. 深入理解JVM(四)——垃圾回收算法

    我们都知道java语言与C语言最大的区别就是内存自动回收,那么JVM是怎么控制内存回收的,这篇文章将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理. stop the world 在介绍垃圾 ...

  5. OSGi解决的问题

    osgi最明显的缺陷 bundle尽管可以为隔离的服务建立独立生命周期管理的热部署方式,以及明确的服务导出和导入依赖能力,但是其最终基于jvm,无法对bundle对应的服务实现计算资源的隔离,一个服务 ...

  6. YOU种你来丨i春秋校园行第一站北京电子科技学院

    发通告啦 i春秋互联网安全校园行即将火爆开启,第一站我们将来到北京电子科技学院.对网络安全感兴趣的大学生们注意啦,我们将走进校园送福利,Are you ready? i春秋简介 i春秋拥有全国最大的网 ...

  7. WordPress外链新窗口打开并使用php页面go跳转

    之前浏览别人的博客网站,打开外链时会有一个等待时间的代码,虽然不知道有什么用,但觉的挺有档次..今天正好看到教程,就自己也加上了,就复制粘贴些代码可以了 首先创建一个php文件,名字随便,如果你不想改 ...

  8. 使用SCP命令在多个linux系统间进行copy拷贝,上传,下载...

    一,什么是scp scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.scp命令可以在linux服务器之间复制文件和目录.scp使用ssh安全协议传输数据,具有和ssh一样的验证机制,从 ...

  9. dedecms搜索模板,使用{dede:list}标签调用自定义字段不显示(空白)

    前几天使用织梦做一个搜索功能,正常使用{dede:list}调用自定义内容模型中的自定义字段,代码如下:(自定义字段的调用可以参考:http://www.dede58.com/a/dedejq/523 ...

  10. innerHTML,outerHTML,innerText,outerText

    - innerHTML 设置或获取位于对象起始和结束标签内的 HTML - outerHTML 设置或获取对象及其内容的 HTML 形式 - innerText 设置或获取位于对象起始和结束标签内的文 ...