常用API与异常

String和StringBuilder

String方法

public boolean equals(Object anObject) 比较字符串的内容,严格区分大小写

public boolean equalsIgnoreCase(String anotherString) 比较字符串的内容,忽略大小写

public int length() 返回此字符串的长度

public char charAt(int index) 返回指定索引处的 char 值

public char[] toCharArray() 将字符串拆分为字符数组后返回

public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包含头,不包含尾)

public String substring(int beginIndex) 从传入的索引处截取,截取到末尾,得到新的字符串

public String replace(CharSequence target, CharSequence replacement) 使用新值,将字符串中的旧值替换,得到新的字符串

public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组

 字符串常量池和堆内存

  1. String s = “1”+ “1”创建了几个字符串对象?

1 就是string

  1. String s = new String(“1”)+ new String(“1”)创建了几个字符串对象?

5个new String(“1”)两个

Stringbuder1

Tostring一个

11一个

 

StringBuilder 

默认长度16

扩容方法是两倍加2

1. 构造方法:
   - `StringBuilder()`: 创建一个空的 `StringBuilder` 实例。
   - `StringBuilder(String str)`: 创建一个 `StringBuilder` 实例,并将其初始化为指定的字符串内容。2. 追加内容:

   - `append(String str)`: 在 `StringBuilder` 的末尾追加指定的字符串。
   - `append(char c)`: 追加单个字符。
   - `append(int num)` 或其他基本类型:将各种基本类型数据转换为字符串后追加。
   - `append(Object obj)`: 调用对象的 `toString()` 方法,然后追加结果。

3. 插入内容:
   - `insert(int offset, String str)`: 在指定位置插入字符串。
   - `insert(int offset, char c)` 或其他类型:在指定位置插入字符或其它类型的数据。

4. 替换内容*:
   - `replace(int start, int end, String str)`: 替换指定范围内的字符序列。

5. 删除内容:
   - `delete(int start, int end)`: 删除指定范围内的字符序列。

