异常处理和String类

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());

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。