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

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

相关文章:

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

话接上回&#xff0c;继续核心类与API的学习&#xff0c;最后介绍一下Object类以及与数学、日期/时间有关的类&#xff0c;就结束该部分的学习了&#xff0c;其他的根据需要自行了解。 一、Object类 1、概述 Object 是 Java 类库中的一个特殊类&#xff0c;也是所有类的父类…...

【C语言】详解计算机二级c语言程序题

文章目录 前言资料相关程序题 一&#xff08;字符串&#xff09;程序题 二&#xff08;数组&#xff09;程序题 三&#xff08;基础&#xff09;程序题 四&#xff08;结构体&#xff09;程序题 五&#xff08;结构体&#xff09;程序题 六&#xff08;基础&#xff09; 前言 …...

限流算法

下面对常见的限流算法进行讨论。目前&#xff0c;常用的限流算法主要有三种&#xff1a;计数器法、滑动窗口算法、漏桶算法和令牌桶算法。下面分别介绍其原理。 1. 计数器法 计数器法是通过计数对到来的请求进行选择性处理。如系统限制一秒内最多有X个请求&#xff0c;则在该…...

备战蓝桥杯 Day10(背包dp)

01背包问题 1267&#xff1a;【例9.11】01背包问题 【题目描述】 一个旅行者有一个最多能装 M&#xfffd; 公斤的背包&#xff0c;现在有 n&#xfffd; 件物品&#xff0c;它们的重量分别是W1&#xff0c;W2&#xff0c;...,Wn&#xfffd;1&#xff0c;&#xfffd;2&#…...

Sora 使用教程,新手小白可用

Sora 使用教程&#xff0c;新手小白可用 参考文章&#xff1a;Sora 使用教程&#xff0c;OpenAI 的文生视频模型 为了在激烈的行业竞争中保持领先地位&#xff0c;OpenAI 在 2024 年 2 月 15 日发布了其革命性的文本至视频转换模型——Sora。这个先进的工具能够将文本描述转化…...

【洛谷千题详解】P1031 均分纸牌

目录 题目描述 思路点拨 AC代码 题目描述 题目网址&#xff1a;[NOIP2002 提高组] 均分纸牌 - 洛谷 有 N 堆纸牌&#xff0c;编号分别为 1,2,……,N。每堆上有若干张&#xff0c;但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌&#xff0c;然后移动。 移牌规则为&a…...

基于文本提示和语义分割的快速抠图

基于文本提示和语义分割的快速抠图 1. 介绍2. 效果展示3. 安装模型4. 命令行调用5. 代码调用5.1 模型加载5.2 可视化函数定义5.3 图像语义分割 6. 参考资料7. 结语服务 1. 介绍 传统的图像语义分割模型通常固定类别进行分割&#xff0c;而基于文本提示的语义分割模型则具有更高…...

什么是媒体发稿?发稿媒体分类及发稿流程

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体发稿是一种企业推广和宣传的手段&#xff0c;通过媒体渠道传递企业信息和形象。 媒体发稿的含义在于&#xff0c;当企业有新闻、事件或其他消息需要对外公布时&#xff0c;可以选择…...

安全测试自学手册之软件安全测试基础

安全测试的概念 定义&#xff1a;指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程。】 应用软件的安全性测试&#xff1a;软件自身设计中存在的安全隐患&#xff0c;并检查软件对非法入侵的防御能力。系统级别的安全性测试&#xff1a;确保只有具备系统平台访问权限…...

【LeetCode】升级打怪之路 Day 04:链表 part 2

今日题目&#xff1a; 24. 两两交换链表中的节点19. 删除链表的倒数第 N 个结点160. 相交链表142. 环形链表 II 目录 LeetCode 24. 两两交换链表中的节点 【易错】LeetCode 19. 删除链表的倒数第 N 个结点 【还行】LeetCode 160. 相交链表&#xff08;两个链表是否相交&#xf…...

JAVA编程题系列——涵盖几乎所有java内容