6. 反转字符串:
   - `everse(): 反转 `StringBuilder` 中的字符序列。

7. 获取字符串:
   - `toString()`: 返回由 `StringBuilder` 包含的字符序列组成的字符串。

8. 查找和索引:
   - `indexOf(String str)`: 返回指定字符串第一次出现的索引,未找到返回-1。
   - `lastIndexOf(String str)`: 返回指定字符串最后一次出现的索引。

9. 设置字符:
   - `setCharAt(int index, char ch)`: 将指定位置的字符设置为给定的字符。

10. 增加容量:
    - `ensureCapacity(int minimumCapacity)`: 确保 `StringBuilder` 至少具有指定的容量。

11. 截取字符串:
    - `substring(int start)` 或 `substring(int start, int end)`:返回从指定位置开始到结尾或指定范围的子字符串。

StringBuilder类和String类的区别

  • String类:内容是不可变的

  • StringBuilder类:内容是可变的

  • 0

创建字符串对象的区别对比

  • 通过构造方法创建

    通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同

  • 直接赋值方式创建

    以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护

 

String和StringBuilder和StringBuffer

`String`、`StringBuilder`、和 `StringBuffer` 都是Java中用于处理字符串的类,但它们在特性和适用场景上有所不同:

String

String对象一旦被创建,其内容就不能被改变。这意味着每次对字符串的操作,如拼接、截取等,都会生成一个新的String对象,而原始对象保持不变。这种设计确保了多个线程同时访问同一个String对象时,不会看到对象状态的改变,从而避免了线程间的同步问题。
-特点:字符串常量,不可变。每次对字符串的操作(如拼接、替换)都会生成一个新的字符串对象。
使用场景
  - 当字符串不经常改变时,如声明常量、少量的字符串操作或比较。
  - 作为方法的参数传递,因为不可变特性保证了线程安全。
  - 用于字符串池(String Pool),利用字符串共享节省内存。

StringBuilder

多线程不安全
特点:可变字符串,非线程安全。相较于 `StringBuffer`,在单线程环境下性能更优,因为它不需要进行同步操作。
使用场景
  - 在单线程环境中,特别是在需要频繁进行字符串修改(如拼接、插入、删除)的场合。
  - 构建SQL语句、HTML页面生成等动态字符串处理任务。
  - 性能敏感且无并发需求的字符串操作。

StringBuffer

使用synchronized同步互斥锁来保证线程是安全的。

特点:可变字符串,线程安全。由于同步机制,所以在多线程环境下能够安全地进行字符串操作。
使用场景
  - 在多线程环境下,当多个线程可能同时访问并修改同一个字符串时。
  - 如在服务器端处理并发请求时构建响应字符串。
  - XML、JSON等数据解析和构建,尤其是当这些操作在多线程环境中进行时。

总结
选择使用哪种类取决于具体的需求:
- 如果是基本的字符串操作且不涉及多线程,首选 `String`(如果字符串不变)或 `StringBuilder`(如果需要修改)。
- 如果在多线程环境中操作字符串,应该使用 `StringBuffer` 以确保线程安全。
- 对于性能有较高要求且确保在单线程环境下的场景,`StringBuilder` 是最佳选择,因为它避免了不必要的同步开销。

 

自动拆箱和自动装箱

 

  • 自动装箱

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

  • 自动拆箱

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

Integer i = 100;  // 自动装箱
i += 200;         // i = i + 200;  i + 200 自动拆箱;i = i + 200; 是自动装箱

 时间类

 

LocalDateTime创建方法

方法名说明
public static LocalDateTime now()获取当前系统时间
public static LocalDateTime of (年, 月 , 日, 时, 分, 秒)使用指定年月日和时分秒初始化一个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()获取小时

LocalDateTime转换方法

方法名说明
public LocalDate toLocalDate ()转换成为一个LocalDate对象
public LocalTime toLocalTime ()转换成为一个LocalTime对象

LocalDateTime格式化和解析

方法名说明
public String format (指定格式)把一个LocalDateTime格式化成为一个字符串
public LocalDateTime parse (准备解析的字符串, 解析格式)把一个日期字符串解析成为一个LocalDateTime对象
public static DateTimeFormatter ofPattern(String pattern)使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象

LocalDateTime增加或者减少时间的方法

方法名说明
public LocalDateTime plusYears (long years)添加或者减去年
public LocalDateTime plusMonths(long months)添加或者减去月
public LocalDateTime plusDays(long days)添加或者减去日
public LocalDateTime plusHours(long hours)添加或者减去时
public LocalDateTime plusMinutes(long minutes)添加或者减去分
public LocalDateTime plusSeconds(long seconds)添加或者减去秒
public LocalDateTime plusWeeks(long weeks)添加或者减去周

LocalDateTime减少或者增加时间的方法

方法名说明
public LocalDateTime minusYears (long years)减去或者添加年
public LocalDateTime minusMonths(long months)减去或者添加月
public LocalDateTime minusDays(long days)减去或者添加日
public LocalDateTime minusHours(long hours)减去或者添加时
public LocalDateTime minusMinutes(long minutes)减去或者添加分
public LocalDateTime minusSeconds(long seconds)减去或者添加秒
public LocalDateTime minusWeeks(long weeks)减去或者添加周

LocalDateTime修改方法

方法名说明
public LocalDateTime withYear(int year)直接修改年
public LocalDateTime withMonth(int month)直接修改月
public LocalDateTime withDayOfMonth(int dayofmonth)直接修改日期(一个月中的第几天)
public LocalDateTime withDayOfYear(int dayOfYear)直接修改日期(一年中的第几天)
public LocalDateTime withHour(int hour)直接修改小时
public LocalDateTime withMinute(int minute)直接修改分钟
public LocalDateTime withSecond(int second)直接修改秒

Period

方法名说明
public static Period between(开始时间,结束时间)计算两个“时间"的间隔
public int getYears()获得这段时间的年数
public int getMonths()获得此期间的总月数
public int getDays()获得此期间的天数
public long toTotalMonths()获取此期间的总月数

Duration

方法名说明
public static Durationbetween(开始时间,结束时间)计算两个“时间"的间隔
public long toSeconds()获得此时间间隔的秒
public int toMillis()获得此时间间隔的毫秒
public int toNanos()获得此时间间隔的纳秒

异常

 

编译时异常和运行时异常的区别

  • 编译时异常

    • 都是Exception类及其子类

    • 必须显示处理,否则程序就会发生错误,无法通过编译

  • 运行时异常

    • 都是RuntimeException类及其子类

    • 无需显示处理,也可以和编译时异常一样处理

throws方式处理异常

 

public void 方法() throws 异常类名 {
    
}
  • 这个throws格式是跟在方法的括号后面的

  • 编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,在方法上进行显示声明,将来谁调用这个方法谁处理

  • 运行时异常因为在运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处理

throw抛出异常

  • 格式

    throw new 异常();

  • 注意

    这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了

  • throws和throw的区别

    throwsthrow
    用在方法声明后面,跟的是异常类名用在方法体内,跟的是异常对象名
    表示声明异常,调用该方法有可能会出现这样的异常表示手动抛出异常对象,由方法体内的语句处理

 

try-catch方式处理异常

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

 

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

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

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

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

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

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

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

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

 finally代码必被执行,如果try有retuen函数,会保存返回值,在执行finally函数最后在返回。如果是基本数据类型就是retuen的值,如果是引用数据类型就会发生改变(虽然引用不变,但是地址里的值发生了改变,所以retuen改变)

Throwable成员方法

 

方法名说明
public String getMessage()返回此 throwable 的详细消息字符串
public String toString()返回此可抛出的简短描述
public void printStackTrace()把异常的错误信息输出在控制台
public class ExceptionDemo02 {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }

    public static void method() {
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]); //new ArrayIndexOutOfBoundsException();
            System.out.println("这里能够访问到吗");
        } catch (ArrayIndexOutOfBoundsException e) { //new ArrayIndexOutOfBoundsException();
//            e.printStackTrace();

            //public String getMessage():返回此 throwable 的详细消息字符串
//            System.out.println(e.getMessage());
            //Index 3 out of bounds for length 3

            //public String toString():返回此可抛出的简短描述
//            System.out.println(e.toString());
            //java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

            //public void printStackTrace():把异常的错误信息输出在控制台
            e.printStackTrace();
//            java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
//            at com.wedu_02.ExceptionDemo02.method(ExceptionDemo02.java:18)
//            at com.wedu_02.ExceptionDemo02.main(ExceptionDemo02.java:11)

        }
    }
}

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值