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开发笔记(序)章节目录》
Java开发笔记(四十六)类的构造方法的更多相关文章
- Java开发笔记(十六)非此即彼的条件分支
前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向.在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Jav ...
- Java开发笔记(九十六)线程的基本用法
每启动一个程序,操作系统的内存中通常会驻留该程序的一个进程,进程包含了程序的完整代码逻辑.一旦程序退出,进程也就随之结束:反之,一旦强行结束进程,程序也会跟着退出.普通的程序代码是从上往下执行的,遇到 ...
- Java开发学习(三十六)----SpringBoot三种配置文件解析
一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...
- Java学习笔记(十六)——Java RMI
[前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
- Java基础笔记(十六)——继承
继承 提取出一些共性特征,作为父类,子类就可以继承父类的这些开放成员,子类再添加自己独有的属性和方法.如果再有类具有这些共同特征,也可继承这个父类. 特点:1.利于代码复用 2.缩短开发周期 ...
- Java开发笔记(十四)几种运算符的优先级顺序
到目前为止,我们已经学习了Java语言的好几种运算符,包括算术运算符.赋值运算符.逻辑运算符.关系运算符等基础运算符,并且在书写赋值语句时都没添加圆括号,显然是默认了先完成算术.逻辑.关系等运算,最后 ...
- JAVA学习第四十六课 — 其它对象API(二)Date类 & Calendar类(重点掌握)
Date类(重点) 开发时,会时常遇见时间显示的情况,所以必须熟练Date的应用 <span style="font-family:KaiTi_GB2312;font-size:18p ...
- Java从零开始学四十六(Junit)
一.软件测试 软件开发: 项目调研--需求分析--软件设计--程序编码--软件测试--运行维护 软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,使用人工或者自动手段来运行或测试某个系 ...
- 【Java学习笔记之十六】浅谈Java中的继承与多态
1. 什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更 ...
随机推荐
- 基础SQL语句用法
1.插入数据:Insert 2.更新数据:update 每行金额增加100 3.删除数据:delete 4.查询:select 1)精确查询 2)模糊查询:like 模糊查询 % 匹配 3)Betw ...
- vue 值的更新
用了vue开发了一段时间,基本上感觉都是比较好用的一个框架,刚开始还是会存在一些小坑的东西,这里先浅谈下值的更新问题. 1.本组件的一些变量,或者是主view(路由页面)一些值,是通过vuex 中st ...
- 算法与数据结构(五) 普利姆与克鲁斯卡尔的最小生成树(Swift版)
上篇博客我们聊了图的物理存储结构邻接矩阵和邻接链表,然后在此基础上给出了图的深度优先搜索和广度优先搜索.本篇博客就在上一篇博客的基础上进行延伸,也是关于图的.今天博客中主要介绍两种算法,都是关于最小生 ...
- vue+mescroll=VScrollFull
VScrollFull 介绍 这个组件是什么? 是为了方便的使用下拉刷新,上拉加载而去封装的一个依赖于 mescroll.js 的 vue 组件(未发布,文末代码~) 封装这个组件使用了什么? mes ...
- 【安富莱专题教程第2期】uC/Probe简易使用说明,含MDK和IAR,支持F103,F407和F429开发板
说明:1. 在uCOS工程调试时,这个软件还是非常给力的,方便查看各种信息,可以认为是MDK或者IAR调试功能的图形化版本,使用JLINK连接可以随时连接查看,无需目标端代码.2. 当前教程中,我们使 ...
- [Swift]LeetCode123. 买卖股票的最佳时机 III | Best Time to Buy and Sell Stock III
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- [Swift]LeetCode206. 反转链表 | Reverse Linked List
Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...
- [Swift]LeetCode288. 唯一单词缩写 $ Unique Word Abbreviation
An abbreviation of a word follows the form <first letter><number><last letter>. Be ...
- [Swift]LeetCode794. 有效的井字游戏 | Valid Tic-Tac-Toe State
A Tic-Tac-Toe board is given as a string array board. Return True if and only if it is possible to r ...
- [Swift]LeetCode842. 将数组拆分成斐波那契序列 | Split Array into Fibonacci Sequence
Given a string S of digits, such as S = "123456579", we can split it into a Fibonacci-like ...