一 前言

本节内容将会提到方法重载,对象的初始化,对象的构造器,和this关键字的使用,以及会简要的概括一下java中对象回收机制。觉得文章不错的读者可以关注一下作者的博客和公众号(同博客名称)

二 方法重载

2.1 方法重载的定义

方法重载是指同名的方法具有不同的参数列表;不同的参数列表是指参数列表个数不同或者相同的个数的参数,但具有不同的参数类型

代码示例:

/**
* @Author lsc
* <p> 方法重载</p>
*/
public class OverLoadZ { public static void main(String[] args) {
// 创建对象
OverLoadZ overLoadZ = new OverLoadZ();
// 最初的方法
String keepWarm1 = overLoadZ.keepWarm();
System.out.println(keepWarm1);
// 多一个参数列表方法重载
String keepWarm2 = overLoadZ.keepWarm("穿上大棉袄");
System.out.println(keepWarm2);
// 相同个数参数,不同参数类型重载
String keepWarm3 = overLoadZ.keepWarm(2);
System.out.println(keepWarm3);
// 多个参数重载
String keepWarm4 = overLoadZ.keepWarm("穿上大棉袄",2);
System.out.println(keepWarm4); } // 最初的方法
private String keepWarm(){
return "开启暖气";
}
// 多一个参数列表方法重载
private String keepWarm(String action){
return action;
}
// 相同个数参数,不同参数类型重载
private String keepWarm(Integer number){
return "穿上大棉袄"+number+"件";
}
// 多个参数重载
private String keepWarm (String action,Integer number){
return action+number+"件";
}
}

输出:

开启暖气
穿上大棉袄
穿上大棉袄2件
穿上大棉袄2件

2.2 返回值类型不同为什么不是方法重载

public string keepWarm() 方法 和 public Integer keepWarm() 方法,当我们调用这连个方法时不需要将返回值赋值给另外变量情况下 那么都是 keepWarm() 这样调用,这样就无法区分我们到底是调用了那个方法,故方法重载不能使用返回值类型作为判断依据;

三 构造器

3.1 对象的初始化

如果每个对象都有一个初始化方法,也就是类似变量赋初值,那么类构造器就是对象的初始化方法;对象的构造器的命名规则同类名一致;当我们没有定义类的构造器时,编译器默认会帮我们创建一个空参的构造器;如果我们自定义了构造器,编译器则不会再次帮我们创建空参构造器;如此看来构造器也就是一个特殊的方法,其有参数列表,但没有返回值

如何声明对象,创建对象,看代码示例,我们不想马上实例化一个对象可以对这个对象赋值为null;当需要使用到这个对象的时候再具体实例化,如果没有实例化对象,而使用了对象的成员,会报空指针异常

/**
* @Author lsc
* <p> 知识追寻者 对象初始化系列</p>
*/
public class Build { public static void main(String[] args) {
// 声明一个对象赋值为NULL
Build build = null;
// 如果对象为空就创建对象
if (build==null){
new Build();
}
build.hobby();
} private void hobby(){
System.out.println("知识追寻者爱吃大西瓜");
}
}

3.2 默认构造器

默认构造器也就是空参构造器;如下代码中我们没有自定义构造器,我们也能创建一个空参的对象build,然后调用build对象的 hobby()方法

/**
* @Author lsc
* <p> 知识追寻者 对象初始化系列</p>
*/
public class Build { public static void main(String[] args) {
Build build = new Build();
build.hobby(); // 输出 知识追寻者爱吃大西瓜
} private void hobby(){
System.out.println("知识追寻者爱吃大西瓜");
}
}

自定义空参构造器示例如下,可以看见结果和编译器默认创建的空参构造器执行结果一致;

public class Build {

    Build(){
// 空参构造器,
} public static void main(String[] args) {
Build build = new Build();
build.hobby();// 输出 知识追寻者爱吃大西瓜
} private void hobby(){
System.out.println("知识追寻者爱吃大西瓜");
}
}

为空参构造器赋初值示例如下,可以看见先打印了构造器中的内容,然后再打印hobby方法内容;所有对象在初始化得到时候执行的是构造器方法,构造器方法中的内容也会着对象的创建而执行

