Java常用API与异常

常用API

  1. Math
    Math类包含了基本的数字运算方法
    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)
  1. System
    System类的常用方法
方法名说明
public static void exit(int status)终止当前运行的 Java 虚拟机,非零表示异常终止
public static long currentTimeMillis()返回当前时间(以毫秒为单位)
使用currentTimeMillis()可以计算代码的运行时间,也可以通过Date来实现。
  1. toString
    所有的toString方法都继承与Object类,一般使用toString方法输出类的信息,通常可以通过编辑器自动生成。类似于get和set方法。
  2. equals()
    equals方法用于返回对象之间的比较,返回布尔类型,equals方法比较的是具体的内容,和==有些许不同。
    如过equals方法不满足需求,可以选择重写方法。equals方法也可以通过编辑器自动重写。
  3. BigDecimat
    这个类的作用是为了精度计算使用的,由于二进制的限制,精度会有误差,为了解决这个问题使用这个类来解决。

构造方法

方法名说明
BigDecimal(double val)参数为double
BigDecimal(String val)参数为String

常用方法

方法名说明
public BigDecimal add(另一个BigDecimal对象)加法
public BigDecimal subtract (另一个BigDecimal对象)减法
public BigDecimal multiply (另一个BigDecimal对象)乘法
public BigDecimal divide (另一个BigDecimal对象)除法
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式)除法

BigDecimal 用来进行精度计算,经常使用在金融领域,构造对象时使用字符串。

String类

String 类是不可变的,这意味着一旦创建了字符串对象,其值就无法更改。这是因为 Java 中的字符串池(String Pool)的设计。每当我们创建一个字符串时,它会被存储在字符串池中。如果我们尝试修改字符串的值,实际上是创建了一个新的字符串对象,而原始字符串保持不变。这对于字符串的安全性和性能都有好处。

  • 使用构造方法创建
    使用new创建字符串对象,会在堆空间里面申请一个内存空间,如果在字符串常量池里面有这个字符串会直接引用,如果没有就在池中创建。
  • 直接赋值创建
    直接赋值创建会直接在字符串常量池中创建对应的对象,有就直接指向,在字符串池中的字符串可以共享。

String类常用方法

方法名说明
public char charAt(int index)返回 char指定索引处的值
public boolean equals(Object anObject)将此字符串与指定对象进行比较
public int hashCode()返回此字符串的哈希码
public int length()返回此字符串的长度
public boolean matches(String regex)告诉这个字符串是否匹配给定的 regular expression
public boolean replace(char oldChar, char newChar)返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。
public String[] split(String regex)将此字符串分割为给定的 regular expression的匹配。
public String substring(int beginIndex)返回一个字符串,该字符串是此字符串的子字符串

StringBuilder

当我们使用“+”来链接字符串的时候,其底层是怎么实现的。就是使用的stringBuilder来实现的,StringBuilder是String的一个拓展,是为了在大规模字符串拼接的场景中使用的,当作字符串拼接的时候,会在堆空间创建一个StringBuilder对象,这个对象会将拼接的字符串通过append方法来拼接,最后通过toString方法化为String对象,这个时候String对象存储在堆空间中。

StringBuffer

StringBuffer和StringBuild的功能几乎完全一致,差别就在于Stringbuffer是线程安全的,可以在多线程的情况下使用,StringBuild则是线程不安全的,不能在多线程情况下使用。

包装类

包装类(Wrapper Class)是 Java 中用于将原始数据类型(如 int、char、float 等)转换为相应对象的类。这些包装类位于 java.lang 包中,用于解决基本数据类型无法直接参与面向对象操作的问题。

自动拆箱

将包装对象转换为原始类型
要将包装对象转换回原始类型,我们可以使用每个包装类中对应的值方法,例如 intValue()、doubleValue() 等。以下示例演示了如何将包装对象转换为原始类型:

Integer aObj = Integer.valueOf(23);
Double bObj = Double.valueOf(5.55);

int a = aObj.intValue();
double b = bObj.doubleValue();

System.out.println("a 的值:" + a);
System.out.println("b 的值:" + b);

自动装箱

将基本类型转换为包装对象,我们可以使用 valueOf() 方法将原始类型转换为相应的包装对象。例如,以下示例演示了如何将原始类型转换为包装对象:

int a = 5;
double b = 5.65;

Integer aObj = Integer.valueOf(a);
Double bObj = Double.valueOf(b);

if (aObj instanceof Integer) {
    System.out.println("创建一个 Integer 对象。");
}
if (bObj instanceof Double) {
    System.out.println("创建一个 Double 对象。");
}

缓存机制

包装类的缓存机制是 Java 中的一个有趣特性,它有助于节省内存并提高性能。

  • 当通过自动装箱创建包装类对象时,首先会判断数值是否在缓存范围内(通常是 -128 到 127)。
  • 如果在缓存范围内,会从缓存中寻找指定数值对应的包装类对象,而不是新建对象。
  • 如果不在缓存范围内,会创建一个新的对象。
  • Integer、Byte、Short、Long、Character 这五个包装类都有缓存机制,范围是 -128 到 127。Float、Double、Boolean 这三个包装类没有缓存机制。

时间日期类

java提供了许多用于处理日期和时间的类,方便使用者直接调用。

