Java 常用API(二)

1. Object类

  • Object类位于 java.lang.Object 包下。

  • 类Object是类层次结构的根类(父类)

  • 每个类都使用Object类作为超类(父类)。

  • 所有对象(包括数组)都实现了这个类的方法。

  • public String toString():返回该对象的字符串表示。

  • public boolean equals(Object obj): 指示其他某个对象是否与此对象“相等”。

注意事项:

  1. 看一个类是否重写了 toString方法,直接打印这个类的对象即可。
  2. 如果没有重写 toString方法,那么打印的是对象的地址值
  3. Random类没有重写 toString方法
  4. Scanner、ArrayList<E>类重写了 toString方法。
  5. Object类中的equals方法默认比较的是两个对象的地址值,而String类中的equals方法是将Object类中的equals方法覆盖重写 了,比较的是字符串的内容。

多态的缺点:不能向下使用子类的特有的内容(属性和方法)。

解决:使用向下转型。

  • 示例:
  1. // Person.java
  2. public class Person {
  3. private String name;
  4. private int age;
  5. public Person() {
  6. }
  7. public Person(String name, int age) {
  8. this.name = name;
  9. this.age = age;
  10. }
  11. // 覆盖重写Object类中的toString方法
  12. @Override
  13. public String toString() {
  14. return "Person{" + "name='" + name + "\'" + ", age=" + age + "}";
  15. }
  16. // 覆盖重写Object类的equals方法
  17. @Override
  18. public boolean equals(Object obj) {
  19. // 判断是否等于自身
  20. if (obj == this){
  21. return true;
  22. }
  23. // 判断是否为空
  24. if (obj == null){
  25. return false;
  26. }
  27. // 判断是否为自定义的Person类
  28. if (obj instanceof Person){
  29. // 向下转型
  30. Person person = (Person)obj;
  31. return person.age == this.age && person.name.equals(this.name);
  32. }
  33. // 不是Person类直接返回false
  34. return false;
  35. }
  36. /*
  37. // 使用 alt + ins 添加的
  38. @Override
  39. public boolean equals(Object o) {
  40. if (this == o) return true;
  41. // getClass()是使用反射技术判断 o 是否是Person类型 等效于 o instanceof Person
  42. if (o == null || getClass() != o.getClass()) return false;
  43. Person person = (Person) o;
  44. return age == person.age &&
  45. Objects.equals(name, person.name);
  46. }
  47. */
  48. public String getName() {
  49. return name;
  50. }
  51. public void setName(String name) {
  52. this.name = name;
  53. }
  54. public int getAge() {
  55. return age;
  56. }
  57. public void setAge(int age) {
  58. this.age = age;
  59. }
  60. }
  61. // Demo02Main.java
  62. import java.util.ArrayList;
  63. public class Demo02Main {
  64. public static void main(String[] args) {
  65. Person one = new Person("迪丽热巴", 20);
  66. Person two = new Person("迪丽热巴", 20);
  67. System.out.println(one); // 没有重写之前打印的是地址值
  68. one.toString(); // Person{name='迪丽热巴', age=20}
  69. // System.out.println(one.toString()); // 没有重写之前打印的也是地址值
  70. System.out.println(one.equals(two)); // true
  71. System.out.println(one == two); // false
  72. }
  73. }
  • 关于Objects类的介绍

    在JDK 7添加了一个Objects工具类,它提供了一些方法来操作对象,它有一些静态的实用方法组成,这些方法是null-save(空指针安全)或者null-tolernt(容忍空指针的),用于计算对象的hashcode,返回对象的字符串表示形式,比较两个对象。

在比较 两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题,防止空指针异常。

  • Objects类中的equals方法
  1. public static boolean equals(Object a, Object b){
  2. return (a == b) || (a != null) && a.equals(b);
  3. }

2. Date类

概述

  • java.util.Date:表示日期和时间类。
  • 类Date表示特定的瞬间,精确到毫秒。1 秒 = 1000 毫秒
  • 毫秒值的作用:可以对日期和时间进行计算。
  • 时间原点:1970 年 1 月 1 日 00:00:00(英国格林威治)
  • 1 天 = 24 × 60 × 60 = 86400 秒 = 86400000毫秒

注意事项:

中国属于东八区,会把时间增加8个小时

1970 年 1 月 1 日 08:00:00

  1. // 输出当前时间距离时间原点的毫秒数,这是一个long类型
  2. // 1565579081183L
  3. System.out.println(System.currentTimeMillis());

构造方法和成员方法

