华清远见重庆中心——Java高级部分技术总结/个人总结

java高级部分总结

类的各种常用方法

字符串String类中的常用方法

方法名 返回值 作用
length() int 得到字符串长度
toLowerCase() String 转换为小写
toUpperCase() String 转换为大写
trim String 去除字符串首尾全部空格
isEmpty() boolean 判断字符串长度是否为0
getBytes() byte[] 转换为字节数组
toCharArray() char[] 转换为字符数组
equalsIgnoreCase(String  str) boolean 忽略大小写比较字符串是否相等
equals(String str) boolean 判断两个字符串是否相等
charAt(int index) char 得到某个索引上的字符
indexOf(String str) int 得到某个字符串第一次出现的索引,不存在返回-1
lastIndexOf(String str) int 得到某个字符串最后一次出现的索引,不存在返回-1
contains(String str) boolean 判断是否存在某个字符串
startsWith(String str) boolean 判断是否以某个字符串开头
endsWith(String str) boolean 判断是否以某个字符串结尾
concat(String str) String 将指定字符串评级到原字符串末尾
substring(int index) String 从索引index开始截取字符串末尾
substring(int begin,int end) String 截取[begin,end)范围内的字符串
split(Sting regex) String[] 根据字符串或者正则表达式切分原字符串
replace(String oldStr,String newStr) String 将原字符串的oldStr替换为newStr
String.valueOf(参数) String 将参数转换为字符串,参数可以是任何数据,通常用于原始类型转换为字符串
String.format(String式,Object…obj) String 根据指定格式转换参数。常用与将浮点数据保留指定小数位数。\n如String.format(“%4.2f”,2.345)表示将 2.345保留2位小数,整体占4位,输出为字符串格式。 如果实际数字总位数大于4,原样输出,如果实际数字 总位数小于4,会在最前补充空格。

可变字符串

  • StringBuilder

    用于表示可变字符串的一个类,是非线程安全的,在单线程环境下使用,效率更高。

  • StringBuffer

    用于表示可变字符串的一个类,是线程安全的,在多线程环境下使用。

    StringBuilder和StringBuffer中的方法都一致,只不过StringBuffer中的方法使用了synchronized关键字修饰,表示是一个同步方法,在多线程环境下不会出现问题。

    常用方法

    常用方法 作用
    append(Object obj) 将任意数据添加带原可变字符串的末尾
    delete(int start,int end) 删除[start,end)范围内的字符
    deleteCharAt(int index) 删除index索引上的字符
    insert(int index,Object obj) 将obj添加到index上
    repalce(int start,int end,String str) 将[start,end)范围内的字符替换为str
    reverse() 反转字符串

注意

  • String类中的所有方法调用后,都会创建一个新的String对象,即原本的String字符串不会改变

  • StringBuilder类中的所有方法都是在操作同一个字符串对象,每次调用方法,都会让原字符串发生变化

  • StringBuilder类中没有重写equals方法,所以判断两个可变字符串对象是否相同时,如果调用equals方法,实际调用的是Object类中未重写的方法,即==判断。所以判断可变字符串是否相同时,需要将其转换为String对象再调用equals方法。

任意类型对象转换为String

  • String.valueOf(Object obj)

  • toString()方法

  • 拼接空字符串

可变字符串相关面试题

比较String、StringBuilder和StringBuffer的区别
相同点:
  • 这三个类都可以表示字符串。都提供了一些操作字符串的方法。

  • 这三个类中有相同的方法,如charAt(),indexOf()等。

  • 这三个类都是被final修饰的类,不能被继承

不同点:
  • String定义的字符串是一个常量。可变字符串定义的字符串是一个变量。

  • String类中的方法调用后,不会改变原本字符串的值。可变字符串中的方法调用后,会改变原本字符串的值

  • StringBuilder是非线程安全的可变字符串类,StringBuffer是线程安全的可变字符串类,其中的方法被synchronized修饰。

System类

常用方法

常用方法与属性
System.ou 获取标准输出流对象,用于打印信息
System.in 获取标准输入流对象,用于获取输入的信息
System.err 获取错误输出流对象,用于打印异常信息
System.exit(int statues) 终止虚拟机运行,参数0表示正常终止
System.currentTimeMills() 获取从1970/1/1 0:0:0至今经过了多少毫秒。中国是UTC(+8),所以实际是从1970/1/1 8:0:0至今经过了多少毫秒。返回值为long类型。通常称为时间戳。
System.arraycopy(原数组,原数组的起始位置,目标数组,目标数组的起始位置,要复制的元素数量) 将原数组中指定数量的元素复制到新数组中

Runtime类

这个类不是一个抽象类,但不能创建对象,因为它的构造方法是私有的。

这个类提供了一个静态方法getRuntime(),通过该方法,可以获取一个Runtime类的对象。

这种方式可以保证该类只能创建一个对象,是Java中的一种设计模式:单例模式。

public class Runtime{
   
//定义了一个私有的静态成员,创建一个当前类的对象
private static Runtime currentRuntime = new Runtime();
//将构造方法私有,无法在外创建对象
private Runtime();
//定义了一个公开的静态方法,用于获取创建的唯一的当前类的对象
public static Runtime getRuntime(){
   
return currentRuntime;
}
}