/**
* @Author lsc
* <p> 知识追寻者 对象初始化系列</p>
*/
public class Build { Build(){
System.out.println("知识追寻者爱看书");
} public static void main(String[] args) {
Build build = new Build();
build.hobby();
} private void hobby(){
System.out.println("知识追寻者爱吃大西瓜");
}
}

输出:

知识追寻者爱看书
知识追寻者爱吃大西瓜

3.3 重载构造器

学了方法重载,构造器重载也随之很简单,也就是构造器也有参数列表,根据不同的参数列表创建的构造器,我们创建的对象也随之不同

/**
* @Author lsc
* <p>知识追寻者 重载构造器 </p>
*/
public class OverLoadBulid { // 知识追寻者的爱好1
private String hobby1;
// 知识追寻者的爱好2
private String hobby2;
// 空参构造器
OverLoadBulid(){ }
// 重载构造器1
OverLoadBulid(String hobby1){
// 创建对象的时候会执行构造器方法
System.out.println(hobby1);
} // 重载构造器1
OverLoadBulid(String hobby1, String hobby2){
// 创建对象的时候会执行构造器方法
System.out.println(hobby1);
System.out.println(hobby2);
}
public static void main(String[] args) {
// 打印 知识追寻者爱看书
OverLoadBulid loadBulid1 = new OverLoadBulid("知识追寻者爱看书");
// 打印 知识追寻者爱看书 知识追寻者爱写作
OverLoadBulid loadBulid2 = new OverLoadBulid("知识追寻者爱看书","知识追寻者爱写作");
}
}

四 this关键字

4.1 this关键字介绍

官方指的this关键字定义如下:在实例的方法或者构造器中,this关键字保存的是当前对象的引用,可以通过this关键字调用当前对象的任何成员

4.2 this关键字的使用场景

  1. 用在字段上;
  2. 用在构造器上;
  3. 用在实例方法上;
/**
* @Author lsc
* <p> 知识追寻者 this 关键字</p>
*/
public class ObjectZ { private String hobby1; private String hobby2; ObjectZ(String hobby1, String hobby2){
// this 使用在字段上
this.hobby1 = hobby1;
this.hobby2 = hobby2;
} // this 用在 构造器上
ObjectZ(){
// 这边会调用构造器 ObjectZ(String hobby1, String hobby2)
this("知识追寻者爱看书", "知识追寻者爱写作");
} // this 用在方法上
public ObjectZ action(){
// 返回对象实例
return this;
} public static void main(String[] args) {
ObjectZ objectZ = new ObjectZ();
ObjectZ action = objectZ.action();
// this指向的是对象的引用,此时表示同一个对象,this 就是 objectZ实例
System.out.println(objectZ==action);//true
// 成员以已经被赋初值
System.out.println(action.hobby1);// 知识追寻者爱看书
}
}

五 垃圾回收简介

Java中的对象回收是通过垃圾回收机制(Garbage Collection)进行对象的回收,在垃圾回收(System.gc()方法)之前会调用对象的 finalize()方法,判断该对象是否可回收; 如果 finalize()(在gc之前java虚拟器会自动调用该方法,并且jvm只执行一次该方法)被jvm执行过,就会进行对象回收,释放空间;如果在垃圾回收之前我们手动执行了 finalize() 方法,并且又对对象进行赋值,就会造成对象逃逸,gc并没有成功,原因是 finalize()方法已经被执行了;finalize()的用途一般用在在对象回收之前关闭一些资源,不过通常我们也不会这么做,后续的学习中会有更优方案, 而且调用 finalize() 方法在java中是异常危险的举动,建议读者忘记这个方法,所以笔者这边不会给出具体示例;