Date类的空参构造

  • Date():获取当前系统的时间和日期。
  1. import java.util.Date;
  2. public class DemoDate {
  3. public static void main(String[] args) {
  4. Date date = new Date();
  5. System.out.println(date); // Mon Aug 12 11:18:35 CST 2019
  6. }
  7. }

Date类的带参构造

  • Date(long date):传递毫秒值,把毫秒值装换为date日期。
  1. Date dateOne = new Date(1565579081183L);
  2. // Mon Aug 12 11:04:41 CST 2019
  3. System.out.println(dateOne);
  4. Date dateTwo = new Date(0L);
  5. // Thu Jan 01 08:00:00 CST 1970
  6. System.out.println(dateTwo);

Date类的成员方法:

  • long getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
  1. public static void method03(){
  2. Date date = new Date();
  3. // 1565580373625
  4. // 相当于System.currentTimeMillis()方法
  5. System.out.println(date.getTime());
  6. }

3. DateFormat类

概述

  • java.text.DateFormat:是日期/时间格式化子类的抽象类
  • 作用:格式化(日期 --> 文本),解析(文本 --> 日期)

成员方法:

  1. String format(Date date):按照指定的模式,把Date日期,格式化为符合模式的字符串。
  2. Date parse(String source):把符合模式的字符串,解析为Date日期。

DateFormat类是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类,SimpleDateFormat就是DateFormat的一个子类。

java.text.SimpleDateFormat extends DateFormat

SimpleDateFormat类

  • SimpleDateFormat(String pattern):用指定的模式和默认语言环境的日期和时间格式符号构造 SimpleDateFormat
  • 参数:String pattern:传递指定的模式(区分大小写)。
  • 常用的格式规则:
标识字母(区分大小写) 含义
y
M
d
H
m
s

注意事项:模式中的字母不能更改,连接模式的符号可以改变。

DateFormat类中的format方法的使用步骤:

  1. 创建一个SimpleDateFormat对象,构造方法中传递指定的模式。
  2. 调用SimpleDateFormat中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)。

使用parse方法时的注意事项:

  1. public Date parse(String source) throws ParseException

    parse 方法声明了一个异常:ParseException
  2. 如果字符串和构造方法的模式不一样,那么程序就会抛出此异常。
  3. 调用一个抛出异常的方法,就必须处理这个异常,要么throws继续抛出这个异常,要么 try catch 自己处理。
  • 示例:
  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. public class DemoSimpleDateFormat {
  5. public static void main(String[] args) throws ParseException {
  6. // 首先将当前 Date格式化为 String
  7. // pattern:yyyy-MM-dd HH-mm-ss
  8. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  9. // 创建一个Date对象
  10. Date date = new Date();
  11. // 调用SimpleDateFormat类中的format方法
  12. String format = sdf.format(date);
  13. System.out.println(format); // 2019-08-12 12:24:57
  14. // 将String解析为Date类
  15. Date parse = sdf.parse(format);
  16. System.out.println(parse); // Mon Aug 12 12:24:14 CST 2019
  17. }
  18. }

练习

  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.Scanner;
  5. /*
  6. 题目要求:
  7. 使用日期时间相关的API,计算一个人已经出生了多少天?
  8. 分析:
  9. 1.输入你的出生日期,使用Scanner类中的next方法获取
  10. 2.将出生日期装换为毫秒
  11. 3.获取当前时间并装换为毫秒
  12. 4.差值 = 当前时间 - 出生日期
  13. 5.打印结果: 差值 / 1000/60/60/24
  14. */
  15. public class DemoSimpleDateFormatTest {
  16. public static void main(String[] args) throws ParseException {
  17. // 创建一个Scanner对象
  18. Scanner sc = new Scanner(System.in);
  19. System.out.println("请输入您的出生日期,格式:yyyy-MM-dd.");
  20. // 接受输入的出生日期
  21. String birthdayStr = sc.next();
  22. // 转换为 Date类
  23. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  24. Date birthdayDate = sdf.parse(birthdayStr);
  25. // 装换为毫秒
  26. long birthdayTime = birthdayDate.getTime();
  27. // 获取当前时间并装换为毫秒
  28. long currentTime = new Date().getTime();
  29. // 计算差值
  30. long difference = currentTime - birthdayTime;
  31. // 装换为天数
  32. long liveDay = difference/1000/60/60/24;
  33. // 打印结果
  34. System.out.println(liveDay);
  35. }
  36. }

4. Calendar类

  • java.util.Calendar类:日历类
  • Calendar类是一个抽象类,里边提供了很多操控日历字段的静态方法(YEAR、MONTH、DAY_OF_MONTH、HOUR 等)。
  • Calendar类无法直接创建对象使用,里面有一个静态方法getInstance(),该方法返回了Calendar类的子类对象。
  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历。

