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方法覆盖重写 了,比较的是字符串的内容。

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

解决:使用向下转型。

  • 示例:
// Person.java
public class Person {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} // 覆盖重写Object类中的toString方法
@Override
public String toString() {
return "Person{" + "name='" + name + "\'" + ", age=" + age + "}";
} // 覆盖重写Object类的equals方法
@Override
public boolean equals(Object obj) {
// 判断是否等于自身
if (obj == this){
return true;
}
// 判断是否为空
if (obj == null){
return false;
}
// 判断是否为自定义的Person类
if (obj instanceof Person){
// 向下转型
Person person = (Person)obj;
return person.age == this.age && person.name.equals(this.name);
}
// 不是Person类直接返回false
return false;
}
/*
// 使用 alt + ins 添加的
@Override
public boolean equals(Object o) {
if (this == o) return true;
// getClass()是使用反射技术判断 o 是否是Person类型 等效于 o instanceof Person
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
*/ public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
} // Demo02Main.java import java.util.ArrayList; public class Demo02Main {
public static void main(String[] args) {
Person one = new Person("迪丽热巴", 20);
Person two = new Person("迪丽热巴", 20); System.out.println(one); // 没有重写之前打印的是地址值
one.toString(); // Person{name='迪丽热巴', age=20}
// System.out.println(one.toString()); // 没有重写之前打印的也是地址值
System.out.println(one.equals(two)); // true
System.out.println(one == two); // false }
}
  • 关于Objects类的介绍

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

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

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

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

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

构造方法和成员方法

Date类的空参构造

  • Date():获取当前系统的时间和日期。
import java.util.Date;

public class DemoDate {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date); // Mon Aug 12 11:18:35 CST 2019
} }

Date类的带参构造

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

Date类的成员方法:

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

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 自己处理。
  • 示例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; public class DemoSimpleDateFormat {
public static void main(String[] args) throws ParseException {
// 首先将当前 Date格式化为 String
// pattern:yyyy-MM-dd HH-mm-ss
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 创建一个Date对象
Date date = new Date(); // 调用SimpleDateFormat类中的format方法
String format = sdf.format(date);
System.out.println(format); // 2019-08-12 12:24:57 // 将String解析为Date类
Date parse = sdf.parse(format);
System.out.println(parse); // Mon Aug 12 12:24:14 CST 2019 }
}

练习

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

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()用来测试系统的运行时间

public class DemoSystem {
public static void main(String[] args) {
long start = System.currentTimeMillis(); int sum = 0;
for (int i = 0; i < 9999; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
long time = end - start;
System.out.println("程序耗时:" + time);
}
}

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)
// 基本类型 --> 字符串类型
int i1 = 100;
String s1 = i1 + "";
System.out.println(s1); // 100 int i2 = 100;
String s2 = Integer.toString(i2);
System.out.println(s2 + 200); // 100200 int i3 = 100;
String s3 = String.valueOf(i3);
System.out.println(s2 + 200); // 100200 // 字符串类型 --> 基本类型
String s4 = "100200";
int i4 = Integer.parseInt(s4);
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. AJ学IOS(45)之常用的小功能比如打电话、打开网址、发邮件、发短信打开其他应用。

    AJ分享,必须精品 简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信.打开其他应用等. 打电话 方法1 最简单最直接的方式:直接跳到拨号界面 NSURL ...

  2. eclipse git 文件状态 及git分支的创建与合并与删除

    eclipse里面Git文件状态及图标展示   EGit会出现如下图标,其对应状态及意义如下:      1)忽略[ ignored ]:仓库认为该文件不存在(如bin目录,不需要关注).通过右键Te ...

  3. C# 序列化之二进制

    序列化:又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. 一般有三种方式:1.是使用BinaryF ...

  4. Java中的二分查找

    二分查找:(折半查找) 前提:数组必须是有序的. 思想:每次都猜中间的那个元素,比较大或者小,就能减少一半的元素.思路:A:定义最小索引,最大索引. B:比较出中间索引 C:拿中间索引的值和要查找的元 ...

  5. 新的知识点来了-ES6 Proxy代理 和 去银行存款有什么关系?

    ES给开发者提供了一个新特性:Proxy,就是代理的意思.也就是我们这一节要介绍的知识点. 以前,ATM还没有那么流行的时候(暴露年纪),我们去银行存款或者取款的时候,需要在柜台前排队,等柜台工作人员 ...

  6. Spring Boot中只能有一个WebMvcConfigurationSupport配置类

    首先将结论写文章的最前面,一个项目中只能有一个继承WebMvcConfigurationSupport的@Configuration类(使用@EnableMvc效果相同),如果存在多个这样的类,只有一 ...

  7. vagrant + 宝塔 环境搭建遇到的一些问题

    1.js时间戳单位为毫秒,php时间戳为秒. 2.tp里的where()方法如果where("id=".$id)不能用的话就用数组形式的:where(array("id& ...

  8. 点击 QTableView,触发事件

    Here is an example of how you can get a table cell's text when clicking on it. Suppose a QTableView ...

  9. Makefile 简要辅导 【转载】

    A Simple Makefile Tutorial Makefiles are a simple way to organize code compilation. This tutorial do ...

  10. opencv-10-图像滤波-噪声添加与均值滤波-含opencv C++ 代码实现

    开始之前 再说上一篇文章中, 我们想按照噪声产生, 然后将降噪的, 但是限于篇幅, 我就放在这一篇里面了, 说起图像的噪声问题就又回到了我们上一章的内容, 把噪声当作信号处理, 实际上数字图像处理实际 ...