Date类

常用方法

常用方法 作用
getTime() 得到Date对应对象的毫秒数
after(Date  when) 判断参数是否是调用日期之后
before(Date when) 判断参数是否再调用日期之前

SimpleDateFormat类

日期模板

特殊字符 作用
yyyy
MM
dd
hh 12小时制
HH 24小时制
mm
ss
E 星期
yyyy/MM/dd HH:mm:ss E 2023/03/09 14:05:16 星期四

常用方法

常用方法 返回值 作用
format(Date date) String 将Date对象按日期模板转换为字符串
parse(String str) Date 将满足日期模板的字符串转换为Date对象

Calendar类

常用方法

get(int field) 根据日历字段获取对应的值
getMaximum(int field) 获取指定日历字段的最大值,如日期最大值为31
getActualMaximum(int field) 获取指定日历字段的实际最大值,如11月的日期最大为30
getTime() 将Calendar对象转换为Date对象
set(int field,int value) 将指定的日历字段设置为指定值
set(int year,int month,int date) 同时设置日历的年月日
setTime(Date date) 将Date对象作为参数设置日历的信息

使用Calendar类实现万年历

package com.hqyj.dateTest;
import java.util.Calendar;
import java.util.Scanner;
public class Test2 {
   
public static void main(String[] args) {
   
//实现"万年历"
//输入年份和月份,输出
Calendar c = Calendar.getInstance();
Scanner sc = new Scanner(System.in);
System.out.println("输入年份");
int year = sc.nextInt();
System.out.println("输入月份");
int month = sc.nextInt();
c.set(year, month - 1, 1);
//得到当月最大日期
int maxDate = c.getActualMaximum(Calendar.DATE);
//换行计数
int count = 0;
//输出空格
/*
* DAY_OF_WEEK 星期 空格数量
* 2 一 0
* 3 二 1
* 4 三 2
* 5 四 3
* 6 五 4
* 7 六 5
* 1 天 6
* //周天空6 其余空DAY_OF_WEEK-2
* */
System.out.println("一\t二\t三\t四\t五\t六\t日");
//获取当月1号是一周中的第几天
int week = c.get(Calendar.DAY_OF_WEEK);
//周天空6格
if (week == 1) {
   
System.out.print("\t\t\t\t\t\t");
//空格也需要计数
count += 6;
} else {
   
//其他情况空星期-2个格
for (int j = 1; j <= week - 2; j++) {
   
System.out.print("\t");
//空格也需要计数
count++;
}
}
//输出数字
for (int i = 1; i <= maxDate; i++) {
   
System.out.print(i + "\t");
//计数+1
count++;
//计数到7换行
if (count % 7 == 0) {
   
System.out.println();
}
}
}
}

包装类

Java是纯面向对象语言,宗旨是将一切事物视为对象处理。

但原始类型不属于对象,不满足面向对象的思想。但原始类型无需创建对象,保存在栈中,效率更高。

为了既保证效率又让原始类型也有对应的类类型,达到"万物皆对象"的理念,所以就有了包装类的概念。

包装类就是原始类型对应的类类型。

包装类常用于字符串与原始类中之间的转换。

在web应用中,从浏览器页面中获取数据提交到服务器,全部都是String类型,所以一定要使用字符串转换为原始类型的方法。

包装类 原始类型
Byte byte
Short short
Integer integer
Long long
Float float
Double double
Chartacter char
Boolean boolean
特点
  • 八个原始类型中,除了int和char,其余包装类都是将原始类型的首字母改为大写。

int对应Integer,char对应Character

  • 包装类都是被final修饰的,不能被继承

  • 除了Character类,其余包装类都有两个过时的构造方法,参数为对应的原始类型或字符串

Character只有一个参数为char类型的构造方法

构造方法的目的都是将原始类型的数据转换为包装类的对象

  • 除了Character类,其余包装类都有静态方法"parse原始类型单词(String str)",用于将字符串转换为相应的原始类型

    • 数值型的包装类parseXXX()方法,如果参数不是对应的数字,就会抛出NumberFormat异常,如"123a"或"123.4"都会报错

    • boolean的包装类Boolean的parseBoolean()方法,如果参数不是"true"这个单词的四个字母,转换结果都是false

  • 除了Boolean类,其余包装类都有MAX_VALUE和MIN_VALUE这两个静态属性,用于获取对应类型支持的最大最小值

  • 所有包装类都重写了toString(),用于将包装类对象转换为String对象

装箱和拆箱

装箱
拆箱