常用方法

  1. public int get(int field):返回给定日历字段的值。

    参数:传递给定的日历字段(YEAR、MONTH)

    返回值:日历字段代表的具体值

  2. public void set(int field, int value):将给的的日历字段设置为给定值。

    int field:传递给定的日历字段。

    int value:给指定的日历字段设置值。

  3. public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加 / 减去指定的时间量。

    int field:传递指定的日历字段。

    int amount:增加 / 减少指定的值。

  4. public Date getTime():将Calendar对象装换为Date类对象。

5. System类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或者系统级操作。

常用方法

  1. public static long currentTimeMillis():返回以毫秒为单位的当前时间。
  2. public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。

System.currentTimeMillis()用来测试系统的运行时间

  1. public class DemoSystem {
  2. public static void main(String[] args) {
  3. long start = System.currentTimeMillis();
  4. int sum = 0;
  5. for (int i = 0; i < 9999; i++) {
  6. System.out.println(i);
  7. }
  8. long end = System.currentTimeMillis();
  9. long time = end - start;
  10. System.out.println("程序耗时:" + time);
  11. }
  12. }

6. StringBuilder类

  • java.lang.StringBuilder

String类的原理

  • 字符串是常量:它们的值在创建之后不能改变。

  • 字符串底层是一个被final修饰的字节数组,不能改变,是一个常量。

    private final byte[ ] value;

  • 进行字符串相加时,内存中就会有多个字符串,占用空间多,效率低下。

  • 例如:对字符串"a" + "b" + "c"计算的结果是一共有五个字符串,分别是:”a","b","c","ab","abc"。

StringBuilder类的原理

  • StringBuilder也叫字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串),底层也是一个字符串,但是没有被final修饰,可以改变长度。byte[ ] value = new byte[16];
  • 对字符串"a" + "b" + "c"来说,会得到四个字符串,分别是:"a", "b", "c","abc"。
  • StringBuilder在内存当中始终是一个数组,占用空间少,效率高。
  • 如果超出StringBuilder的容量,会自动的扩容。

StringBuilder的构造方法

  • public StringBuilder():构造一个空的字符串生成器,其初始容量为 16 个字符。
  • public StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容。

StringBuilder的常用方法

  • public StringBuilder append(...):添加任意类型数据的字符串表示形式,并返回当前对象自身。

  • public String toString():将当前StringBuilder对象转换为String对象。

  • StringBuilder reverse() :将此字符序列用其反转形式取代。

  • StringBuilder和String可以相互转换

    • String --> StringBuilder:使用StringBuilder的构造方法。
    • StringBuilder --> String:使用StringBuilder的toString方法。

注意事项:

  1. append方法返回的是自身,也就是 this
  2. 使用 append方法无需接受返回值

7. 包装类

概述

基本数据类型使用起来非常方便,但是没有对应的方法来操作这些基本类型的数据,可以使用一个类,把基本类型的数据包装起来,在类中定义一些方法,这个类叫做包装类,我们可以使用类中的方法来操作这些基本类型的数据。

装箱与拆箱(以 int 类型为例)

基本类型与包装类对象之间,来回转换的过程称为”装箱“与”拆箱“。

  • 装箱:基本类型装换为对应的包装类对象。
  • 拆箱:从包装类对象装换为对应的基本类型。

一、装箱

装箱通过两种方式,一种构造方法,另一种静态方法,下列构造方法已过时。

  1. 构造方法:
  • public Integer(int value):构造一个新分配的Integer对象,它表示指定的的 int 值。
  • public Integer(String s):构造一个新分配的Integer对象,它表示 String 参数所指示的 int 值。传递的字符串对应的基本类型的字符串,否则会抛出异常:NumberFormatException,例如:"100" 正确,"a" 错误。
  1. 静态方法:
  • public static Integer valueOf(int i):返回一个表示指定 int 值的 Integer 实例。
  • public static Integer valueOf(String s):返回保存指定的 String 的值的 Integer对象。

二、拆箱

成员方法:

  • int intValue() :以 int 类型返回 Intrger 的值。

自动装箱与自动拆箱

  • 基本数据类型和包装类之间可以自动的相互转换。
  • 从JDK 1.5+开始支持自动装箱与自动拆箱。

基本类型与字符串类型之间的相互转换

一、基本类型 --> 字符串类型

  1. 基本类型的值 + "" 最简单的方式(工作中常用)。
  2. 包装类的静态方法:toString(参数),不是Object类的toString(),是重载public static String toString(int i):返回一个表示指定整数的 String 对象。
  3. String类的静态方法:valueOf(int i):返回 int 参数的字符串表示形式。

