API(应用程序编程接口)

API是一些预先定义好的接口(如函数,HTTP接口)或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节

工具类的设计思想:

  • 构造方法用private修饰(防止外界创建对象)
  • 成员用public static修饰(强制用类名访问)

Math

Math包含执行基本数字运算的方法,成员均为静态,即可以通过类名调用,常用方法如下:

方法名 说明
public static int abs(int a) 返回参数的绝对值
public static double ceil(double a) 返回大于或等于参数的最小double值,等于一个整数
public static double floor(double a) 返回小于或等于参数的最大double值,等于一个整数
public static int round(float a) 按照四舍五入返回最接近参数的int
public static int max(int a,int b) 返回两个int值中较大值
public static int min(int a,int b) 返回两个int值中较小值
public static double pow(double a,double b) 返回a的b次幂的值
public static double random() 返回值为double的正值,[0.0,1.0)

System

System包含几个有用的类字段和方法,不能被实例化,常用方法如下:

方法名 说明
public static void exit(int status) 终止当前运行的Java虚拟机,非零表示异常终止
public static long currentTimeMillis() 返回当前时间(以毫秒为单位)

其中currentTimeMillis()方法可通过记录开始和结束时间相减,计算程序运行时间

Object

Object是类层次结构的根,每个类都可以将Object作为超类(父类),所有类都直接或者间接的继承自该类

构造方法:public Object()

常用方法如下:

方法名 说明
public String toString() 用于返回一个简明扼要的字符串来描述该对象,默认为“包名+类名+@+存储地址”,推荐子类重写
public boolean equals(Object obj) 比较对象是否相等,默认比较地址,重写可以比较内容

IDEA编译器中可用Alt+Insert自动生成子类的重写方法

Arrays

Arrays类包含用于操作数组的各种方法

方法名 说明
public static String toString(int[] a) 返回指定数组的内容的字符串表示形式
public static void sort(int[] a) 按照数字顺序排列指定的数组

基本类型包装类

将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据,常用的操作之一是用于基本数据类型与字符串之间的转换

基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

自动装箱和拆箱

  • 装箱:把基本数据类型转换为对应的包装类类型

    Integer i=Integer.valueOf(100);//装箱
    Integer ii=100;//自动装箱,自动转换成上一行代码
  • 拆箱:把包装类类型转换为对应的基本数据类型

    Integer i=100;
    i=i.intValue()+200;//先拆箱,再自动装箱
    i+=200;//自动拆箱,自动装箱

    注:在使用包装类类型的时候,如果做操作,最好先判断不为null,推荐只要是对象,在使用前就必须进行不为null的判断

日期类

Date

Date代表了一个特定的时间,精确到毫秒

方法名 说明
public Date() 分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
public Date(long date) 分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
public long getTime() 获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
public void setTime(long time) 设置时间,给的是毫秒值

SimpleDateFormat

用于以区域设置敏感的方式格式化和解析日期,日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从‘A’到‘Z’以及从‘a’到‘z’引号的字符被解释为表示日期或时间字符串的组件的模式字母

常用模式字母对应如下:

  • y——年
  • M——月
  • d——日
  • H——时
  • m——分
  • s——秒

构造方法

方法名 说明
public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat,使用给定的模式和默认的日期格式

其中String pattern使用常用模式字母书写,如:2021年08月09日 21:24:19,对应的pattern写作:“yyyy年MM月dd日 HH:mm:ss”

常用方法

方法名 说明
public final String format(Date date) (Date到String)从将日期格式化成日期/时间字符串
public Date parse(String source) (String到Date)从给定字符串的开始解析文本以生成日期

使用parse方法时,需要SimpleDateFormat对象的模式和字符串内容模式相符,且需要抛出异常或用try/catch包围,后者在IDEA中可使用Alt+Enter选择解决方案进行自动修改

Calendar

Calendar为某一时刻和一组日历字段之间的转换提供了一些方法,并未操作日历字段提供了一些方法

Calendar提供一个类方法get Instance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:

Calendar rightNow=Calendar.getInstance();

对已有的Calendar对象,可以使用方法名为:public int get(int field) 的方法获取具体的日历字段,例如:

int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;
//MONTH是从0开始计算的,故而在获取值的基础上+1
int date=c.get(Calendar.DATE);

其他常用方法:

方法名 说明
public abstract void add(int field,int amount) 根据日历的规则,将指定的时间量(field)添加或减去给定的日历字段(amount)
public final void set(int year,int month,int date) 设置当前日历的年月日

异常

异常即程序出现了非正常的情况,所有错误或异常均为Thowable类的直接子类或间接子类,异常体系如下:

1

Error:严重问题,不需要处理

Exception:称为异常类,它表示程序本身可以处理的问题

  • RuntimeException(运行时异常):也称非受检异常,在编译期不检查,出现问题后需要重新修改代码
  • 非RuntimeException(编译时异常):也称受检异常,编译期必须处理,否则程序不能通过编译,更不能正常运行

JVM的默认处理方案

在程序出现问题且没有做任何处理时,JVM会做默认的处理:

  1. 将异常名称,原因,以及出现的位置等信息输出在控制台
  2. 程序停止执行

Throwable的成员方法

方法名 说明
public String getMessage() 返回此throwable的详细消息字符串
public String toString() 返回此throwable的简短描述
public void printStackTrace() 把异常的错误信息输出在控制台

异常处理

如果程序出现异常,有两种处理方案:

  • try…catch…
  • throws

try…catch…

try{
可能出现异常的代码;
} catch(异常类名 变量名){
异常的处理代码;
}

执行流程:

  1. 程序从try中的代码开始执行
  2. 出现异常时自动生成一个异常类对象,该异常类对象将被提交给Java运行时系统
  3. 当Java运行时系统接收到异常对象时,会到catch中找匹配的异常类,找到后进行异常的处理
  4. 执行完毕后,程序还可以继续往下执行

throws

对于try…catch…处理程序异常,但是并不是所有的情况我们都有权限进行异常处理,所以提供了另一种throws的处理方案

throws 异常类名; //这个格式跟随在方法的括号后写
例如:
public static void method throws ArrayIndexOutOfBoundsException{
//此处省略方法实现
}

通过throws抛出异常实际上并没有处理异常,只是在方法内运行发生异常时,将该异常抛出,在调用方法时仍旧需要用try…catch…处理异常

自定义异常

Java已经提供的异常不一定能满足程序的所有需求,故而产生了自定义异常,实际上就是让自定义的类继承自Exception或RuntimeException类

public class 异常类名 extends Exception/RuntimeException{
无参构造
带参构造
/*
一般带参构造为:
public 异常类名(String message){
super(message); //让异常信息逐层调用父类构造
}
*/
}

在其他类中,可以使用以下语句抛出异常:

throw new 异常类名();

且对继承自Exception的异常类,在含有该抛出异常对象语句的方法也应抛出对应的异常类,如继承自RuntimeException类则不必要

throw和throws的区别

throws throw
用在方法声明后面,跟的是异常类名 用在方法体内,跟的是异常对象名
表示抛出异常,由该方法的调用者来处理 表示抛出异常,由方法体内的语句处理
表示出现异常的一种可能性,并不一定会发生异常 执行throw一定是抛出了某种异常