Java SE学习总结 Day (16)

Day 16开篇:
      
        "
今天java基础主要学习了Exception,Regex,异常概述,多个异常的处理,如何抓取异常,正则表达式,字符类,预定义字符类等。 "



知识点反馈:

今天的知识点总结的思维导图

 


 
一. Exception
1. 异常概述:
在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。
2. 定义:
异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)
3. Java程序在执行过程中所发生的异常事件可分为两类:
(1)Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源
    耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性
的代码进行处理。
(2)Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使
    用针对性的代码进行处理。例如:
        空指针访问
        试图读取不存在的文件
        网络连接中断
        数组角标越界
4. 如何处理异常:(java处理异常的方式是抓抛式):
a. try...catch...finally(抓取(捕获)异常)
b.  b.throws(抛出异常,谁调用谁处理)
5. 如何抓取异常:
(1)try{
        可能会出现异常的代码;
     }catch(异常类名 变量名){
        产生异常需要处理的方式;
     }finally{
        无论如何都需要执行的代码。
     }
 
(2)简便式:
     try{
        可能会出现异常的代码;
     }catch(异常类名 变量名){
        产生异常需要处理的方式;
     }
6. 注意:
(1)try里面的代码,原则上是越少越好(try其实有作用域限制)
(2)catch里面允许不写代码,但是建议你写上(这里面的东西一般是上传到日志当中),哪怕什么都没有,也最少写一个提示
(3)Java采用的异常处理机制,是将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁、优雅,并易于维护。
7.多个异常的处理:
(1)try {
               ....
            }catch (异常类名  变量名){
               ....
            }catch (异常类名  变量名){
               ....
            }catch (异常类名  变量名){
 
            }
            ...
(2)注意:
<1>多个异常的时候,能明确异常类型就尽量明确,不要全部使用父类替代,因为这样无法精确的捕获异常原因
<2>多个catch的情况下,Exception必须在最后一个,平级关系无所谓
8.jdk7版本的新特性,多个异常的处理方式二:
 
try {
               ....
            }catch (异常类名1 | 异常类名2 |  异常类名 变量名){
               ....
            }
9. 注意事项:
(1)多个异常的时候,能明确异常类型就尽量明确,不要全部使用父类替代,因为这样无法精确的捕获异常原因
(2)多个catch的情况下,Exception必须在最后一个,平级关系无所谓
(3)这种方式虽然简洁,但是还是不推荐使用
(4)因为这种方式,只能存在一种代码的处理,无法针对不同的错误进行不同处理。
(5)这里的异常不能存在父子关系,只能是平级关系
(6)其实jvm对所有的运行时异常都有进行收录,只不过方式比较激进,直接终止了程序,所以我们选择了自定义,但是我们自定义,有丧失了JVM原来的异常提示等相关功能
10.受检异常(编译期异常)和非受检异常(运行时异常):
(1)非受检异常(运行时异常):只有在运行的期间才能明确异常类型,可以不进行处理,但是有可能造成异常的产生
(2)受检异常(编译期异常):在JVM进行代码编译的时候,就已经识别出异常存在,必须当场进行处理 ,否则无法通过编译
11.调用异常信息:
(1)tring        getMessage():返回此 throwable 的详细消息字符串。
(2)String        toString(): 返回此 throwable 的简短描述。
(3)此对象的类名+ : + getLocalizedMessage()+
(4)void printStackTrace():返回错误的具体的行数信息
12.java异常采用的是一个抓抛式:
抓(异常捕获):已经会了
抛(异常抛出):
格式:throws 异常类名
13.注意:
(1)如果将一个不明确的异常进行抛出的话,则谁调用,谁处理。
(2)如果调用者仍然不处理,可以选择继续抛出.
(3)如果一直抛的话,那么顶层就是main方法,main是jvm,所以采用jvm默认的处理方式。 (4)运行期异常抛出,调用者可以不进行处理
(5)编译期异常抛出,调用者必须进行处理
14.throws和throw:
(1)throws:位置是在方法体上面.跟的是异常具体的类,可以同时存在多个异常,每一个异常之间有逗号隔开(有可能产生异常,但是不一定会发生)
(2)throw:位置是在方法体里面,跟的是异常的具体对象,表示异常的抛出(一定是这个位置产生异常,调用者必须要进行处理)
15.finally:
不管是否产生异常都需执行的代码,一般用于资源释放
16. 面试题:
如果catch里面出现了return语句,请问finally是否还有执行。
会执行,而且是在catch后面执行的。(准确的说应该过程当中执行的)
 
 
二. Regex
1. 正则表达式:
是指一个用来描述或者说匹配一系列符合某种语法规则的字符串的单个子字符串,其实就是一种匹配规则; 每一个规则有自己特定的语法,根据指定的语法进行校验
2. 字符类:
[abc]        a、b 或 c(简单类)
[^abc]        任何字符,除了 a、b 或 c(否定)
[a-zA-Z]        a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]]        a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]]        d、e 或 f(交集)
[a-z&&[^bc]]        a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]]        a 到 z,而非 m 到 p:[a-lq-z](减去)
3.预定义字符类:
.        任何字符(与行结束符可能匹配也可能不匹配)
\d        数字:[0-9]
\D        非数字: [^0-9]
\s        空白字符:[ \t\n\x0B\f\r]
\S        非空白字符:[^\s]
\w        单词字符:[a-zA-Z_0-9]
\W        非单词字符:[^\w]
4.  Greedy 数量词:
X?        X,一次或一次也没有
X*        X,零次或多次
X+        X,一次或多次
X{n}        X,恰好 n 次
X{n,}        X,至少 n 次
X{n,m}        X,至少 n 次,但是不超过 m 次
5. Pattern:
(1) static Pattern        compile(String regex):准备好一个正则表达式,编译成模式对象
(2) Matcher        matcher(CharSequence input):根据模式对象的正则规则,去跟字符串进行匹配
6. Matcher:
(1) boolean        find():尝试去寻找是否存在跟模式对象正则匹对的下一个内容
(2) String        group():返回所匹配到字符串内容
7. 练习:
    jin tian de tian qi te bie de hao,dan shi xia wu tu ran xia yu la.
    请将所有三个字符的单词提取出来.
*/
public class Demo06 {
    public static void main(String[] args) {
        //demo01();
        String str = "jin tian de tian qi te bie de hao,dan shi xia wu tu ran xia yu la";
        //正则
        String regex = "\\b\\w{3}\\b";
        //编译模式器
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        while (m.find()) {
            System.out.println(m.group());
        }
    }
 
    public static void demo01() {
        String msg = "尊敬的13535450888用户您好,你购买的《如何学好Java》书籍已经到货,请联系快递员:刘 18878787878。 如需有疑问,请联系客服小姐姐,17752817777。";
 
        //1.上面的信息当中,我们要识别谁?(手机号码)
        String regex = "1[3578]\\d{9}";
        //2.创建模式器,并且准备好正则模板
        Pattern p = Pattern.compile(regex);
        //3.根据模式器限定的模板,匹对字符串内容
        Matcher m = p.matcher(msg);
        //4.查找字符串是否存在下一次匹对成功的数据
        boolean b = m.find();
        System.out.println(b);
        //5.根据匹对,获取匹对成功的字符串内容
        String phone = m.group();
        System.out.println(phone);
 
        //为了提取全部命中的数据,所有使用循环解决
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}
 
发布了29 篇原创文章 · 获赞 7 · 访问量 3166

猜你喜欢

转载自blog.csdn.net/weixin_45406656/article/details/104241525