二、字符串类型 --> 基本类型

  1. 使用包装类的静态方法 parseXXX("数值类型的字符串");

    Integer类:public static parseInt(String s)

    Double类:public static parseDouble(String s)
  1. // 基本类型 --> 字符串类型
  2. int i1 = 100;
  3. String s1 = i1 + "";
  4. System.out.println(s1); // 100
  5. int i2 = 100;
  6. String s2 = Integer.toString(i2);
  7. System.out.println(s2 + 200); // 100200
  8. int i3 = 100;
  9. String s3 = String.valueOf(i3);
  10. System.out.println(s2 + 200); // 100200
  11. // 字符串类型 --> 基本类型
  12. String s4 = "100200";
  13. int i4 = Integer.parseInt(s4);
  14. System.out.println(i4); // 100200

Java 常用API(二)的更多相关文章

  1. Java 常用API(一)

    目录 Java 常用API(一) 1. Scanner类 引用类型的一般使用步骤 Scanner的使用步骤 例题 2. 匿名对象 概述 匿名对象作为方法的参数 匿名对象作为方法的返回值 3. Rand ...

  2. Java常用API(Math类)

    Java常用API(Math类) Math类的作用 java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数.类似这样的工具 类,其所有方法均为静态方法,并且 ...

  3. Java常用API(Arrays类)

    Java常用API(Arrays类) 什么是Arrays类? java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等.其所有方法均为静态方法,调用起来 非常简单. 这里我们 ...

  4. Java常用API(String类)

    Java常用API(String类) 概述: java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例 1. ...

  5. Java常用API(ArrayList类)

    Java常用API(ArrayList类) 我们为什么要使用ArrayList类? 为了更加方便的储存对象,因为使用普通的数组来存储对象太过麻烦了,因为数组的一个很大的弱点就是长度从一开始就固定了,所 ...

  6. Java常用API(Random类)

    Java常用API(Random类) Random:是一个用于生成随机数的类 构造方法 public Random() :创建一个新的随机数生成器. 返回随机数的方法 public int nextI ...

  7. Java常用API(Scanner类)

    Java常用API( Scanner类)1 1.Scanner类 首先给大家介绍一下什么是JavaAPI API(Application Programming Interface),应用程序编程接口 ...

  8. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

  9. java常用API的总结(1)

    本篇是对于这一段时间以来接触到的常用api的一些总结,便于以后的查阅.... 一.正则表达式 对于正则表达式,我的感觉就是当我们在做某些题的时候正则表达式会省去我们很多的时间,并且正则表达式的使用格式 ...

随机推荐

  1. web中拖拽排序与java后台交互实现

    一.业务需求 1,在后台的管理界面通过排序功能直接进入排序界面 2,在排序界面能够人工的手动拖动需要排序的标题,完成对应的排序之后提交 3,在app或者是前端就有对应的排序实现了 二.页面展示 将整体 ...

  2. 自定义vue组件之仿百度分页逻辑

    <template> <div> <ul :total="total" :pageSize="pageSize" :pageNum ...

  3. C语言小练习之学生信息管理系统

    C语言小练习之学生信息管理系统 main.c文件   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 2 ...

  4. day28作业

    import os import uuid import pickle from conf import settings class School: def __init__(self,name,a ...

  5. L6循环神经网络

    循环神经网络 本节介绍循环神经网络,下图展示了如何基于循环神经网络实现语言模型.我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符.循环神经网络引入一个隐藏变量HHH,用HtH_{t}H ...

  6. icepdf和pdfbox转pdf文档为图片

    icepdf转pdf文档为图片 首先导入icepdf jar包或maven pdfPath为pdf文件路径.pdfimgpsth为图片保存的路径 public static void icePdfIm ...

  7. 下载mp4文件

    实现mp4文件的下载,而不是在线播放 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  8. 0day学习笔记(2)--函数调用

    函数调用过程 调用函数操作 函数参数入栈(在当前函数栈帧),从左至右或从右至左视情况而定 一般为从右至左 mov 地址,参数 的一个操作并不直接pop而是定位到地址将参数传递进去 call offse ...

  9. auth权限逻辑

    下面本人为大家讲解一下如何实现auth权限, 第一步,新建Auth.php,复制下面的代码,把注释中的表都创建一下.把文件放到extend新建文件夹org放进去即可, <?php // +--- ...

  10. 2019-2020-1 20199308《Linux内核原理与分析》第九周作业

    <Linux内核分析> 第八章 可执行程序工作原理进程的切换和系统的一般执行过程 8.1 知识点 进程调度的时机 ntel定义的中断类型主要有以下几种 硬中断(Interrupt) 软中断 ...