1异常处理
1.1Exception的两种处理方式概述
【捕获】有能力处理你就捕获,自己的问题你就捕获
【抛出】没有办法处理,或者不是自己的问题,和自己无关,因别人导致的错误,抛出
1.2捕获异常
1.2.1基本格式
格式:
try {
//有可能出现问题的代码,存在一定隐患的代码
} catch (异常类型){
//对应当前异常类型的处理方式
//【因为技术有限,只用sout 或者printStacTrace 后期我们会使用日志 log】
}
1.2.2细节问题和注意事项
1代码中出现异常,JVM会终止代码运行,若使用 try catch 捕获异常,JVM会认为代码中不存在异常,继续运行
2try 和 catch 中的都是局部变量,处理操作数据时小心
3try - catch 捕获处理异常。可以处理多种异常情况!!1建议分门别类对症下药
4代码中存在多中隐患,多个异常情况,try - catch 只能处理第一个出现异常的代码。因为JVM从异常代码开始直接进入异常捕获阶段
5Exception作为Java中所有异常的超类,在捕获异常处理时如果直接使用Exception进行捕获处理,无法做到对症下药
6Exception 可以作为try - catch 最后一个,用于处理其他异常捕获之后没有对症方式遗留问题
1.3抛出异常
1.3.1基本格式
关键字:
·throw
在方法内特定条件下抛出指定异常
throws
在【方法声明】位置,告知条用者。当前方法有哪些异常抛出
用于处理非当前方法操作问题,导致出现的异常,一般情况下用于处理方法运行过程中因为参数传入,参数处理,运算结果导致的问题,抛出异常,
throw 是一个高级的参数合法性判断!!!
1.3.2细节问题和注意事项
1代码运行到throw抛出异常,之后的代码不再运行,成为无参触及代码
2代码存在多种隐患,按照隐含的情况,分们别类处理,不能再同一条件内抛出两个异常,并且在方法声明位置,throw之后,不同的异常,使用逗号隔开
3当调用带有异常抛出的方法时,对于方法抛出的异常,有两种处理方式,可以捕获,可以抛出
1.4抛出处理和捕获处理选择
分析:
用户查询指定路径指名字的文件,存在异常处理分析过程。
1.5异常分类
运行时异常:
RuntimeException 代码运行过程中出现的异常,没有处理的必要性
ArryIndexOutOfBoundsException 数组下标越界异常
NullPointerException 空指针异常
ArithemticException 算术异常
运行时异常不强制要求捕获和抛出!!!
JVM 会处理RuntimeException 也就是告知异常的前因后果!!!
其他异常
强制要求处理,捕获处理,还是抛出处理,都需要进行操作
如果未处理!!!直接报错!!!
IDEA工具快速修复
Elipse Ctrl + 1
IDEA Alt + Enter
1.6自定义异常
自定义异常格式:
class MyException extends Exception
{
public MyException(){}
public MyException(String message)
{
super(message);
}
}
1.7异常处理总结
1异常的必要性,代码中使用的数据,大多数来自用户,用户传入数据是不可靠的情况!!!存在一定的错误意识,反馈机制和处理机制
2异常处理方式
捕获
抛出
需要根据使用情况操作方式,反馈形式来选择对应的处理方式
3自定义异常,了解异常的构造,基本上在开发中用到自定义异常的情况不多见。但是要了解关于异常信息保存的方式
2String类
2.1字符串类型概述
String字符串类型是java中引用数据类型,且String 类型是使用final修饰,没有自己的子类
字符串的存储也是非常个性的一件事,分两种情况
1在内存数据区
2在内存堆区
字符串是常量!!!
确定后无法修改
2.2获取方法
int length();
获取字符串的长度
char charAt(int index);
从字符串中获取对应下标位置的字符(存在下标越界问题)
int indexOf‘(char ch);
找出指定字符在当前字符串中的下标位置
int indexOf(String str);
找出指定字符串在当前字符串中的下标位置
"ABCDEFGABCDEFG"
查询 "DE" ==> result 3
int lastIndexOf(char ch);
找出指定字符串最后一次出现的下标位置
"ABCDABCD"; 查询 "CD" ==> result 6
package com.qfen.rxs;
public class Demo1 {
public static void main(String[] args) {
String str = "ABCDEFGABCDEFG";
//length 方法
System.out.println("str.length() :" + str.length());
// charAt方法
System.out.println("str.charAt(5) :"+ str.charAt(5));
System.out.println("str.charAt(0) :" + str.charAt(0));
//index 方法
System.out.println("str.indexOf(\"CD\") :" + str.length());
System.out.println("str.indexOf('C') :" + str.indexOf('C'));
//lastIndexOf 方法
System.out.println("str.lastIndexOf(\"CD\") " + str.lastIndexOf("CD"));
System.out.println("str.lastIndexOf('C')" + str.lastIndexOf('C'));
}
}
2.4判断方法
boolean endsWith(String str);
判断当前字符串是不是指定字符串结尾,是返回T 否则F
boolean startsWith(String str);
判断当前字符串是不是指定字符串开始,是T 否则 F
boolean isEmpty();
判断当前字符串是否为空,“”空字符串
boolean contains(String str)
判断指定字符串是否是当前字符串的子符串
当前字符串: "ABCDEFG";
参数字符串: "CDE"; ==> result true
原码调用String 类的indexOf方法,找出指定字符的下表位置,indexOf方法下标为大于等于0返回 T 否则返回F
boolean equals (Object anObject);
重写Oveeride Object类内方法,判断两个字符串是否一致
boolean equalsIsIgnoreCase(String anotherString);
忽略大小写是否相等,不考虑英文大小写比较两个字符串是否一致
package com.qfen.rxs;
public class Demo3 {
public static void main(String[] args) {
String str = "ABCDEFGSBCDEFG";
// endsWith
System.out.println("str.endsWith(\"FG\")" + str.endsWith("FG"));
System.out.println("str.endsWith(\"GF\")" + str.endsWith("GF"));
//startsWith
System.out.println("str.startsWith(\"AB\")" + str.startsWith("AB"));
System.out.println("str.startsWith(\"BA\")" + str.startsWith("BA"));
//isEmpty
System.out.println("str.isEmpty() :" + str.isEmpty());
System.out.println("\"\".isEmpty() " + "".isEmpty());
//contains
System.out.println("str.contains(\"ABCD\")" + str.contains("ABCD"));
System.out.println("str.contains(\"ACBD\")" + str.contains("ACBD"));
//equalsIgnoreCase
System.out.println("ABCDEFG".equalsIgnoreCase("Abcdefg"));
}
}
2.5转换方法
String (char[] value);
将字符数组转换为字符串
String(char [] value, int offset, int count);
将字符数组转换为字符串,从指定offset位置开始,技术count
offset是开始位置
count是截取个数
例如: char[] arr = {'A', 'B', 'C', 'D', 'E'}; 调用方法参数:
new String(arr, 2, 3); ==> result "CDE"
static String valueOf(char[] data);
同理String(char[] data);
static StringvalueOf(char[] data,int offset,int count);
同理
String(char [] value, int offset, int count);
char[] toCharArry();
将字符串转换为字符数组
例如: "ABCDE"; 返回值: {'A', 'B', 'C', 'D', 'E'};
package com.qfen.rxs;
public class Demo4 {
public static void main(String[] args) {
char [] arr = {'A','B','C','D','E','F','G'};
String str = new String(arr);
System.out.println(str);
String str2 = new String(arr, 3, 3);
System.out.println(str2);
String str3 = new String(arr);
System.out.println(str3);
String str4 = new String(arr, 3, 3);
System.out.println(str4);
char[] charArray = "拔剑四顾心茫然".toCharArray();
for (int i = 0; i < charArray.length; i++) {
System.out.println(charArray[i]);
}
}
}
2.6其他方法
String replace(char oldChar,char newChar);
替换使用newChar字符类型,替换当前字符串内的所有指定字符oldChar
例如: "ABCDEABCDE";
调用方法: "ABCDEABCDE".replace('A', '你');
返回值结果: "你BCDE你BCDE"; 【注】原字符串不变
String[] spit(String regex);【重点】
【重点】切割,将当前字符串按照指定字符串切割成String类 型数
例如:
String str = "你好!他好!大家好!广州好迪";
调用方法: str.split("!");
返回值结果: String[] arr = {"你好", "他好", "大家好", "广州好迪"};
调用方法: str.split("好");
返回值结果: String[] arr = {"你", "!他", "!大家","!广 州", "迪"};
String substring (int beginIdex);【重点】
从指定beginIndex开始,到字符串结尾截取字符串
例如: String str = "ABCDEFG";
调用方法: str.substring(3); 返回值结果: "DEFG
String substring(int beginIndex, int endIndex);
【重点】 从指定beginIndex开始,到endIndex结束,截取字符串 要头不要尾
beginIndex <= 结果范围 < endIndex
String toUpperCase();
字符串中所有的英文字母转大写,返回新字符串
String toLowerCase();
字符串中所有的英文字母转小写,返回新字符串
String trim();
去除字符串两边的空格
package com.qfen.rxs;
import java.util.Arrays;
public class Demo5 {
public static void main(String[] args) {
String str = "ABCDEFGABCDEFG";
String replace = str.replace('A', '你');
System.out.println(str);
System.out.println(replace);
String str1 = "你好,他好,大家好,广州好迪";
String [] split = str1.split(",");
System.err.println(Arrays.toString(split));
for (int i = 0; i < split.length; i++) {
System.out.println(split[i]);
}
String substring = str.substring(5);
System.out.println(substring);
String substring2 = str.substring(5, 9);
System.out.println(substring2);
System.out.println("affsf".toUpperCase());
System.out.println("ADDFAF".toLowerCase());
System.out.println();
String str2 = "adafdaf afdafafaf ";
System.out.println(str2);
System.out.println(str2.trim());
}
}