Java核心技术第四章——3.对象构造
重载:
如果多个方法(包含构造方法)有相同的名字、不同的参数,便产生重载。编译器必须挑选出具体执行哪个方法,它通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配挑选出相对应的方法。
如果编译器找不到匹配的参数,就会产生编译时错误。(此过程称为重载解析)
注意:方法的返回类型并不属于重载的条件,因为不能有两个名字相同、参数相同而返回类型不同的方法。否则会编译报错。我在大学的时候就是傻逼逼的一直把返回类型当做重载条件的一部分。
重载例子如下:
public class OverLoadingClass {
String id;
/*构造器重载*/
public OverLoadingClass(){
}
public OverLoadingClass(String id){
this.id = id;
}
/*构造器重载*/
/*方法重载*/
public void Test(String name){
}
public void Test(Integer age){
}
/*方法重载*/
}
默认域初始化:
如果在构造器中没有显示的给实例域(全局变量)赋予初值,那么就会被自动赋予默认值:数值的为0、布尔值为false、对象引用为null。
但是在局部变量中则不会自动初始化,若直接调用没有初始化的局部变量则会编译错误。
/**
* 默认域初始化
*/
public class DefaultInitialization { int id; //默认值为0 boolean flag; //默认值为false String name; //默认值为Null public void Test(){
int age;
System.out.println(age);//编译报错
}
}
无参数构造器:
如果在编写一个类时没有编写构造器,那么系统就会自动提供一个无参数的构造器。如果编写了一个带参数的构造器,系统则不会自动提供无参数的构造器。
一般在编写了一个带参数的构造器,都应该编写多一个无参数的构造器。
显示域初始化:
显示域初始化,从文字上就可以知道,可以用眼睛看出他被初始化,并不是系统帮我们初始化(那是上面的默认域初始化了)。
/**
* 显示域初始化
*/
public class DisplayInitialization { int id = 666; String date = getDate(); public String getDate(){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(new Date());
}
}
参数名
在创建带参数的构造器时,参数变量用同样的名字将实例域屏蔽起来。如果参数名为name,那么在方法当中name将引用这个参数。而不是实例域,但是可以使用this关键字指向隐式参数(实例域),例:this.name
public class ParameterClass {
String name;
public ParameterClass(String name){
this.name = name;
}
}
在一般的程序开发当中应该都会这么写,当然,你也可以有下面的操作(不怕被同事鄙视你代码的话)
public class ParameterClass {
String name;
public ParameterClass(String n){
name = n;
}
}
看起来是不是很别扭呢?所以代码还是要规范一点的好。
调用另一个构造器
关键字this引用方法的隐式参数外,还能在构造器中调用其他的构造器,当然是同一个类的,别想太多。这样的话对公共的构造器代码部分只编写一次即可。
/**
* 调用其他构造器
*/
public class CallOtherConstructor { public CallOtherConstructor(){
System.out.println("大胸弟,你来new我啦?");
} public CallOtherConstructor(String name){
this();//调用上面那个构造器
System.out.println(name+":对呀对呀,我来啦");
}
}
初始化块
除了在构造器中、声明中赋值以外,java还有第三种机制,称为初始化块,在一个类的生命中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。
public class InitializationBlock {
private Integer id;
{
id = 1;
System.out.println("进入初始化块");
}
public static void main(String[] args){
InitializationBlock block1 = new InitializationBlock();
InitializationBlock block2 = new InitializationBlock();
}
}
输出结果:
进入初始化块
进入初始化块
在初始化对象的时,执行的顺序为:声明 -> 初始化块 -> 构造器 而初始化块一般比较少用,通常都会把初始化代码放在构造器中。
静态初始化块则不同。静态初始化块在类的第一次加载的时候,将会进行静态域的初始化。(注意:第一次加载类的时候才会执行,往后初始化此对象都不会再进入静态初始化块)
public class InitializationBlock {
static{
System.out.println("进入静态初始化块");
}
public static void main(String[] args){
InitializationBlock block1 = new InitializationBlock();
InitializationBlock block2 = new InitializationBlock();
}
}
输出结果:
进入静态初始化块
好了,这篇文章我大概写了两周,因为断断续续的在写。当然,写这么多除了自己记住之外,也是为了大家能够看懂。所以大伙能不能给我点个推荐呢?~~给点鼓励我吧~谢谢大家的观看~
Java核心技术第四章——3.对象构造的更多相关文章
- [Java核心技术]第四章-对象与类(4.1-4.6总结)
4.1面向对象程序设计概述 OOP(面向对象编程Object Oriented Programming) OOP中数据第一位,算法第二位. 类 封装:关键在于不能让其他方法直接访问类的实例域,程序仅通 ...
- Java核心技术第四章——2.final 和 static
final实例域 实例域(对象的属性)可修饰为final.修饰为final后,在构建对象时必须初始化这个实例域.若没有在实例域进行初始化,那么必须在每个构造器内初始化这个实例域(否则会编译错误). 表 ...
- Java核心技术第四章——1.封装性
封装性(有时称为数据隐藏): 实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域值.程序仅通过对象的方法与对象的数据进行交互. 给对象赋予了"黑盒"的特征,提高了重用性 ...
- 《Java程序设计》第四章-认识对象
20145221<Java程序设计>第四章-认识对象 总结 教材学习内容总结 类与对象 定义:对象是Java语言中重要的组成部分,之前学过的C语言是面向过程的,而Java主要是面向对象的. ...
- Java核心技术第五章——1.类、超类、子类(2)
继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...
- “全栈2019”Java多线程第四章:设置和获取线程名称
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java异常第四章:catch代码块作用域详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java第九十四章:局部内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第十四章:二进制、八进制、十六进制
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- Python并发编程之从生成器使用入门协程(七)
大家好,并发编程 进入第七篇. 从今天开始,我们将开始进入Python的难点,那就是协程. 为了写明白协程的知识点,我查阅了网上的很多相关资料.发现很难有一个讲得系统,讲得全面的文章,导致我们在学习的 ...
- JSONUtils.toJSONString的一个坑
JSONUtils.toJSONString(null); //返回一个为"null"的字符串 这样会导致一个结果就是StringUtils.isBlank判断后,会为false ...
- RabbitMQ (二)工作队列
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37620057 本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与 ...
- 毕业样本=[威尔士大学毕业证书]UWIC原件一模一样证书
威尔士大学毕业证[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归&am ...
- cmd 【已解决】windows连接手机,运行adb devices提示“unauthorized”
报错截图如下: 问题原因:电脑连接手机.手机未授权 解决方式: 设置----开发者选项-----打开USB调试,出现如下弹框,点击"确定"即可解决问题.
- python 将os.getcwd()获取路径中的\替换成\\
通过os.getcwd()获取的路径为:D:\Auto\test\mobule,实际需要修改为:D://Auto//test//mobule 代码实现如下: import osb = os.getcw ...
- 自动化测试框架 hierarchyViewer、Uiautomator、Appium的区别比较!
一.HierarchyViewer: 优点:1)能够可视化的角度直观地获得UI布局设计结构和各种属性的信息 2)使用hierarchyviewer.bat来检索手机界面布局 缺点:1)稳定性差,出现过 ...
- 再谈ERP选型
这几天收到老友的消息,谈及他们公司ERP选型的结果,基本上确定了使用Oracle EBS,因此闹了接近一年的选SAP还是选Oracle的纷争落下帷幕. 这家企业我去年曾去交流过,跟他们聊了一下ERP行 ...
- MIP 移动网页加速器视频教程全新发布
MIP (Mobile Instant Pages - 移动网页加速器) 是百度推出的开源项目,用于移动端页面加速.MIP 技术通过优化浏览器资源加载,前端代码执行及 CDN 缓存加速来加速页面,打造 ...
- shell简明教程
shell的格式 shell可以在直接在命令行下输入,也可以保存成shell脚本文件运行.当命令简单并且不需要重复使用,在命令行输入直接执行即可,否则就写成脚本.shell脚本默认文件扩展名为.sh. ...