Java核心-核心类与API(4)

话接上回,继续核心类与API的学习,最后介绍一下Object类以及与数学、日期/时间有关的类,就结束该部分的学习了,其他的根据需要自行了解。
在这里插入图片描述

一、Object类

1、概述

Object 是 Java 类库中的一个特殊类,也是所有类的父类,任何 Java 对象都可以调用 Object 类的方法。Java 允许把任何类型的对象赋给 Object 类型的变量。当一个类被定义后,如果没有指定继承的父类,那么默认父类就是 Object 类。(向上和向下转型问题,在讲面向对象的继承特性那里讲过,不熟悉的可回去了解)

注:所有的对象都可以向 Object 进行转换,包含数组和接口类型,即一切的引用数据类型都可以使用 Object 进行接收

2、Object类常用方法

2.1 toString()方法(常用)

返回该对象的字符串,当程序输出一个对象或把某个对象和字符串进行连接运算时,系统会自动调用该对象的 toString() 方法返回该对象的字符串表示。案例如下

//加上toString()变灰系统提示不必要,说明对象输出时一定会调用Object类的toString()方法打印内容。
public class Demo {public static void main(String[] args){Demo d=new Demo();System.out.println(d); //Demo@15db9742,不加toString()输出System.out.println(d.toString()); //Demo@15db9742,加上toString()输出}
}//重写Object类的toString()方法,通过调用被子类重写过的toString()方法获取对象的一些信息
class Person {  // 定义一个测试类personprivate String name;  // 封装私有化成员变量private int age;public Person(String name, int age){ // 带全部参数的构造方法(与类同名)this.name=name; //this指向当前实例对象属性this.age=age;}public String toString(){ // 重写父类(Object类)toString()方法,方法名和父类保持相同。(相同签名)return "姓名:"+this.name+" 年龄:"+this.age;}public static void main(String[] args){Person p=new Person("zhangsan",20); // 实例化Person对象System.out.println(p.toString()); // 调用toString方法,可不写。// 子类默认调用Object类的toString()方法,重写后调用重写的toString()方法}
}

运行Person测试类,结果为

姓名:zhangsan 年龄:20
2.2 equals()方法

比较两个字符串的内容是否相等。注意与"=="区别。

“==”:比较的是 引用的变量地址是否相等(即比较两个引用变量是否指向同一个实例 (在String类中讲过),通常字符串的比较只是关心内容是否相等。

案例:实现用户登录的验证功能,用户名密码都为admin

import java.util.Scanner;  //导包
public class AdminDemo {public static boolean Login(String name,String pwd) {boolean con;  //初始化if (name.equals("admin") && pwd.equals("admin")) { //同时满足con = true;} else {con = false;}return con;}public static void main(String[] args){Scanner sc=new Scanner(System.in);  //获取用户输入System.out.println("------欢迎使用就业服务管理平台------");System.out.println("用户名:");String name= sc.next();System.out.println("密码:");String pwd= sc.next();boolean con=Login(name,pwd);  //调用Login()方法if(con){  //登录结果System.out.println("登录成功!");}else{System.out.println("用户名或密码有误!");}}
}

运行结果

------欢迎使用就业服务管理平台------
用户名:
admin
密码:
amdin
用户名或密码有误!
2.3 getClass()方法

返回对象所属的类,是一个 Class 对象。通过 Class 对象可以获取该类的各种信息,包括类名、父类以及它所实现接口的名字等。

 //对String类型调用getClass()方法,并输出其父类及实现的接口信息public class Test02 {public static void printClassInfo(Object obj) { System.out.println("类名:" + obj.getClass().getName()); // 获取类名   System.out.println("父类:" + obj.getClass().getSuperclass().getName()); // 获取父类名System.out.println("实现的接口有:"); // 获取实现的接口并输出for (int i = 0; i < obj.getClass().getInterfaces().length; i++) {System.out.println(obj.getClass().getInterfaces()[i]);}}public static void main(String[] args) {String strObj = new String();printClassInfo(strObj);}
}

运行结果

类名:java.lang.String
父类:java.lang.Object
实现的接口有:
interface java.io.Serializable
interface java.lang.Comparable
interface java.lang.CharSequence
2.4 clone()方法

创建并返回一个对象的拷贝(浅拷贝,对象内属性引用的对象只拷贝引用地址,而不会将引用的对象重新分配内存,而深拷贝则会连引用的对象也重新创建

注:由于 Object 本身没有实现 Cloneable 接口,所以不重写 clone 方法并进行调用的话会发生CloneNotSupportedException 异常。(面试题拓展:浅拷贝与深拷贝的底层实现机制,有兴趣的自行了解)

public class CloneDemo implements Cloneable{ //创建一个Cloneable接口的实现类String name; //声明变量int age;public static void main(String[] args) throws CloneNotSupportedException { //抛出异常CloneDemo cl=new CloneDemo(); //创建对象cl.name="zhangsan"; //初始化变量cl.age=21;System.out.println(cl.name);System.out.println(cl.age);CloneDemo cl1=(CloneDemo)cl.clone(); //创建cl的拷贝System.out.println(cl1.name); //打印结果System.out.println(cl1.age);}
}

运行结果

zhangsan
21
zhangsan
21
2.5 hashcode()方法

返回对象哈希值,是一个整数,表示在哈希表中的位置。
1)案例1

public class HashCodeDemo {//Object类是所有类的父类,默认继承Object类public static void main(String[] args){// Object使用hashCode()Object obj1 = new Object();//子类可以调用Object类的任何方法,如hashCode()方法System.out.println(obj1.hashCode()); //985922955Object obj2 = new Object();System.out.println(obj2.hashCode()); //1435804085Object obj3 = new Object();System.out.println(obj3.hashCode()); //1784662007}
}

2)案例2

//String和ArrayList类都继承了Object,可以直接使用 hashCode()方法
import java.util.ArrayList; //导包
public class HashCodeDemo {//Object类是所有类的父类,默认继承Object类public static void main(String[] args){String s=new String();//创建String对象System.out.println(s.hashCode()); //0,String调用hashCode()ArrayList<Integer> list=new ArrayList<>();//1,创建ArrayList对象System.out.println(list.hashCode()); //ArrayList调用hashCode()}
}

3)案例3

