Java常用工具-API
1. API简介
什么是API?
Application Programming Interface,应用程序编程接口,这里指的是API文档,通常叫"Java文档",是Java中提供的类的说明书。
为什么学习API文档?
发挥面向对象思想,照到Java提供的对象来实现功能,学习API文档就是学习Java中的类的使用方法。
Java中组件的层次结构
模块(module)-> 包(package) -> 类或接口(class/interface)
什么是模块?
module,自JAVA9起提供的一种新的Java基础组件,在包(package)的基础上又进行了一层封装,是包的容器。
- JavaSE Modules
Java语言的核心类库,其下的模块名多以java开头 - JDK Modules
Java开发工具相关内容,其下的模块多以jdk开头
2. Object类
- 代码演示
/*
结论:
java.lang包下的类可以直接使用,不需要导包
*/
public class Test {
public static void main(String[] args) {
// 非静态方法的调用方式:通过对象名. 的形式调用
//1. 创建Object类型的对象
Object obj1 = new Object();
Object obj2 = new Object();
//2. 调试Object类中的成员方法
//int hashCode(); 返回对象的哈希码值 不同对象的哈希码值一般不同
int code1 = obj1.hashCode();
int code2 = obj2.hashCode();
System.out.println(code1);
System.out.println(code2);
System.out.println("--------------------");
// Class<?> getClass(); 返回值调用者的字节码文件对象,一个类只有一个字节码文件对象
Class clazz1 = obj1.getClass();
Class clazz2 = obj2.getClass();
System.out.println(clazz1);
System.out.println(clazz2);
System.out.println("--------------------");
//String toString(); 返回值对象的字符串表示形式,默认打印的是地址值,但是不同对象的地址值肯定不同
//地址值的组成:全类名 + @ + 该对象的哈希码的无符号十六进制形式
String s1 = obj1.toString();
String s2 = obj2.toString();
System.out.println(s1);
System.out.println(s2);
System.out.println("--------------------");
//boolean equals(); 比较两个对象是否相等,默认比较的是地址值,无意义,子类一般都会重写这个方法
boolean b1 = obj1.equals(obj2);
System.out.println(b1);
}
}
- 运行结果
- 代码演示
import java.util.Objects;
//学生类
public class Student {
//成员变量
private int id; //编号
private String name; //姓名
private int score; //成绩
//构造方法
public Student() {
}
public Student(int id, String name, int score) {
this.id = id;
this.name = name;
this.score = score;
}
//成员方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
//toString() 用来将对象转换成其他对应的字符串形式
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", score=" + score +
'}';
}
//equals()方法 用来比较两个对象是否相同的
//自定义版的重写equals()方法,过程理解即可
//假设id属性值相同,两个对象就是同一个对象
/*public boolean equals(Object obj) { //s1.equals
*//*
this. 谁调用, this就表示谁 s1
obj:s2
*//*
//向下转型
Student s2 = (Student) obj;
return this.id == s2.id;
}*/
//通过快捷键的方式生成,步骤掌握,代码理解
@Override
public boolean equals(Object o) { //s1.equals(s2)
//this:s1 o:s2
//比较两个对象的地址值是否相同,提高效率
//补充:如果if语句控制的语句体只有一行代码,那么()可以省略不写
if (this == o) return true;
//判断要比较的两个对象是否是同一个类型的对象,提高程序的健壮性
if (o == null || getClass() != o.getClass()) return false;
//向下转型,正常的逻辑代码
Student student = (Student) o;
return id == student.id &&
score == student.score &&
name.equals(student.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name, score);
}
}
/*
注意:实际开发中,我们把两个对象的各个属性值都相同的情况下,才会认为这两个对象是同一个对象
*/
public class Test {
public static void main(String[] args) {
//测试toString() 方法
//创建学生类的对象
Student s1 = new Student(1,"欧阳修",66);
//输出语句直接打印对象,默认调用了该对象的toString()方法
System.out.println(s1);
System.out.println(s1.toString());
//调试equals方法 s1.equals(s2)
Student s2 = new Student(1, "欧阳修", 66);
boolean b1 = s1.equals(s2);
System.out.println(b1);
}
}
- 运行结果
3. Scanner类
- 代码演示
import java.util.Scanner;
/*
注意:
在实际开发中,应用到的最多最多的方法就是:
nextInt(); 用来接收整数
nextLine(); 用来接收字符串
*/
public class Test {
public static void main(String[] args) {
//创建Scanner类型的对象(注意:要导包)
//System.in:标准的输入流,默认指向键盘
Scanner sc = new Scanner(System.in);
//接收整数
/*System.out.println("请录入一个整数:");
//为了解决(避免)InputMismatchException异常,可以加入一个判断
if (sc.hasNextInt()){ //判断下一个录入的是否是整数,如果是,结果就是true
int num = sc.nextInt();
System.out.println("num" + num);
}*/
//接收字符串类型的数据
System.out.println("请录入一个字符串");
/*String str1 = sc.nextLine(); //结束标记是:换行符
System.out.println("str1:" + str1);*/
String str2 = sc.next(); //结束标记:空白字符(空格,tab,enter)
System.out.println("str2:" + str2);
}
}
- 运行结果
4. String类
Demo1
- 代码演示
public class Test {
public static void main(String[] args) {
//调试 构造方法
//1. 将指定的字节数组转成字符串
//'a':97
byte[] bys = {97, 98, 99};
String s1 = new String(bys);
System.out.println("s1:" + s1);
//2. 将指定的字符数组转成字符串
char[] chs = {'h', 'e', 'l', 'l','o'};
String s2 = new String(chs);
System.out.println("s2:" + s2);
//在实际开发中,String类非常非常常用,每次都new很麻烦,于是针对String的语法做了优化,省去了new的动作
String s3 = "abc"; //免new
//String s2 = new String("abc");
System.out.println("----------------------");
//测试成员方法
String str1 = "abc";
String str2 = "ABC";
//boolean equals(String); 判断当前字符串与给定字符串是否相同,区分大小写
boolean b1 = str1.equals(str2);
System.out.println("equals():" + b1);
// boolean equalsIgnoreCase(String); 判断当前字符串与给定字符串是否相同,不区分大小写
boolean b2 = str1.equalsIgnoreCase(str2);
System.out.println("equalsIgnoreCase():" + b2);
//boolean startWith(String) 判断是否以给定字符串开头
//需求:判断字符串str1,是否以字符串'a'开头
boolean b3 = str1.startsWith("a");
System.out.println("startsWith():" + b3);
//boolean isEmpty(); 判断字符串是否为空
String str3 = "hello";
boolean b4 = str3.isEmpty();
System.out.println("str3.isEmpty():" + b4);
}
}
- 运行结果
Demo2
代码演示
public class Test {
public static void main(String[] args) {
//定义一个字符串
String str = "java 你好呀 java";
//int length(); 获取当前字符串的长度
//int length = str.length();
System.out.println(str.length());
//char charAt(int index); 获取指定索引位置的字符
char ch = str.charAt(1);
//int indexOf(String); 获取指定字符(串)第一次出现的索引
//需求:字符‘a’第一次出现的位置
int index1 = str.indexOf('a');
System.out.println("index1:" + index1);
//int lastIndexOf(String); 获取指定字符(串)最后一次出现的索引
//需求:字符'a'最后一次出现的位置
int index2 = str.lastIndexOf('a');
System.out.println("index2:" + index2);
//String substring(int); 获取指定索引位置(含)之后的字符串
//需求:截取从索引5开始的所有元素
String s1 = str.substring(5);
System.out.println("s1:" + s1);
//String substring(int, int); 获取从索引start位置(含)起至索引end位置(不含)的字符串
//需求:截取索引5,10的所有元素
String s2 = str.substring(5,10);
System.out.println("s2:" + s2);
}
}
运行结果
Demo3
代码演示
public class Test {
public static void main(String[] args) {
//定义一个字符串
String s1 = "abc";
//byte[] getBytes(); 将字符串转换成字节数组
byte[] bys = s1.getBytes();
for (int i = 0; i < bys.length; i++) {
System.out.println(bys[i]);
}
System.out.println("----------");
//char[] toCharArray(); 将字符串转换成字符数组
char[] chs = s1.toCharArray();
for (int i = 0; i < chs.length; i++) {
System.out.println(chs[i]);
}
System.out.println("----------");
//static String valueOf(..); 将指定类型数据转换成字符串
//整数123 -> 字符串"123"
String s2 = String.valueOf(123);
System.out.println(s2 + 4);
//在实际开发中,上诉的方式基本上都会用下边的这行代码代替
String s3 = "" + 123;
System.out.println(s3 + 4);
//String replace(old, new); 将指定字符(串)替换成新的字符(串)
String s4 = "abc abc abc";
//'d' 替换 ‘b’
String s5 = s4.replace('b','d');
System.out.println(s5);
//String[] split(String); 切割字符串,返回切割后的字符串数据,原字符串不变
//将字符串s4,按照空格进行切割
//"abc" "abc" "abc";
String[] arr = s4.split(" ");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
//String trim(); 去掉字符串两端的空白字符
String s6 = " a b c ";
String s7 = s6.trim();
System.out.println("s6:" + s6);
System.out.println("s7:" + s7);
}
}
运行结果
5. StringBuilder和StringBuffer类
代码演示
public class Test {
public static void main(String[] args) {
//测试构造方法
//测试空参构造
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = sb.append("abc");
System.out.println("sb:" + sb);
System.out.println("sb2:" + sb2);
System.out.println("------------------");
//需求:将String类型的"abc"转成StringBuilder类型的对象
StringBuilder sb3 = new StringBuilder("abc");
System.out.println("sb3:" + sb3);
System.out.println("------------------");
//测试成员方法
//需求:将三个字符串拼接成一个新的字符串:你好 我的名字是 张三;
StringBuilder sb4 = new StringBuilder();
sb4.append("你好");
sb4.append("我的名字是");
sb4.append("张三");
System.out.println("sb4:" + sb4);
System.out.println("------------------");
String s = sb4.toString();
System.out.println("字符串s:" + s);
}
}
运行结果
6. Date和Calender类
Demo1
代码演示
import java.util.Date;
public class Test {
public static void main(String[] args) {
//测试Date类
//测试空参构造,采用当前操作系统的默认时间
Date date1 = new Date();
System.out.println("date1:" + date1);
//获取当前操作系统时间的毫秒值
long time = date1.getTime();
System.out.println("time:" + time);
//Mon Mar 22 14:04:27 CST 2021 -> 1616393067042
//创建一个指定的时间
Date date2 = new Date(1616393067042L);
System.out.println("date2:" + date2);
}
}
运行结果
Demo2
代码演示
import java.util.Calendar;
public class Test2 {
public static void main(String[] args) {
//创建Calendar类型的对象
Calendar c = Calendar.getInstance();
System.out.println(c);
//获取年月日的信息
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH); //Java中使用0-11的数字表示月份的,对应1-12月
int day = c.get(Calendar.DATE);
System.out.println(year + "年" + (month + 1) + "月" + day + "日");
//设置指定时间对:2022年2月2日
/*c.set(Calendar.YEAR,2022);
int year2 = c.get(Calendar.YEAR);
System.out.println(year2 + "年" + (month + 1) + "月" + day + "日");*/
c.set(2022,1,2);
//重新获取年月日的值
int year2 = c.get(Calendar.YEAR);
int month2 = c.get(Calendar.MONTH); //Java中使用0-11的数字表示月份的,对应1-12月
int day2 = c.get(Calendar.DATE);
System.out.println(year2 + "年" + (month2 + 1) + "月" + day2 + "日");
}
}
运行结果
7. 基本类型和包装类
代码演示
/*
装箱
基本类型转包装类型(对象类型)
拆箱
包装类型(对象类型)转基本类型
成员方法
static 基本类型 parseXxx(String); 将字符串类型的数据转换成对应的基本类型
例如:
static int parseInt(String); 将字符串类型的整数转换成对应的int类型的整数
注意:
除了Character类以外,其他的7中包装类都有parseXxx()方法
因为如果字符串想转换成char类型的数据,可以通过:String类中的方法toCharArray(), charAt();
*/
public class Test {
public static void main(String[] args) {
//变量a属于基本类型,不能通过 对象名. 的形式调用方法
//解决方法:将其转换成对应的 包装类(引用类型)即可
int a = 10;
//装箱
Integer i1 = new Integer(20);
//拆箱
int b = i1.intValue();
System.out.println(i1);
System.out.println(b);
System.out.println("------------------");
//JDK5的新特性,自动拆装箱
Integer i2 = 30; //装箱
int c = i2; //拆箱
System.out.println("------------------");
//需求:将字符串类型的“10”,转换成int类型的 10
String s = "10";
int num = Integer.parseInt(s);
System.out.println("num:" + num);
System.out.println("num + 100 = " + (num + 100));
}
}
运行结果