华清远见—重庆中心JAVA高级阶段技术总结

String与可变字符串

String

Java中""引起来的,都是这个类的实例,称为字符串。
字符串定义后是一个常量,值不可更改。
String str = "qwe",首先是在字符串常量池寻找是否存在qwe,如果不存在则创建一个qwe,然后将qwe地址值赋给str。

如果使用String类的对象,对其频繁更新时,就会不停地创建对象,不停引用给同一个变量。就会导致执行小路很低,这时就需要使用可变字符串对象。

可变字符串(StringBuilder类和StringBuffer类)

StringBuilder

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

StringBuffer

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

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

可变字符串和String之间的转换

String转换为可变字符串

String str="hello";
//通过构造方法将String"包装"为可变字符串对象
StringBuilder sb = new StringBuilder(str);

可变字符串转换为String(任意类型对象转换为String)

方法一:String.valueOf(Object obj)方法

StringBuilder sb = new StringBuilder("你好");
//调用静态方法
String str = String.valueOf(sb);

方法二:对象.toString()方法

StringBuilder sb = new StringBuilder("你好");
//调用toString()
String str = sb.toString();

方法三:

StringBuilder sb = new StringBuilder("你好");
//拼接一个空字符串
String str = sb + "";

注意

StringBufferStringBuilder并没有重写equals方法,所以可变字符串的值是否相同时,调用的是 equals中原始的==判断。如果要判断两个可变字符串的值是否相同时,需要将其转换为String后调 用equals判断

System类和RunTime类

System类

这个类中包含了一些系统相关的信息和一些方法。其中的属性和方法都是静态的
该类不能创建对象,不是因为它是一个抽象类,而是因为它的构造方法是私有的。
方法:
System.currentTimeMillis()// 获取从 1970.1.1 0:0:0 至今进过了多少毫秒。中国是 UTC(+8) ,所以是从 1970.1.1 8:0:0 至今经过了多少毫 秒。返回 long 类型。

RunTime类

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

Runtime 类的对象,表示 程序运行时对象 ( 程序运行环境对象 )
包含了程序运行环境相关的信息。常用于获取运行环境信息 ( 如虚拟机内存 ) 或执行某个命令。
public class Runtime {
//定义了私有的一个静态成员:当前类的对象
//由于静态成员只在类加载时执行一次,所以这里只会创建唯一一个当前类的对象
private static Runtime currentRuntime = new Runtime();
//定义了一个公共的静态方法,用于获取创建的唯一的当前类的对象
public static Runtime getRuntime() {
return currentRuntime;
}
//构造方法是私有的,不能在当前类之外创建对象
private Runtime() {}
}

Date类、SimpleDtaeFormat类、Calendar类

Date通常用于获取系统当前时间

    Date date = new Date()
    System.out.println(date)
    //结果(系统时间)
    //星期 月份 日期 时分秒 时区 年
      Thu Nov 4 09:54:37 CST 2022

SimpleDateFormat是用于格式化日期时间

Date date = new Date();
//格式化日期模板
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sf.format(date));

Calendar用于处理日期细节的类,通过静态方法Calendar.getInstance()获取该类的实例

Calendar cal = Calendar.getInstance();

异常

异常的产生

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

异常的分类

 处理异常

方法一:try-catch-finally语句

try{
//可能出现异常的代码
}catch(异常类 异常对象){
//如果出现异常对象,且与catch小括号中的异常类型匹配,就会执行这里的代码
}catch(异常类 异常对象){
//如果出现异常对象,且与catch小括号中的异常类型匹配,就会执行这里的代码
}finally{
//无论程序是否会抛出异常,都要执行的代码
}
方式二:throws关键字
public class Test{
public void fun() throws InterruptException{//这时该方法就会有一个声明:该方法可能
会抛出异常
//这句话直接写完后,会报错,因为sleep()方法可能会抛出InterruptException异常,属于
编译时异常,必须要处理
Thread.sleep(500);
}
}

方法三:throw

throw 用于手动抛出异常对象。使用时,写在方法体中,常用于满足某种情况时,强制中断程序
public void fun2(){
for(int i=0;i<10;i++){
if(i==5){
//手动抛出异常
throw new NullPointerException();
}
}
}

自定义异常

1. 定义一个类,继承某个异常类
  • 如果继承的是RuntimeException,表示自定义的异常类属于运行时异常,该异常对象可以不用处
  • 如果继承的是非RuntimeException,表示自定义的异常类属于编译时异常,该异常对象必须要处
2. 可选操作。定义带参构造方法,参数为异常信息,调用父类中的构造方法

集合

集合的特点

  • 能保存一组数据,可以有序可以无序
  • 集合的容量可变
  • 集合中可以保存不同类型的数据
  • 可以获取集合中保存的元素实际数量

集合框架

Collection 还有父接口 Iterable ,但 Iterable 接口不算严格意义上的集合的根接口。它称为迭代器,是用 于遍历集合元素的一个工具接口。所以集合的根接口为Collection接口和Map接口

 Collection接口

该接口有两个核心子接口: List Set
这两个接口都可以保存一组元素, List 接口 保存元素时,是 有序可重复 的; Set 接口 保存元素时是 无序 不重复 的。

 List接口(有序可重复)

有序集合,元素可以重复,允许保存 null ,可以通过索引获取对应位置上的元素。
在该接口继承 Collection 接口的同时,又拓展了一些操作元素的方法,如添加到指定索引、根据索引删 除、获取指定索引的元素、截取子集合的方法等。

 ArrayList实现类

  • 采用数组实现的集合
  • 可以通过索引访问元素,可以改变集合大小。如果要在其中插入或删除元素时,会影响后续元素
  • 该集合中保存的都是引用类型,即便保存了整数123,也保存的是Integer类型的123,而不int型的123
  • 该集合查询效率高,中途增加和删除元素效率低

LinkedList实现类

采用双向链表实现的集合
  • 集合中保存的每个元素也称为节点,除首尾节点外,其余节点都保存了自己的信息外,还保存了其 前一个和后一个节点的地址
  • 如果在双向链表的数据结构中插入和删除操作节点时,不会影响其他节点的位置。如添加时新节点 时,只需要重写定义新节点的前后节点位置即可
  • 如果要查询某个节点时,需要从头结点或尾结点开始一步步得到目标节点的位置
  • 双向链表在中间插入和删除的效率高,随机读取的效率低

ArrayListLinkedList的区别

  • 这两个类都是List接口的实现类,保存的元素有序可重复,允许保存null
  • ArrayList采用数组实现,随机读取效率高,插入删除效率低,适合用于查询
  • LinkedList采用双向链表实现,插入删除时不影响其他元素,效率高,随机读取效率低,适合用于
  • 频繁更新集合

总结

Java高级这一阶段对于我来说是枯燥的,这一阶段的内容多,知识点复杂,想要掌握这一阶段的知识,还是多练,多写,多问,多看吧,核心还是多写。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值