自动装箱和拆箱

  • 自动装箱缓冲区

    //i1和i2保存的数字在byte范围[-127,127]内,这个值会共享,只会有一个"100"对象
    Integer i1 = 100;
    Integer i2 = 100;
    System.out.println(i1 == i2);//i1和i2引用同一个地址,结果为true
    //i3和i4保存的数字不在byte范围[-127,127]内,会创建对象
    Integer i3 = 128;//128对象
    Integer i4 = 128;//128对象
    System.out.println(i3 == i4);//i3和i4引用不同的地址,结果为false
    System.out.println(i3.equals(i4));//包装类重写了equals,会拆箱后判断,结果为ture
    
    • 使用自动装箱给包装类对象赋值,值的范围在byte范围[-127,127]内,这个值会保存在缓冲区中,如果多个对象都使用这个值,共享这一个数据,使用同一个地址,==判断结果true;值的范围不在byte范围[-127,127]内,就会创建新的包装类对象,会有不同的地址,==判断结果false

    • 引用类型对象比较相同时,不要使用==,包括包装类的对象。比较相同时,使用包装类重写的equals方法.

异常

当程序没有按开发人员的意愿正常执行,中途出现错误导致程序中断,这种情况,就称为异常。

学习异常就是认识异常的种类,如何处理异常和避免异常出现。

异常的产生

异常在程序中以对象的形式存在。当代码执行过程中出现异常,虚拟机会自动创建一个异常对象,如果没有对该异常对象进行处理,就会导致程序中断,不再执行后续内容。

异常的分类

异常在程序中以对象的形式存在,就有相应的类。

所有的异常类,组成了"异常家族"。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mPbZEMMA-1679503712167)(C:\Users\23266\AppData\Roaming\marktext\images\2023-03-10-15-26-11-image.png)]

Error错误

如果出现xxxError,如StackOverFlowError,栈溢出,无法通过额外的代码解决,只能修改源代码。

Exception异常
  • RunTimeExcetpion运行时异常

    如果一个异常类属于RunTimeExcetpion异常类的子类,称这个异常为运行时异常,可以通过编译,运行时可能抛出异常对象

    常见运行时异常 说明 出现的情景
    NullPointerException NullPointerException 空指针异 常 如用空对象null调用属性或方法
    IndexOutOfBoundsException n 索引越界异常 如当使用某个带有索引的对象超出范围
    NumberFormatException 数字格式异常 如调用包装类的parseXX()方法,如果参数不 能转换
    InputMismatchException 输入不匹配异常 如使用Scanner接收控制台输入时,如果输 入的数据不是对应的类型
    ClassCastException 对象转型异常 如Person p = (Person)Dog dog;
    ArithmeticException 算术运算 异常 如0当分母
  • 编译时异常

    如果一个异常类属于RunTimeExcetpion异常类的子类,称这个异常为运行时异常,可以通过编译,运行时可能抛出异常对象

    常见编译时异常 说明 出现的情景
    IOException 输入输出流异常 使用流对象
    FileNotFoundException 文件未找到以 方法的参数为文件对象时
    SQLException 数据库相关异常 操作数据库时

处理异常

通常所说的处理异常,指的是处理Exception类的子类异常。

处理异常的目的,就是保证程序正常执行。

方式一:try-catch-finally语句

这种方式处理异常,无论会不会抛出异常,都能让程序正常执行

try{
   
//可能出错的代码
}catch(异常类 异常对象){
   
//如果try中的代码抛出异常,异常对象属于catch中的异常类型,就会执行这里的代码
}catch(异常类 异常对象){
   
//如果try中的代码抛出异常,异常对象属于catch中的异常类型,就会执行这里的代码
}...{
   
}finally{
   
//无论程序是否会抛出异常,都要执行这里的代码
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KzJ8domQ-1679503712168)(C:\Users\23266\AppData\Roaming\marktext\images\2023-03-10-19-09-04-image.png)]

执行流程:先执行try中的内容,当出现异常,与后续每个catch中的异常类型进行匹配,如果匹配到对应的类型或异常父类时,执行后续大括号中的内容,最终一定执行finally中的内容。

try-catch-finally使用时注意
  • 如果代码会抛出多个异常,可以使用多个catch进行捕获。需要将子类异常放在最前,父类异常放在最后

  • try、catch、finally都不能单独使用,try必须配合catch或finally或一起使用

  • 无论try中的代码是否会抛出异常,finally中的代码一定会执行

  • 执行try中的代码是,如果出现异常,就不再执行try中剩余代码

  • try中定义的内容,无法在try之外的地方使用

  • try中如果有return,不影响finally的执行,finally优先于return执行

方式二:throws关键字

这种方法,可以让编译时异常通过编译。

在定义方法的时候,通过该关键字声明方法可能抛出的异常

用法:方法的参数部分后,添加 throws ****异常类型1,****异常类型2.

public class Test{
   
//这时该方法就会有一个声明:该方法可能会抛出InterruptedException异常
public void fun() throws InterruptedException{
   
//sleep()方法在源码中声明了可能会抛出InterruptedException异常,
//InterruptedException异常不是RuntimeException的子类异常,必须要处理才能通过编译
//要么使用try-catch处理,要么继续声明有异常
Thread.sleep(500);
}
}

throw和throws

  • throws表示用于声明方法有可能出现的异常。使用时写在方法的小括号之后

    public void fun() throws InterruptedException{
         
    Thread.sleep(500);
    }
    
  • throw用于手动抛出异常对象。使用时,写在方法体中,“throw 异常对象”。

常用于满足某种条件时,强制中断程序。

public void fun
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值