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.hqwc.cn/news/492086.html

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

相关文章

淘宝镜像地址停止运行了 安装插件是失败如果解决

由于淘宝镜像目前已经停止更新运营了&#xff0c;所以导致在使用npm install安装无法成功 先查看一下安装镜像 npm config get registry //查看当前是不是淘宝镜像如果是新的淘宝镜像 重新安装新的淘宝镜像 npm config set registry https://registry.npmmirror.com/ 再次查看…

JavaWeb 自己给服务器安装SQL Server数据库遇到的坑

之前买的虚拟主机免费送了一个SQL Server数据库&#xff0c;由于服务器提供商今年下架我用的那款虚拟主机产品&#xff0c;所以数据库也被收回了。我买了阿里云云服务器&#xff0c;但是没有数据库&#xff0c;于是自己装了一个SQL Server数据库&#xff0c;总结一下遇到的坑。…

Qt QWiget 实现简约美观的加载动画 第三季

&#x1f603; 第三季来啦 &#x1f603; 这是最终效果: 只有三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QVBoxLayout> #include <QGridLayout> int main(int argc, char *argv[]…

nginx之状态页 日志分割 自定义图表 证书

5.1 网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现&#xff0c;在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module&#xff0c;否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状态 server{…

【计算机科学引论 Computing Essentials 2021】【名词术语】【第7章】

Computing Essentials Chapter 7: Secondary Storage 二级存储 MATCHING Match each numbered item with the most closely related lettered item. Write your answers in the spaces provided. Choices a. DVD (Digital Versatile Disc) b. file compression c. hi-def…

UE5 文字游戏(1) 仅UI截图转换为texture2d(适用于window端)

目录 需求 思路 1.截图并读取到本地 2.本地读取图片并转换为纹理2d 效果展示 找了好多的解决办法&#xff0c;都不管用。这个算是折中的。 需求 将当前的用户控件&#xff08;ui&#xff09;截图下来&#xff0c;并赋值到一个texture2d上。 我的需求&#xff1a;文字游戏…

matlab simulink变压器温度仿真

1、内容简介 略 48-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab simulink变压器温度仿真_哔哩哔哩_bilibili 4、参考论文 略 大型油浸风冷变压器绕组温度场分析_高原 基于顶层油温的变压器绕组热点温度计算改进模型_陈伟根 基于热电类比理论的油浸式电…

Oracle内存计算应用模式

前言 内存计算是利用内存来加速数据访问和应用的性能&#xff0c;并降低应用开发复杂度的技术。近十年来&#xff0c;随着软硬件技术的发展和用户需求的成熟&#xff0c;内存计算技术已经得到了广泛地应用。 Oracle在内存计算领域具有非常重要的地位&#xff0c;这主要得益于…

【JavaEE】_HttpServlet类

目录 1. init方法 2. destory方法 3. service方法 4. servlet生命周期 前文已经提及到&#xff1a;servlet是tomcat提供的&#xff0c;用于操作HTTP协议的一组API&#xff0c;可以将这组API理解为HTTP服务器的框架&#xff1b; 编写一个servlet程序&#xff0c;往往都要继…

怎么样避免被企业裁掉呢?

在当前经济环境下&#xff0c;许多企业纷纷选择裁员以降低成本、提升效益。面对这一现象&#xff0c;员工如何避免成为裁员风波中的牺牲品呢&#xff1f;本文将从多个角度为您提供应对策略。 首先&#xff0c;要了解企业裁员的背景和原因。金融危机、行业变革、市场竞争等外部…

青团社:亿级灵活用工平台的云原生架构实践

作者&#xff1a;杨磊 青团社是国内领先的一站式灵活用工招聘服务企业&#xff0c;灵活用工行业的 Top1。青团社于 2013 年在杭州成立&#xff0c;业务已经覆盖全国&#xff0c;在行业深耕 10 年。我的分享将分为以下三部分&#xff1a; 青团社架构演进的历程青团社如何实现云…

您没有安装最新版本QQ,请先下载 并安装,登录更快更安全。

问题 您没有安装最新版本QQ&#xff0c;请先下载 并安装&#xff0c;登录更快更安全。 详细问题 笔者进行android开发&#xff0c;按照官网步骤操作&#xff0c;实现android 绑定QQ登录&#xff0c;跳至QQ页面报错。 解决方案 在App的AndroidManifest.xml添加 <queries…