当前位置: 首页 > news >正文

Java基础——常用API4

一、object

1.1 简介

1.2 构造方法

object类是没有成员变量的,所以没有带参的构造方法,只有一个空参构造。很好理解,因为没有一个属性能做到是所有类别的共性。之前我们说针对一个任意的一个类的构造方法,默认访问父类的无参构造,而不是访问有参构造的原因便可由此看出原因。

1.3 成员方法

涉及很多后面的知识点,这里只研究三个。

1.3.1 toString

其底层代码:

 

细节:直接打印得到的结果也是一样的,原因是:

认识一下输出语句:三部分

System: Java里的一个类名,之前学习过

out:  是System里面的一个静态变量。这里也体现了,静态变量和方法可以直接通过类名.静态变量或方法直接调用。

System.out:就可以获取到打印的对象。

println: 其实是一个方法,参数表示我们要打印的内容。

首先它会调用String里面的ValueOf()静态方法,把对象传递过去,点开ValueOf()底层实现方法,你就可以发现,本质上调用toString()!把对象变成了字符串。

这样之后输出的就不是地址值,而是默认初始化值。

1.3.2 equlas

思考题1:

1.3.3 Clone

package com.lkbhua.MyApi.Object;import java.util.StringJoiner;// Cloneable 接口内没有任何的抽象方法
// 如果一个接口没有没有抽象方法,那么这个接口就是标记接口
public class User implements Cloneable{private int id;  // 游戏角色private String name; // 用户名private String password; // 密码private String path; // 游戏图片private int[] data; // 游戏进度public User() {}public User(int id, String name, String password, String path, int[] data) {this.id = id;this.name = name;this.password = password;this.path = path;this.data = data;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public int[] getData() {return data;}public void setData(int[] data) {this.data = data;}public String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +", path='" + path + '\'' +", data=" + arrToString() +'}';}public String arrToString() {StringJoiner sj = new StringJoiner(",", "[", "]");for (int i = 0; i < data.length; i++) {sj.add(data[i] + "");}return sj.toString();}@Overrideprotected Object clone() throws CloneNotSupportedException {// 调用父类中的clone方法// 相当于让Java帮我们克隆一个对象,并把克隆之后的对象返回出去。return super.clone();}
}
package com.lkbhua.MyApi.Object;public class UserTest {public static void main(String[] args) throws CloneNotSupportedException {// 1、创建一个对象int[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0 };User u1 = new User(1, "lkb", "123456", "girll", data);// 2、克隆对象// 不能直接调用u1.clone();// 因为底层的代码是protected受保护的,只能在本类中使用// 而我们想要使用,只能通过重写的方法。Object u2 =(User)u1.clone();// 方法会在底层帮我们创建一个对象,并且把原对象中的数据拷贝过去。// 1、重写Object中Clone()方法// 2、让JavaBean类实现Cloneable接口// 3、创建源对象并调用clone()方法System.out.println(u1);System.out.println(u2);}
}

字符串存储在串池当中,而数组有另外的空间,他们本质上都是引用数据类型,所以存储的都是地址值,只有id是存储真实值1。

Java中的克隆有俩种方式。

第一种:对象克隆单一,首先会创建一个新的对象,然后基本数据类型就是将真实的数据拷贝,引用数据类型是拷贝地址值。专业称之为—— 浅克隆或者浅拷贝。

缺点:修改其一,新数组跟着被该。

第二种方式:首先对创建一个新的对象,关于基本数据类型的拷贝方式是一样的,但是关于引用数据类型就不一样了,它不再拷贝源数据的地址值,而是会创建一个新的对象,比如就data数组来说,会把原来数组的元素拷贝到新的数组,而这个数组的地址值会放到克隆的data中。两者之间互相不影响。

重写Object中Clone()的浅克隆的方法。

    @Overrideprotected Object clone() throws CloneNotSupportedException {// 调用父类中的clone方法// 相当于让Java帮我们克隆一个对象,并把克隆之后的对象返回出去。// 修改成深克隆// 先把被克隆对象中的数组获取出来int[] data = this.data;// 创建一个新的数组int[] newData = new int[data.length];// 拷贝数组中的数据for (int i = 0; i < data.length; i++) {newData[i] = data[i];}// 调用父类中的方法克隆对象User u = (User) super.clone();// 因为父类中的Clone方法是浅克隆,所以替换克隆出来对象中的数组地址值u.data = newData;return u;}

在真正以后开发的时候,我们克隆是会使用第三方工具的。

// 步骤

1、第三方写的代码导入到项目中

回到IDEA中,在当前模块下新建一个包,叫lib是library的缩写。表示以后使用别人的代码,都放到这个包中。选中它之后,Ctrl + D, 点击OK。

点击该文件,右键,倒数第三个Add as Libray,后点击“OK”。

发现能打开这个别人写代码文件了,可以利用起来了。

2、编写代码

二、Objects

 

学习了Objects之后就可以直接通过Objects调用.equals方法,传入带比较对象即可,不需要自己书写判断是否为null的逻辑。

底层代码:

底层代码:

声明:

以上均来源于B站@ITheima的教学内容!!!

本人跟着视频内容学习,整理知识引用

http://www.dtcms.com/a/554206.html

相关文章:

  • 深度拆解 Lua VM 栈结构:数据存储、操作逻辑与边界处理
  • Nginx入门基础-网页状态码
  • 网站排名乐云seo设计图标logo
  • 【JAVA全栈项目】弧图图-智能图床 SpringBoot+Vue3 :[框架开荒:一文全步骤打通前后端项目全流程]
  • Python 第二十四节 Pythong中网络编程相关详细使用及案例
  • 好文与笔记分享 A Survey of Context Engineering for Large Language Models(中)
  • 英文网站推广网站前端程序制作开发
  • 寻找在山西运城专业做网站推广的中关村网站建设的公司
  • 微前端架构深度解析:从概念到落地的完整指南
  • 中国电力建设集团网站群做网站jsp好还是
  • 如何创建一个简单的网页南京企业网站做优化
  • 黑马JAVA+AI 加强09-2 IO流-文件字节输入流-文件字节输出流-文件字符流-文件字符输出流
  • Parasoft C/C++test如何在ARM DS-5环境中进行测试(下)
  • 佛山销售型网站建设重庆网红
  • Linux基础 -- 零拷贝之 splice
  • Go 协程
  • 做网站时怎样图片上传怎么才能让图片不变形有什么插件吗淄博住房和城乡建设局网站
  • leetcode1312.让字符串成为回文串的最少插入次数
  • 宜春做网站 黑酷seo快递网站建站需要什么
  • org.apache.commons.lang3都有什么常用的类
  • edas会议投稿显示格式错误+消除浮动块下面的空白
  • 宁波建设网站公司北京seo案例
  • 虚拟网站仿制教程河南国控建设集团招标网站
  • viewerjs+vue3 using typescript
  • U81904 【模板】树的直径
  • 如何将React自定义语法转化为标准JavaScript语法?
  • 自己做网站主机wordpress 引号被转义
  • 做营销网站推广快速开发安卓app
  • 文件基础操作详解
  • 【22】C语言 - 二维数组详解