Date

  • Date 类是 Java 最早的日期和时间类之一,但它已被弃用。
  • 它表示自 1970 年 1 月 1 日 00:00:00 GMT(格林尼治标准时间)以来的毫秒数。
  • Date 对象创建后,可以调用以下方法:
    • after(Date date):判断当前 Date 对象是否在指定日期之后。
    • before(Date date):判断当前 Date 对象是否在指定日期之前。
    • getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。
      其他方法如 clone(), compareTo(), equals(), hashCode() 等。

SimpleDateformat

这个类是用于Date对象的拓展处理,但只能完成一些简单的操作,主要用于以区域设置敏感的方式格式化和解析日期。
SimpleDateformat的构造方法

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

SimpleDateformat常用方法

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

LocalDateTime

Java 8 引入了 java.time 包,其中包含了新的日期时间类,LocalDate,LocalTime,LocalDateTime,这些类能够更加精确的表示日期和时间,避免了以前Date类的一些问题。
常用方法

方法名说明
public static LocalDateTime now()获取当前系统时间
public static LocalDateTime of (年, 月 , 日, 时, 分, 秒)使用指定年月日和时分秒初始化一个LocalDateTime对象

例如:

public class JDK8DateDemo2 {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);

        LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
        System.out.println(localDateTime);
    }
}

LocalDateTime还有许多方便的方法用于获取具体的日期或者时间。

方法名说明
public int getYear()获取年
public int getMonthValue()获取月份(1-12)
public int getDayOfMonth()获取月份中的第几天(1-31)
public int getDayOfYear()获取一年中的第几天(1-366)
public DayOfWeek getDayOfWeek()获取星期
public int getMinute()获取分钟
public int getHour()获取小时

DateTimeFormatter

LocalDateTime也提供了可以解析和格式化的方法,也就是DateTimeformatter用于获取日期模板。

public class Test2 {
    public static void main(String[] args) throws ParseException {
        Test2.func1("2000-10-01 12:20:12");
        Test2.func2(LocalDateTime.now());
    }
    // 解析
    public static void func1(String date){
        DateTimeFormatter fm = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime a = LocalDateTime.parse(date,fm);
        System.out.println(a);
    }
    // 格式化
    public static void func2(LocalDateTime date){
        DateTimeFormatter fm = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
        String b = date.format(fm);
        System.out.println(b);
    }
}

其中func1能够将String类型的字符串日期解析成LocalDateTime对象,而func2则是将Local DATe Time对象解析成需要的字符串形式。

异常处理

在 Java 中,异常处理是一种重要的编程概念,用于处理程序执行过程中可能出现的错误或异常情况。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

Exception

在Exception中也分为两个异常。

  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这些异常在编译时强制要求程序员处理。例如,要打开一个不存在的文件时,就会抛出异常。这类异常通常使用 try-catch 块来捕获并处理,或者在方法声明中使用 throws 子句声明方法可能抛出的异常。
try {
    // 可能会抛出异常的代码
} catch (IOException e) {
    // 处理异常的代码
}

public void readFile() throws IOException {
    // 可能会抛出 IOException 的代码
}

可以使用try-catch来捕捉异常,也可以使用trrows来向上抛出异常,将异常交给上一级处理,异常会一直向上抛出,直到mian方法抛出,jvm处理时选择停止程序并抛出异常。

  • 非检查时异常(运行时异常)这些异常在编译时不强制要求处理,通常是由程序中的错误引起的,例如 NullPointerException、ArrayIndexOutOfBoundsException 等。这类异常可以选择处理,但并非强制要求。
try {
    // 可能会抛出异常的代码
} catch (NullPointerException e) {
    // 处理异常的代码
}

注意事项

  1. 如果 try 中没有遇到问题,怎么执行?

    会把try中所有的代码全部执行完毕,不会执行catch里面的代码

  2. 如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?

    那么直接跳转到对应的catch语句中,try下面的代码就不会再执行了
    当catch里面的语句全部执行完毕,表示整个体系全部执行完全,继续执行下面的代码

  3. 如果出现的问题没有被捕获,那么程序如何运行?

    那么try…catch就相当于没有写.那么也就是自己没有处理.
    默认交给虚拟机处理.

  4. 同时有可能出现多个异常怎么处理?

    出现多个异常,那么就写多个catch就可以了.
    注意点:如果多个异常之间存在子父类关系.那么父类一定要写在下面

finally与return
我们直到ruturn有程序执行完毕的意思,而finally语句又是语句最后一定会执行的,那么它们的优先级又是怎样的呢。

public class Test2 {
    public static void main(String[] args) {
        Test2 t = new Test2();
        System.out.println(t.exceptionDemo());
    }

    public int exceptionDemo(){
        int a = 2;
        try {
            if (a==2){
                // 主动抛出异常
                throw new ArrayIndexOutOfBoundsException();
            }
            a = a+1;
        }catch (ArrayIndexOutOfBoundsException e){
            return a;
        }finally {
            return a+1;
            // a = a+1;
        }
    }
}

在这个代码里面,首先执行try里面的语句,当判断a等于2时,主动抛出异常,异常会被catch捕获,执行catch中的语句,但是当在finally也具有return的时候,最终返回的是以finally中的return为准的。如果在finally里面对return的值进行了更改,是不会影响前面返回的值(基本数据类型)。

Error

错误不是异常,而是脱离程序员控制的问题,例如栈溢出。它们在编译时也检查不到。这些问题一般为jvm出现的问题,一般不由程序员处理。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值