1. 时间包
在 JDK 1.8 中对时间体系进行了全新的详细的划分,LocalDate,LocalTime
package cn.tedu.time; import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class LocalDateDemo { public static void main(String[] args) { //LocalDate 是一个只包含日期,不包含时间 LocalDate date = LocalDate.now(); System.out.println(date); // LocalDate date1 = LocalDate.of(2014, 7, 8); //向后加几个 System.out.println(date.plus(7,ChronoUnit.WEEKS));//表示周 System.out.println(date.minus(8,ChronoUnit.MONTHS)); System.out.println(date1.getDayOfMonth()); //在某一个日期的后面吗 System.out.println(date1.isAfter(LocalDate.now())); //判断闰年 System.out.println(date1.isLeapYear()); } }
2. 异常
ArithmeticException --- 运行时异常(比如 1/0)
ArrayIndexOutOfBoundsException ---(数组下标越界),运行时异常(a[10])
NullPointerException ---- 运行时异常(str=null ,str.length())
ClassCastException --- 运行时异常(String str = (str)o;)
StringIndexOutOfBoundsException ---运行时异常
NumberFormatException ---运行时异常(new Integer("abc"))
CloneNotSupportedException ---
编译时异常(new ExceptionDemo().clone())
UnSupportedEncodingException --- 不支持编码异常(在getBytes() 中就是这样,要抛异常)---
编译时异常("abc".getBytes("abc");)
ParseException(在simpledateFormat() 参数没有指定时间格式) ---
编译时异常(new simpleDateFormate("yyyy").parse("2012");)
---异常是 Java 中用于问题处理的一套逻辑
运行时异常非得来处理一下,就使用try-catch(){} 捕获一把!!
throws PathNotExistException //告诉调用方法的对象,
2.1 Throwalbe --- 异常的顶级父类
Error --- 错误表示合理(无论在语法上还是在逻辑上都是正确的)的应用程序中出现了严重的问题,而且这个问题不应该试图捕获。 --- 意味着错误一旦出现不能处理。 ---
StackOverflowError(递归层次太深,超过了范围),OutOfMemory(堆内存的分配上) 是在虚拟机错误的子类!!
Exception --- 表示合理的应用程序想要捕获的问题,也因此可以处理。
编译时异常:在编译时期就已经出现要求处理。必须处理。
运行时异常:在运行时期出现要求处理。可以处理可以不处理 --- RuntimeException (运行时异常的小父类)
2.2 异常捕获方式
A. 如果多个异常的处理方式各不一样,可以使用多个catch分别捕获分别处理
B. 如果多个异常的处理方式是一样的,可以捕获它们的父类来进行处理
C. 如果多个异常进行了分组,那么同一组的异常之间用 | 隔开进行分组处理 --- 从 JDK1.7 开始(一个分组处理的过程,一个 catch 中写两个异常,中间用 | 分开就行)
(注意:如果先捕获了父类,那么它的子类不能捕获,所以要先子后父)
总结:方法的重载和方法的重写
重载:方法名相同,参数列表不同,可以有抛出所有的异常
重写:方法名,参数列表相同,方法体不同,只能抛出比父类范围更小的异常。
方法的重载和重写都是行为多态。方法重载是指在同一个类中,方法名一致而参数列表不同的方法,和修饰符、返回值类型以及异常没有关系。重载本身是一种编译时多态。方法的重写指在父子类中存在方法签名一致的非静态方法。子类在重写父类方法的时候,子类权限修饰符的范围要大于等于父类的权限修饰符的范围。如果父类中的方法的返回值类型的基本类型
注意:异常一旦抛出,后面的代码就不再运行。主方法中处理了就接着执行下面的代码(主函数是 jvm 调用,相当于把异常抛给了 jvm,会打印
栈轨迹)。
(看栈轨迹:先看异常的名字(Number),再看冒号后面的那个异常信息(告诉你什么出错了),接着看一个异常的栈轨迹(你写的一个代码,调用别人的,别人再调用别人的,最后在java最底层,你是最后一个拿到的,所以栈轨迹首先出现的是在 Java 底层。你能够改的是你自己的,所以要栈轨迹要倒着看))e.printStatckTrace() //打印栈轨迹
finally (读文件无论成功与否,都要将文件关闭) --- 无论出现异常与否都要执行一次
如果在项目开发期间遇到异常,记录栈轨迹,找异常来源进行改正;如果项目已经上线,记录错误日志(是记录项目运行信息的,在某个链接上卡死,为后续统一工作提供参考),往往跳转错误页面(点进去就网页丢失了,)
3. 集合 --- Collection
(购物车,把东西加到购物车中,每个人买的东西不一样,容器也不一样)
存储多个统一类型的数据的容器 --- 大小不固定
3.1 <E> - 泛型 - 在集合中的作用是用于表示元素类型。- 由于泛型的限制,集合中只能存储对象。
String[] arr; arr 的数据类型是数组,元素类型是String
Collection<String> c; c 的数据类型是集合,元素类型是 String。
Collection<int[]> c; --- 表示集合中存储的是数组。int[] 是一个引用类型,也是对象。
3.2 List - 列表
有序(保证元素的存入顺序)的集合。怎么放就怎么拿出来。 --- 存在了下标,因此能够通过下标来操作这个列表。
package cn.tedu.collection; import java.util.ArrayList; import java.util.List; public class ListDemo { public static void main(String[] args) { List<String> list = new ArrayList<String>(); //保证元素的存入顺序 list.add("xiaofang"); list.add("daqiang"); list.add("weichang"); list.add("dadaxu"); //截取子列表 //获取指定元素在列表中第一次出现的位置 //遍历这个列表,是size for(int i = 0; i < list.size(); i++) System.out.println(list.get(i)); //向列表的指定的下标插入指定的元素,原位置就移到下一个位置上了, //放在元素末尾,就是追加了,可以的,但是不能向末尾后面增加,不然就数组下标越界异常!!(移除超过了也会报这个异常) list.add(2,"插入了"); System.out.println(list); //替换指定位置上的元素,移除这个再插入一位,也有自己的set list.set(2,"替换了"); System.out.println(list); //比较两个列表的时候是逐位比较是否一致,元素中是new String("xiaoqiang")也是正确的!! } }
3.2.1 ArrayList - 顺序表