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第 ...
随机推荐
- web网络协议
一.OSI七层模型 OSI参考模型是国际标准化组织ISO(International Standards Organization )制定的模型,把计算机与计算机之间的通信分成七个互相连接的协议层 ...
- 你不知道的JavaScript--Item14 使用prototype的几点注意事项
1.在prototype上保存方法 不使用prototype进行JavaScript的编码是完全可行的,例如: function User(name, passwordHash) { this.nam ...
- java之集合Collection详解之3
package cn.itcast_03; public class Student { // 成员变量 private String name; private int age; // 构造方法 p ...
- Android 百分比布局库(percent-support-lib) 解析与扩展
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/46695347: 本文出自:[张鸿洋的博客] 一.概述 周末游戏打得过猛,于是周 ...
- Juint单元测试
********************************************************************************************* 单元测试:集 ...
- 【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...
- 解决jenkins slave 中文乱码 encoding=ANSI_X3.4-1968
jenkins配置slave进行构建时,发现slave构建的控制台输入中文乱码,查看master,slave的jenkins系统信息 file.encoding和sun.jnu.encoding都没有 ...
- selenium处理iframe定位于切换问题解决办法
首先还是围绕以下几个方面来看: 1.什么是iframe? 2.为什么我们要定位iframe? 3.我们怎样定位iframe,与切换iframe? 1.什么是iframe? ♦ b/s架构都使用ifra ...
- sql查询当前登陆人所管理的校区下的人员
StringBuilder sql = new StringBuilder("select accountId, concat( ',', GROUP_CONCAT(FIND_IN_SET( ...
- 用python把一个txt文件中所有逗号,替换成空格?
string = "word 2 3 4 5 6 7" string = ",".join(string.split()) import numpy as np ...