//两个对象相等,哈希值也相等
public class HashCodeDemo {//Object类是所有类的父类,默认继承Object类public static void main(String[] args){Object obj1 = new Object();Object obj2 = obj1; // obj1赋值给obj2(引用复制,指向同一个对象)System.out.println(obj1.equals(obj2)); // trueSystem.out.println(obj1.hashCode()); // 985922955System.out.println(obj2.hashCode()); // 985922955}
}

二、与数学相关(了解)

1、Number & Math类

1.1 概述

Math类提供了大量的静态方法,用来进行数学计算。基本数学运算,如初等指数、对数、平方根和三角函数等,随机数(都是类方法)。

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。

1.2 常用方法

比较简单,不一一列举,简单看几个,其他的自行了解。

parseInt():将字符串解析为int类型。
ceil():返回 >= 给定参数的的最小整数,类型为双精度浮点型。
floor():返回<=给定参数的最大整数 。
rint():返回与参数最接近的整数。类型为doubleround():四舍五入。
random():返回带正号的 double 值(伪随机数),范围[0.0, 1.0)。
常量:double pi = Math.PI; // 3.14159...,double e = Math.E; // 2.7182818...

三、与日期/时间相关

主要介绍一下Date类和Calendar类,Date 类封装了系统的日期和时间信息,Calendar 类则根据系统的日历来解释 Date 对象

1、Date类

表示系统特定的时间戳,可以精确到毫秒。

1.1 Date类构造方法