自己定义一个类&#xff0c;有static属性和构造方法&#xff0c;有构造方法重载&#xff0c;有其他方法&#xff08;方法有对String类型操作&#xff09; public class MyClass {// 静态属性public static String staticProperty "Static Property";// 成员变量priv…...

【Android12】Monkey压力测试源码执行流程分析

Monkey压力测试源码执行流程分析 Monkey是Android提供的用于应用程序自动化测试、压力测试的测试工具。 其源码路径(Android12)位于 /development/cmds/monkey/部署形式为Java Binary # development/cmds/monkey/Android.bp // Copyright 2008 The Android Open Source Proj…...

Java架构师之路八、安全技术:Web安全、网络安全、系统安全、数据安全等

目录 Web安全&#xff1a; 网络安全&#xff1a; 系统安全&#xff1a; 数据安全&#xff1a; Java架构师之路七、大数据&#xff1a;Hadoop、Spark、Hive、HBase、Kafka等-CSDN博客Java架构师之路九、设计模式&#xff1a;常见的设计模式&#xff0c;如单例模式、工厂模式…...

Codeforces Round 240 (Div. 1) C. Mashmokh and Reverse Operation(分治+逆序对)

原题链接&#xff1a;C. Mashmokh and Reverse Operation 题目大意&#xff1a; 给出一个长度为 2 n 2^{n} 2n 的正整数数组 a a a &#xff0c;再给出 m m m 次操作。 每次操作给出一个数字 q q q &#xff0c;把数组分为 2 n − q 2^{n-q} 2n−q 个长度为 2 q 2^{q} 2…...

SpringBoot源码解读与原理分析(三十二)SpringBoot整合JDBC(一)JDBC组件的自动装配

文章目录 前言第10章 SpringBoot整合JDBC10.1 SpringBoot整合JDBC的项目搭建10.1.1 初始化数据库10.1.2 整合项目10.1.2.1 导入JDBC和MySQL驱动依赖10.1.2.2 配置数据源 10.1.3 编写业务代码10.1.3.1 编写与t_user表对应的实体类User10.1.3.2 编写Dao层代码10.1.3.3 编写Servic…...

petalinux_zynq7 驱动DAC以及ADC模块之五:nodejs+vue3实现web网页波形显示

前文&#xff1a; petalinux_zynq7 C语言驱动DAC以及ADC模块之一&#xff1a;建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二&#xff1a;petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…...

Android java中内部类的使用

一.成员内部类 实验1&#xff1a;成员内部类 class Outer {private int a 10;class Inner {public void printInfo(){System.out.println("a "a);}}}public class InnerDemo {public static void main(String args[]) {Outer o new Outer();Outer.Inner i o.new…...

llm的inference(二)

文章目录 Tokenizer分词1.单词分词法2.单字符分词法3.子词分词法BPE(字节对编码&#xff0c;Byte Pair Encoding)WordPieceUnigram Language Model(ULM) embedding的本质推理时的一些指标参考链接 Tokenizer 在使用模型前&#xff0c;都需要将sequence过一遍Tokenizer&#xf…...

pytorch -- torch.nn.Module

基础 torch.nn 是 PyTorch 中用于构建神经网络的模块。nn.Module包含网络各层的定义及forward方法。 在用户自定义神经网络时&#xff0c;需要继承自nn.Module类。通过继承 nn.Module 类&#xff0c;您可以创建自己的神经网络模型&#xff0c;并定义模型的结构和操作。 torch.n…...

Microsoft Edge 越用越慢、超级卡顿?网页B站播放卡顿?

记录10个小妙招 Microsoft Edge 启动缓慢、菜单导航卡顿、浏览响应沉闷&#xff1f;这些情况可能是由于系统资源不足或浏览器没及时更新引起的。接下来&#xff0c;我们将介绍 10 种简单的方法&#xff0c;让 Edge 浏览器的速度重新起飞。 基础检查与问题解决 如果 Microsoft…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...