java基础知识点二

1.异常是程序运行过程中出现的问题。同时也是Java语言健壮性的一个重要体现

2.什么时候会出现异常呢?——在程序中,由于操作人员或者程序员的误操作导致程序无法正常的执行,如:数组下标越界等这些异常。当然,除了人为原因以外还有由硬件设备的故障导致的。

3. 异常的分类:

           i.          检查异常(非运行时异常)——在书写时就必须进行处理的异常,如果不处理,程序就不能编译通过:IOException、SQLException等以及用户自定义的Exception异常

          ii.          运行时异常(非检查时异常)——通常是一个在运行时出现的可以被避免的异常类型:NullPointerException、IndexOutOfBoundsException

         iii.          错误(不是异常,但同样是由用户或者程序员导致的)——Error

错误和异常都会使程序奔溃

在Java中异常被视为对象,由方法抛出

4.那如果在某一个方法中出现了异常,会怎么样呢?

           i.          首先方法会被压入内存中的方法调用栈中

          ii.          当方法抛出异常时,该方法从调用栈出被弹出,同时将异常对象抛给前一个方法

5.异常出现时的解决方法

           i.          捕获这个异常,不让它沿着调用栈继续向下抛出。

          ii.          捕获这个异常,并继续向下抛出。

         iii.          不捕获这个异常,从而导致方法从调用栈中被弹出,异常对象最终抛给main方法

6. Java的Error和Exception是throwable的子类,由于所有的异常的父类都是throwable所以我们可以直接调用父类中有的方法:e.printStackTrace();

7. 运行时异常就是不会主动提醒我们捕获的异常:下标越界

8.非运行时异常就是写完某些代码后,如果可能出现该异常,则会提示你自动加上该捕获异常的方法:FileInputStream fileInputStream = new FileInputStream("aaa");

9.捕获异常:try...catch语句

 

try语句块中加入可能出现异常的代码;

而catch异常中,会尝试对写入的异常种类进行检查,如果出现相应的异常,则执行捕获块,

并使用e引用来指代异常的对象,并进行异常信息的处理P245方法

注意:并非写了try...catch语句就能捕获到

比如像想捕获一个空指针异常,却出现了下标越界异常,则不会进行下标越界异常的捕获

10. 捕获异常与多态性

 catch块不能随便的以任意顺序列出——大的异常不能放在前面。

可以用父类异常来捕获子类的异常

11. 异常处理及声明的规则--对检查异常的一个严格的执行规则

该规则规定,一个检查异常,要么被处理,要么被声明,当然处理异常就是之前讲的try...catch捕获,而声明呢:是使用throws关键字,注意,声明的异常不会在该方法中被处理

 注意事项:异常处理和声明规则不适用于运行时异常,往往会忽略该异常

12. 不管是什么异常,都可以进行声明

a)      那如何进行声明呢?

               iv.         

                v.          如果是运行时异常也是同样的,如果同时要声明两个异常,则中间使用,隔开

               vi.          注意:如果是声明异常,运行时异常声明时不会有提示,而检查异常会有提示:在方法中声明

  1. FileInputStream fileInputStream = new FileInputStream("aaa");并声明异常,在main方法中调用时则会提醒,当然如果加了其它的声明,则一并捕获或者继续声明

             vii.          什么时候想处理,什么时候想声明完全由设计决定

13. 在异常声明时,一般都会抛出一个异常给上层方法处理,或者在捕获异常时,我们都可以使用父类异常。

14. 使用throw关键字抛出一个异常

抛出的异常可以是一个新的异常实例,也可以是一个我们刚刚捕获的异常,当然,throw语句会导致当前代码立即停止执行,而且将异常抛给上一个方法

15. throw/throws的区别

b)     throws出现在方法函数头;而throw出现在函数体。

c)      throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。

d)     两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

16. 好的编程习惯

e)      在写程序时,对可能会出现异常的部分通常要用try...catch...去捕捉它并对它进行处理;

