zoukankan      html  css  js  c++  java
  • 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方法:返回在以前匹配操作期间由给定组捕获的输入子序列。

  • 相关阅读:
    (转)静态方法与实例方法
    使用C#和Excel进行报表开发(8)
    js千分位
    各种语言多态性比较
    中国互联网100个Web2.0网站名单
    HDU4405 期望
    HDU1266 字符串逆转
    POJ1087 DInic
    POJ1003 水~
    HDU4403 DFS
  • 原文地址:https://www.cnblogs.com/kongbai123/p/7066665.html
Copyright © 2011-2022 走看看