1)Date():获取本地的当前时间。(无参构造方法)
2)Date(long date):表示从 GMT(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。(long类型参数的构造方法)

1.2 案例

案例1

import java.util.Date; //导包
public class DateDemo {public static void main(String[] args){Date date1=new Date(); // 调用无参数构造函数System.out.println(date1); // Sun Jan 15 10:12:59 CST 2023Date date2=new Date(60000);// 调用含有一个long类型参数的构造函数System.out.println(date2); // Thu Jan 01 08:01:00 CST 1970}
}

案例2
某一天特定时间要去做一件事,而且那个时间已经过去一分钟之后才想起来这件事还没有办,这时系统将会提示已经过去了多长时间。

import java.util.Date; //导包
import java.util.Scanner;
public class DateDemo {public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.println("请输入要做的事情:");String title = input.next();Date date1 = new Date(); // 获取当前日期System.out.println("[" + title + "] 这件事发生时间为:" + date1);try {Thread.sleep(60000);// 暂停 1 分钟} catch (InterruptedException e) {e.printStackTrace();}Date date2 = new Date();System.out.println("现在时间为:" + date2);if (date2.before(date1)) {System.out.println("你还有 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒需要去完成【" + title + "】这件事!");} else {System.out.println("【" + title + "】事情已经过去了 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒");//毫秒转化为秒}}
}

结果

做饭
[做饭] 这件事发生时间为:Sun Jan 15 10:20:09 CST 2023
现在时间为:Sun Jan 15 10:21:09 CST 2023
【做饭】事情已经过去了 60

2、Calendar类

抽象类,为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。

注:创建 Calendar 对象不能用 new 关键字,因为 Calendar类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance()方法之前也提过,用来返回一个类的唯一实例,其往往是static的,常见于单例模式的类中。

直接来看一个打印日历的小案例

//演示日历
import java.util.Calendar; //导包
import java.util.Date; 
public class DateDemo {public static void main(String[] args){Date date=new Date();System.out.println("当前时间为:"+date); //获取当前时间Calendar calendar = Calendar.getInstance();calendar.set(2023, 0, 15); // 实际的calendar对象所表示的日期为2023年1月15日// 判断2023年1月15日为一周中的第几天int index = calendar.get(Calendar.DAY_OF_WEEK) - 1;char[] title = { '日', '一', '二', '三', '四', '五', '六' }; // 存放曰历的头部int daysArray[][] = new int[6][7];// 存放日历的数据int daysInMonth = 31; // 该月的天数int day = 1; // 自动增长for (int i = index; i < 7; i++) {// 填充第一周的日期数据,即日历中的第一行daysArray[0][i] = day++;}for (int i = 1; i < 6; i++) {// 填充其他周的日历数据,控制行for (int j = 0; j < 7; j++) {// 如果当前day表示的是本月最后一天,则停止向数组中继续赋值if (day > daysInMonth) {i = 6;break;}daysArray[i][j] = day++;}}System.out.println("------------------2023 年 1 月--------------------\n");for (int i = 0; i < title.length; i++) {System.out.print(title[i] + "\t");}System.out.print("\n");// 输出二元数组daysArray中的元素for (int i = 0; i < 6; i++) {for (int j = 0; j < 7; j++) {if (daysArray[i][j] == 0) {if (i != 0) {// 如果到月末,则完成显示日历的任务,停止该方法的执行return;}System.out.print("\t");continue;}System.out.print(daysArray[i][j] + "\t");}System.out.print("\n");}}
}

运行结果

当前时间为:Sun Jan 15 10:48:12 CST 2023
------------------20231--------------------日    一    二    三    四    五    六    
1    2    3    4    5    6    7    
8    9    10    11    12    13    14    
15    16    17    18    19    20    21    
22    23    24    25    26    27    28    
29    30    31

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/702953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux-并发通信

一.linux-tcp通信框架 1.基础框架 1.1 tcp 服务器框架 1.套接字 #include <sys/socket.h> int socket(int domain, int type, int protocol);
 返回的文件描述符可以指向当前的socket&#xff0c;后续通过对文件描述符的访问就可以配置这个socket 成功时返回文件…

nccl2安装指南

https://developer.nvidia.com/nccl/nccl-download 旧版本安装: https://developer.nvidia.com/nccl/nccl-legacy-downloads 找到你对应的CUDA版本 我这里选择 deb 文件安装了 sudo dpkg -i nccl-local-repo-ubuntu2004-2.16.5-cuda11.8_1.0-1_amd64.debsudo cp /var/nccl-lo…

使用 React 和 MUI 创建多选 Checkbox 树组件

在本篇博客中&#xff0c;我们将使用 React 和 MUI&#xff08;Material-UI&#xff09;库来创建一个多选 Checkbox 树组件。该组件可以用于展示树形结构的数据&#xff0c;并允许用户选择多个节点。 前提 在开始之前&#xff0c;确保你已经安装了以下依赖&#xff1a; Reac…

政安晨:【机器学习基础】(二)—— 评估机器学习模型改进

根据前面我的文章看来&#xff0c;咱们只能控制可以观察到的东西。因为您的目标是开发出能够成功泛化到新数据的模型&#xff0c;所以能够可靠地衡量模型泛化能力是至关重要的&#xff0c;咱们这篇文章将正式介绍评估机器学习模型的各种方法。 政安晨的个人主页&#xff1a;政安…

Hikvision SPON IP网络对讲广播系统命令执行漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 1.漏洞描述 Hikvision Intercom Broadcasting System是中国海康威视&a…

低功耗设计——门控时钟

1. 前言 芯片功耗组成中&#xff0c;有高达40%甚至更多是由时钟树消耗掉的。这个结果的原因也很直观&#xff0c;因为这些时钟树在系统中具有最高的切换频率&#xff0c;而且有很多时钟buffer&#xff0c;而且为了最小化时钟延时&#xff0c;它们通常具有很高的驱动强度。此外&…

leetcode hot100 买卖股票最佳时机3

本题中&#xff0c;依旧可以采用动态规划来进行解决&#xff0c;之前的两个题我们都是用二维数组dp[i][2]来表示的&#xff0c;其中i表示第i天&#xff0c;2表示长度为2&#xff0c;其中0表示不持有&#xff0c;1表示持有。 本题中&#xff0c;说至多完成两笔交易&#xff0c;也…

力扣--动态规划1027.最长等差数列

思路分析&#xff1a; 使用动态规划的思想&#xff0c;定义二维数组dp&#xff0c;其中dp[i][j]表示以nums[i]为结尾&#xff0c;公差为(j-1000)的等差数列长度。为了适应负数的情况&#xff0c;将公差的范围设为[-1000, 1000]&#xff0c;并且加上1000作为数组索引。 初始化r…

11:日志分析系统ELK|Elasticsearch|kibana

日志分析系统ELK&#xff5c;Elasticsearch&#xff5c;kibana 日志分析系统ELKELK概述Elasticsearch安装Elasticsearch部署Elasticsearch集群Elasticsearch插件 熟悉Elasticsearch的API调用_cat API创建 tedu 索引使用 PUT 方式增加数据查询数据修改数据删除数据 KibanaKibana…

锂电池SOC估计 | PyTorch实现基于Basisformer模型的锂电池SOC估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 PyTorch实现基于Basisformer模型的锂电池SOC估计 锂电池SOC估计&#xff0c;全新【Basisformer】时间序列预测 1.采用自适应监督自监督对比学习方法学习时序特征&#xff1b; 2.通过双向交叉注意力机制计算历史序列和…

BL、万科、中海地产、碧桂园、华润置地、佳兆业、金地商置、龙湖、绿城、融创、时代中国、旭辉、中国建筑校招笔试题

为了帮助应聘者更好地备战地产公司的招聘考试&#xff0c;我将介绍以下13套校招试题资料&#xff0c;涵盖了24 BL、24万科、24中海地产、碧桂园、华润置地、佳兆业、金地商置、龙湖、绿城、融创、时代中国、旭辉和中国建筑等知名房地产企业&#xff0c;为您提供全方位的备考资源…

提高移动应用的安全性:策略与实践

提高移动应用的安全性&#xff1a;策略与实践 随着移动应用的普及&#xff0c;安全性问题变得日益重要。用户数据保护、应用逻辑安全、以及防止恶意攻击都是开发者必须关注的重点。本文将探讨如何通过一系列策略和实践来提高移动应用的安全性。 1. 数据加密与保护 敏感数据加…

2024年环境安全科学、材料工程与制造国际学术会议(ESSMEM2024)

【EI检索】2024年环境安全科学、材料工程与制造国际学术会议&#xff08;ESSMEM2024) 会议简介 我们很高兴邀请您参加将在三亚举行的2024年环境安全科学、材料工程和制造国际学术会议&#xff08;ESSMEM 2024&#xff09;。 ESSMEM2024将汇集世界各国和地区的研究人员&…

初识Lombok

前言 最近读一些公司的业务代码&#xff0c;发现近几年的java项目工程中都使用了lombok&#xff0c;lombok是一个可以自动生成get,set、toString等模板类方法的工具框架&#xff0c;程序再引入lombok后&#xff0c;添加一个注解便可以不写get\set\toString等方法。 Lombok示例…

计算机组成原理(15)----输入/输出系统

目录 一.I/O系统的基本概念 &#xff08;1&#xff09;I/O硬件 &#xff08;2&#xff09;I/O控制方式 1.程序查询方式 2.程序中断方式 3.DMA&#xff08;Direct Memory Access&#xff09;控制方式 4.通道控制方式 &#xff08;3&#xff09;I/O软件 1.I/O指令 2.通…

全志H713/H618方案:调焦电机(相励磁法步进电机)的驱动原理、适配方法

一、篇头 全志H713平台&#xff0c;作为FHD投影的低成本入门方案&#xff0c;其公板上也配齐了许多投影使用的模组&#xff0c;本文即介绍投影仪调焦所用的步进电机&#xff0c;此模组的驱动原理、配制方法、调试方法。因为条件限制&#xff0c;本文采用的是H618香橙派Z3平台&…

Linux-进程-007

1进程 1.1进程基本概念 程序&#xff1a;存放在外存中的一段数据组成的文件 进程&#xff1a;是一个程序动态执行的过程&#xff0c;包括进程的创建&#xff0c;进程的调度&#xff0c;进程的消亡1.2进程相关命令 1.2.1打开任务管理器 【top】&#xff1a;动态查看当前系统…

国企招聘考试------笔试资料-校园招聘

国企招聘考试一直备受广大求职者的关注&#xff0c;因为国企招聘通常具有稳定的岗位、优厚的福利待遇和广阔的发展空间&#xff0c;因此备战国企招聘考试成为许多求职者的重要任务。为了帮助求职者更好地准备国企招聘笔试&#xff0c;我将为你介绍这套校招试题资料。 国企招聘…

idea集成git(实用篇)

0.Git常用命令 Git常用命令-CSDN博客 1.下载git Git - Downloads 一路傻瓜式安装即可&#xff08;NEXT&#xff09; 2.软件测试 在Windows桌面空白处&#xff0c;点击鼠标右键&#xff0c;弹出右键菜单 Git软件安装后&#xff0c;会在右键菜单中增加两个菜单 Git GUI He…

Go编译到linux运行出现 cannot execute binary file

1.初学Go就在windows上写了个"Hello,World!",在windown上编译了一下&#xff0c;生成了可执行文件。运行无问题 go build text.go .\text.exe Hello,World!2.但是按照网上的教程进行生成linux的可执行文件时出现报错 set CGO_ENABLED0 set GOOSlinux set GOARCHam…