f)       用try...catch...捕捉了异常之后一定要对在catch...中对其进行处理,那怕是最简单的一句输出语句,或栈输入e.printStackTrace();

g)     如果是捕捉IO输入输出流中的异常,一定要在try...catch...后加finally...把输入输出流关闭;

h)      如果在函数体内用throw抛出了某种异常,最好要在函数名中加throws抛异常声明,然后交给调用它的上层函数进行处理。

17. finally关键字用于try...catch语句最后

 

注意,不管是否执行捕获块,都会执行finally执行块

18. 书写一个自定义异常

i)       书写自定义异常有几点重要知识点——P264

j)       如何书写一个自定义异常呢?

 

使用时一般加上判断和throw和throws一起使用

 

19. System类:System类代表当前Java程序的运行平台

CurrentTimeMillis():返回以毫秒为单位的当前时间

              Exit(int status):终止当前正在运行的Java虚拟机

              GetProperties():确定当前的系统属性

              GetProperty(String key):获得指定键指示的系统属性

              NanoTime():返回最准确的可用系统计时器的当前值,以毫微秒为单位

              Gc():运行垃圾回收器

20.Runtime类:Runtime类代表Java程序的运行环境

21.String相关类:String类包含了一个不可变的字符串

Char charAt(int index):返回指定索引的字符

Int compareTo(Object o):将该字符串对象与另一个对象进行比较

String concat(String str):将指定字符串连接到该字符串末尾

Boolean equals(Object anObject):将该字符串与指定对象进行比较

Int indexOf(int ch):返回指定字符在该字符串内首次出现的索引

Int length():返回该字符串的长度

String substring(int beginindex):返回新字符串,作为该字符串的子字符串

String toUpperCase():使用由LocalegetDefault返回的默认输入语言规则将该字符串中的所有字符转换为大写

Static String valueOf(int i):返回整型参数的字符串表示法

Static String valueOf(Object obj):返回对象参数的字符串表示法

22. StringBuffer/StringBuilder对象代表一个可变的字符串

StringBuffer代表线程安全的,StringBuilder代表线程不安全的

23.日期相关类:

Date类:表示特定的瞬间,精确到毫秒

DateFormat抽象类:提供了很多种格式化日期时间

SimpleDateFormat类:可以自定义时间输出格式

Calendar抽象类:提供了很多方法来完成日期时间之间的相互操作功能

GregorianCalendar类:用来代表世界上大多数国家和地区采用的公历日历

24.Math类:数学工具类

25.随机数:

通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字

通过Math类的静态方法random()返回一个0到1之间的double值

通过Random类来产生一个随机数

26.  包装类:将基本数据类型封装成类

所有的包装类都是final类型,不能创建他们的子类

    包装类是不可变类。一旦创建了一个包装类的对象,那么他包含的基本类型数据就不能改变

27. 正则表达式:根据一组字符串中每个字符串所共有的特征,使用特定的符号来描述该组字符串的一种方法。正则表达式就是一种规范。

28.   Pattern类

Pattern.matches("a*b", "aaaaab");第一个是正则表达式,第二个是要进行匹配的值

pattern.pattern();打印出该正则表达式

Pattern p1 = Pattern.compile("a*b");String[] arr1 = p1.split("rrrrraacbccccaaaaab");以此正则表达式进行拆分

29. Matcher类 matches方法: 方法尝试将整个输入序列与该模式匹配

30.lookingAt方法,从开头第一个字符进行匹配,匹配成功了不再继续匹配.从第一个字符开始,匹配失败了,也不继续匹配.不需要匹配整个序列

31. find方法,从开头第一个字符进行匹配,找出所有匹配的字符串

32. 带参数的group方法与不带参数的group方法区别

   不带参数的group方法:find方法与lookingAt方法匹配出来的子序列

   带参数的group方法:返回在以前匹配操作期间由给定组捕获的输入子序列。

 

posted @ 2017-06-22 18:48  空白/  阅读(205)  评论(0编辑  收藏  举报