Loading... # Java异常 ## 异常类 - 程序运行时抛出的一些错误。 - Java使用throw抛出一个Exception子类的实例表示异常发生。 - 大部分异常均直接或者间接继承Exception类。 ### try-catch - 通过try-catch语句可以处理异常,一旦出现异常,将会执行catch中的语句。 ```java try { ... } catch(ExceptionSubClass1 e) { ... } catch(ExceptionSubClass2 e) { } ``` - 注意:这些catch里的语句不可存在继承的关系。 ### 自定义异常类 - 继承Exception以定义自己的异常类。一个方法定义时候可以使用throws声明要产生的异常,在需要抛出异常时候可以使用throw关键字抛出异常。 ExceptionSubClass: ```java public class BankException extends Exception { String message; public BankException(int m,int n) { message="入账资金"+m+"是负数或支出"+n+"是正数,不符合系统要求."; } public String warnMess() { return message; } } ``` BankClass: ```java public class Bank { private int money; public void income(int in,int out) throws BankException { if(in<=0||out>=0||in+out<=0) { throw new BankException(in,out); //方法抛出异常,导致方法结束 } int netIncome=in+out; System.out.printf("本次计算出的纯收入是:%d元\n",netIncome); money=money+netIncome; } public int getMoney() { return money; } } ``` DemoClass: ```java public class Demo { public static void main(String args[]) { Bank bank=new Bank(); try{ bank.income(200,-100); bank.income(300,-100); bank.income(400,-100); System.out.printf("银行目前有%d元\n",bank.getMoney()); bank.income(200, 100); bank.income(99999,-100); } catch(BankException e) { System.out.println("计算收益的过程出现如下问题:"); System.out.println(e.warnMess()); } System.out.printf("银行目前有%d元\n",bank.getMoney()); } } ``` ### finally - 格式 ```java try { ... } catch(...) { ... } finally{ ... } ``` - 无论catch有没有捕获异常,finally中语句都会被执行 - 注意: - 如果catch中使用return,依然***会***执行finally中部分! - 如果使用system.exit(0)则不会执行。 ## 断言 - 调试使用 - 可以让代码不处理某项异常,直接终止程序 - 程序正式运行的时候关闭断言,再需要debug时候再开启 - 易于发现某些致命错误 ### 断言语法格式 - 使用assert声明一条断言语句 - 格式1 ```java assart booleanException; ``` 格式2 ```java assart booleanException:messageException; ``` - 例如: ```java assart number >= 0 ``` 则条件不符合程序立即停止 对于第二种类型,停止后还会输出“:”之后的内容 ### 启用方法 - 默认关闭,编译时加入-ea参数开启断言 # Java常用类 ## String类 ### 构造String对象 - 常量对象 ```java String s = "Hello,String!"; ``` 此字符串将加入常量池! - String对象 ```java String t = new String("Hello,String!"); ``` t只是引用,存放真正字符串的内存地址如此,即使t和s内保存的字符串相同,但在不同位置,显然$s\neq t$ 对String对象输出,输出的是其实体。 也可从一个String对象创建另一个String对象 - 构造方法 - String(char[] a)使用字符数组创建一个String对象。 - String(char[] a, int sIndex, int eIndex)使用a数组的s~e区间建立一个String对象 - 引用String常量 - 两个String变量若同时引用同一个字面量,则其具有相同的引用,例如: ```java string s1, s2; s1 = "abc"; s2 = "abc"; ``` 则s1==s2,其原理是,在赋值时,检查常量池中是否已经存在此常量,如果已经存在不会重复创建此常量。 ### 字符串运算 - 并置 - 使用“+”连接两个字符串可以将两个字符串连接。 ### 常用方法 - public int length():返回字符串长度。 - public boolean equals(String s):比较是否与s相同(值相同) - public boolean startWith(String s):判断字符串是否以s为前缀 - endWith():同上类推 - public int compareTo(String s):判断字符串与s的大小关系(字典序),若相同返回0,若字符串大于s则返回值大于0,反之小于0. - public boolean contains(String s):判断是否包含s - public int indexOf(String s):判断s首次出现的位置,若没有返回-1 - lastIndexOf():s最后出现的位置,没有返回-1 ### 字符串与基本数据类型互相转化 - Integer类中的parseInt(String s)函数可以将s转化成整数。 - 同理存在Long,Double等类下的相应函数转换。 - String类中提供了String valueOf(\<N\>)函数将基本数据类型转化为字符串。 ### 字符串转换为字符数组 - public void getChars(int start, int end, char[] c, int offset) - public char[] toCharArray():返回字符串对应的char数组 ## StringTokenizer类 - 用于分割字符串(不使用正则表达式) ### 构造方法 - StringTokenizer(String s):对s构造一个,使用默认的分割标记(空格,回车,Tab等) - StringTokenizer(String s, String delim):对s构造一个分割器,使用delim中存在的字符分割。 例: ```java StringTokenizer fenxi = new ..("You#*are*##welcome", "*#"); ``` 则所有连续为#或*的字符串都会被当做分隔符。 ### 方法 - hasMoreTokens()方法返回boolean表示之后还有没有单词 - String nextToken()返回下一个单词 - countTokens()返回之后还有几个单词 ## Scanner类 ### 构造 - Scanner(String s) ```java Scanner scanner = new Scanner(s); ``` ### 方法 - useDelimiter(正则)函数使用“正则”中字符分割字符串 - next()方法返回下一个字符串 - hasNext()表示是否存在下一个字符串 - nextInteger(), nextDouble等返回对应的下一个元素,若下一个元素不是对应类型则会抛出InputMismatchException ## StringBuffer类 ### StringBuffer对象 - StringBuffer可修改,而String不可修改。 - StringBuffer内存自动调整大小。 #### 构造方法 - StringBuffer():初始容量为16,超过后自动调整。 - StringBuffer(int size):初始容量为size,超过后自动调整。 - StringBuffer(String s):初始容量为s的长度加上16。 - 使用(StringBuffer).length():得到保存其中的字符串长度 (StringBuffer).capacity():得到其容器的容量 ### 常用方法 - StringBuffer append(String,Long,Double...):将括号中内容加入到字符串之后,返回该字符串引用。 - StringBuffer append(Object o):将o序列化(toString)后加入字符串尾部。 - public char charAt(int n):获得字符串下表为n的字符 - public void setCharAt(int n):修改下标为n的字符 - StringBuffer insert(int index, String str):将str插入到index指定的位置,返回当前对象的引用。 - public StringBuffer reverse():翻转当前字符串并返回(会更改当前字符串)。 - StringBuffer delete(int startIndex, int endIndex):删除下标为两数之间的字符,返回当前对象。 - String Buffer replace(int s, int e, String str):将s到e的字符用str替换。 ## BigInteger类、Random类 ### BigInteger类 - 用于处理特别大的数 - BigInteger(String s):可以构造一个十进制数,若s中存在非数字会抛出NumberFormatException异常。 #### 方法 - public BigInteger add(BigInteger val):返回当前与val的和 - public BigInteger subtract(BigInteger val):差 - public BigInteger multiply(BigInteger val):积 - public BigInteger divide(BigInteger val):商 - public BigInteger remainder(BigInteger val):余 - public int compareTo(BigInteger val):返回1,-1,0表示当前对象大于,小于,等于val - public BigInteger abs(): 返回当前对象绝对值 - public BigInteger pow(int a): 返回当前对象的a次幂 - public String toString():返回当前对象十进制表示 - public String toString(int p): 返回当前对象p进制表示 ### Random类 #### 构造函数 - Random() - Random(long seed) ### 方法 - nextInt():返回一个int范围内整数 - nextInt(int n):返回一个0~n的整数(不包括n)。 - nextDouble():返回一个0~1.0的随机数(不包括1.0) - nextBoolean():返回True或False ## Class类(反射) - Class对象可以帮助程序创建其他类的实例。 - 使用Class实例创建其他类实例 - public static Class forName(String className):返回一个和className指定的类相关的class对象。如果类在某个包中,则className必须带包名例如“java.util.Date” - 获得Class对象调用 - public Object newInstance():返回该Class对象对应类的一个实例,注意该实例必须具有无参构造方法。 - 例 ```java import java.util.Date; class Rect { double width,height,area; public double getArea() { area = height*width; return area; } } public class Example8_20 { public static void main(String args[]) { try{ Class cs = Class.forName("Rect"); Rect rect = (Rect)cs.newInstance(); rect.width = 100; rect.height = 200; System.out.println("rect的面积"+rect.getArea()); cs = Class.forName("java.util.Date"); Date date = (Date)cs.newInstance(); System.out.println(String.format("%tF %<tT %<tA",date)); } catch(Exception e){ System.out.println(e.toString()); } } } ``` Last modification:March 29, 2022 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