java基础-对象的初始化的更多相关文章

  1. 《java基础——对象的拷贝》

    java基础--对象的拷贝 一.浅拷贝: 规则: 1. 浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化. 2. 浅拷贝相当于两个对象共用一套实例. 格式: 类名 对象 ...

  2. Java基础-对象的内存分配与初始化(一定要明白的干货)

    首先,什么是类的加载?类的加载由类加载器执行.该步骤将查找字节码(classpath指定目录),并从这些字节码中创建一个Class对象.Java虚拟机为每种类型管理一个独一无二的Class对象.也就是 ...

  3. Java基础--对象的克隆

    文章转载自https://www.cnblogs.com/Qian123/p/5710533.html 阅读目录 为什么要克隆? 如何实现克隆 浅克隆和深克隆 解决多层克隆问题 总结 假如说你想复制一 ...

  4. Java基础-对象与类

    面向对象程序设计概述 面向对象的程序设计(简称OOP)时当今主流的程序设计范型,已经取代了"结构化"过程化程序设计开发技术,Java是完全面向对象的. 类 类设计构造对象的模板或蓝 ...

  5. Java基础26-对象初始化过程

    /* 1.因为new Test1()用到了Test1类,所以会把它从硬盘上加载进入内存 2.如果有static静态代码块就会随着类的加载而执行,还有静态成员和普通方法也会随着类的加载而被加载 3.在堆 ...

  6. 一天一个Java基础——对象和类

    1.在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象 2.可以在类中设置两种类型的元素:字段(也被称作数据成员)和方法(也被称作成员函数) 3.字段可以是任何类型的对象 ...

  7. Java基础--对象的序列化

    所有分布式应用常常需要跨平台,跨网络,因此要求所有传的参数.返回值都必须实现序列化. 比如常见的Dubbo分布式平台,里面的对象实体类必须实现序列化才能在网络间传递 一.定义 序列化:把Java对象转 ...

  8. Java基础——对象和类

    将包含main方法的类称为主类. 变量的作用域是指变量可以在程序中引用的范围. 实例变量和静态变量的作用域是整个类,无论变量是在哪里声明的. 局部变量的声明和使用都在一个方法的内部. 一个类的实例变量 ...

  9. JAVA基础——对象流

    对象的输入输出流的作用: 用于写入对象 的信息和读取对象的信息. 使得对象持久化.    ObjectInputStream   : 对象输入流    ObjectOutPutStream  :对象输 ...

随机推荐

  1. eNSP仿真软件之配置Trunk口

    实验原理 在以太网中,通过划分VLAN来隔离广播域和增强网络通信的安全性.以太网通常由多台交换机组成,为了使VLAN的数据帧跨越多台交换机传递,交换机之间互连的链路需要配置为干道链路(Trunk Li ...

  2. 今天是python专场UDP socket 链接

    type = SOCK_DGRAM UDP 协议的通信优势 允许一个服务器的同时和多个客户端通信 server import socket sk = socket.socket(type=socket ...

  3. Git使用和介绍-基础指令

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52210625 本文出自: [HansChen的博客] 查看已有配置 取消已有的配置 ...

  4. WPF 因设置不期望的DataContext,导致的绑定异常

    在MainWindow中,创建一个背景属性BrushTest,并将其绑定至界面 <Window x:Class="WpfApp8.MainWindow" xmlns=&quo ...

  5. SpringBoot项目集成Hystrix

    Hystrix Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟.异常,引起资源耗尽导致系统不可用的解决方案. 1.什么是服务熔断   服务熔断就是对该服务的调用 ...

  6. 对照谈-官方spring-boot-starter和自定义starter异同分析

    在前面我讲用spring-boot-starter-mail发邮件的时候,我侧重看的是spring boot发邮件的便利性,今天,我们聊下另外一个方面,spring-boot-starter自身的结构 ...

  7. 【原创】002 | 搭上SpringBoot事务源码分析专车

    前言 如果这是你第二次看到师长,说明你在觊觎我的美色! 点赞+关注再看,养成习惯 没别的意思,就是需要你的窥屏^_^ 专车介绍** 该趟专车是开往Spring Boot事务源码分析的专车 专车问题 为 ...

  8. 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图【华为云技术分享】

    [摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...

  9. zz:NETCONF协议详解

    随着SDN的大热,一个诞生了十年之久的协议焕发了第二春,它就是NETCONF协议.如果你在两年前去搜索NETCONF协议,基本得到的信息都是"这个协议是一个网管协议,主要目的是弥补SNMP协 ...

  10. 上手spring boot项目(二)之spring boot整合shiro安全框架

    题记:在学习了springboot和thymeleaf之后,想完成一个项目练练手,于是使用springboot+mybatis和thymeleaf完成一个博客系统,在完成的过程中出现的一些问题,将这些 ...