写在前面:今天继续分享JAVA后续的内容,可能最近对于JAVA的更新会更频繁一点,深度学习那边感觉数据加载还是有点问题,开始苦恼。在本文的最后附上了最近学习JAVA的参考文献电子版百度网盘下载地址。
学习内容安排
JAVA基础课程学习:数据类型(一)、运算符表达式和程序结构控制(二)、面向对象基础:类与对象和接口(三)、面向对象基础:继承抽象多态封装(四)、异常类和常用实用类(五)、组件和事件处理(六)、IO和JDBC(七)、泛型和集合函数(八)。
五、异常类和常用实用类
1.异常类
今天的重点是讲解一下异常类和常用的一些实用类,所谓异常类就是设置一个程序报错的反馈项,因为如果没有这样一个反馈报错项的话,程序就会中断,如果是一个大型项目程序中断的代价是非常高的,所以需要设置一个异常类进行报错,下面我们来通过实例来理解一下异常类,异常类就是用try-catch来构造异常捕捉机制。
我们希望输入一个整数,并输出,如果输入的不是一个整数那么就返回异常捕捉中的语句,
1.1单异常捕捉机制
//单个的异常捕捉机制
package mycp7;
import java.util.Scanner;
public class Csdn5_1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("[请输入一个整数]> ");
int x = 0; //需要在try的外面定义x,try之外的x才可识别
try{
x = in.nextInt();
System.out.println("您输入的整数为=> "+x);
}catch (Exception e){
System.out.println("您输入的不是一个整数!");
}
}
}
[请输入一个整数]> 20
您输入的整数为=> 20
[请输入一个整数]> a
您输入的不是一个整数!
那么当我们不再是一个语句的时候作为新手应该怎么来设置报错项,来让我们知道到底是哪个语句出错了呢?这里我们使用的一个叫做判断语句的方法,判断语句位于要执行的两个语句中间,如果第一个出错,那么判断语句不输出;如果第二个出错那么判断语句先输出,例子如下,
1.2判断语句
package mycp7;
import java.util.Scanner;
public class Csdn5_1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("[请输入一个整数]> ");
int x = 0, y = 0;
try{
x = in.nextInt();
System.out.println("您输入的整数x为=> "+x);
System.out.println("此语句出现说明x的输入无问题");//判断语句
System.out.print("[请输入另一个整数]> ");
y = in.nextInt();
System.out.println("您输入的整数y为=> "+y);
}catch (Exception e){
System.out.println("您输入的不是一个整数!");
}
}
}
下面我们展示三种情况来说明这样一个判断语句,
第一种情况:我们对x输入a,那么立即结束程序运行输出“您输入的不是一个整数”
[请输入一个整数]> a
您输入的不是一个整数!
第二种情况:我们对x输入2,程序继续运行输出x的展示以及判断语句,然后对y输入a,立即结束程序运行,输出报错语句,
[请输入一个整数]> 2
您输入的整数x为=> 2
此语句出现说明x的输入无问题
[请输入另一个整数]> a
您输入的不是一个整数!
第三种情况:我们对x输入2,程序继续运行输出x的展示以及判断语句,然后对y输入3,正常运行完整程序。因此我们就可以看出当判断语句出现时说明上一个语句无问题。
[请输入一个整数]> 2
您输入的整数x为=> 2
此语句出现说明x的输入无问题
[请输入另一个整数]> 3
您输入的整数y为=> 3
在catch后面的Exceotion e表示包括又有的错误类别,到后面可以针对不同的错误设置不同的catch进行报错。
1.3调用时的异常捕捉机制
当我们需要调用上面输入的函数时,我们可以创建对象来完成调用,但此时遇到一个问题就是,我们调用了后,如果错误输入非整数型数据,那么就会执行“您输入的不是一个整数!”语句,那如果别人需要设置自己的报错语句应该怎么来设置呢?怎么来实现更加个性化的报错语句呢?
首先我们需要将之前测试的主方法改为方法,然后再方法名后面写上throws Exception来使得调用用户自定义报错语句,
package mycp7;
import java.util.Scanner;
public class Csdn5_1 {
void input() throws Exception{
Scanner in = new Scanner(System.in);
System.out.print("[请输入一个整数]> ");
int x = 0, y = 0;
x = in.nextInt();
System.out.println("您输入的整数x为=> " + x);
System.out.println("此语句出现说明x的输入无问题");//判断语句
System.out.print("[请输入另一个整数]> ");
y = in.nextInt();
System.out.println("您输入的整数y为=> " + y);
}
}
然后创建另一个java类,我们来进行方法的调用,
package mycp7;
public class Csdn5_2 {
public static void main(String[] args) {
Csdn5_1 k = new Csdn5_1();
try{
System.out.println("我们需要输入x, y两个值");
k.input();
}catch (Exception e){
System.out.println("警告:错误!");
}
}
}
我们需要输入x, y两个值
[请输入一个整数]> a
警告:错误!
2.常用实用类String
下面我们将介绍几个在JAVA中比较常用的类,并附带例子进行分享,在今天的分享中我们主要分享String类的一些实用方法。
String类在java.lang的包中,这个包被默认加载了,所以不需要单独的调用,需要注意的是String类的声明为final类,也就是用户不能对String类进行重写,对于String类的用法我们继续分享,
2.1常量对象
也就是直接利用String声明变量,例如,虽然a、b的值是一样的但是会给这两个常量赋予不同的储存位置,
package mycp7;
public class Csdn5_3 {
String a = "123", b = "123";
}
2.2String对象
还可以通过String类来声明对象并创建对象,这里有几种常用的用法,
1)这里对两个对象分别声明了同样的内容,但值得注意的是如果对s和t两个对象利用s==t会返回false,因为比较的是两个对象的索引,储存在不同的位置,所以对于非java8个基础类型的数据,我们均不使用双等号,具体方法会在后文讲到,
2)可以对char数组进行String的自动连接,生成字符串;
3)可以指定String连接char中的某一段,String(a,2,4)表示从第3位开始取4个值进行拼接,具体例子如下,
package mycp7;
public class Csdn5_3 {
//String声明对象
String s = new String("We are students");
String t = new String("We are students");
//String对char的拼接
public static void main(String[] args) {
char x[] = {'我','是','明','曦','君','!'};
String xx1 = new String(x);
System.out.println(xx1);
//相当于String xx1 = new String("我是明曦君!");
String xx2 = new String(x,2,3);
System.out.println(xx2);
}
}
我是明曦君!
明曦君
2.3String类常用的方法
下面来介绍一些对于String的常用方法,
1)public int length():获取字符串长度。
我们在JAVA系列的第一篇的时候对数组长度的计算用到了length,但没有括号,因为有括号的是方法。这里值得注意的是JAVA中汉字占一个长度,
package mycp7;
public class Csdn5_3 {
public static void main(String[] args) {
String m = new String("abc明曦君");
System.out.println(m.length());
}
}
6
2)public boolean equals(String s):判断当前String对象的字符序列是否与参数s指定的String对象的字符序列相同;
所以我们再次强调,对于JAVA的非基础类型数据,我们不要使用双等号去判断数据是否相等。
package mycp7;
public class Csdn5_3 {
public static void main(String[] args) {
String s = new String("We are students");
String t = new String("We are students");
if(s == t){
System.out.println("s和t的值相等");
}else{
System.out.println("双等号:s和t的值不等");
if(s.equals(t)){
System.out.println("s和t的值相等");
}
}
双等号:s和t的值不等
s和t的值相等
3)public boolean startsWith(String s):判断当前String对象是否以制定字符开头;
这个方法可以用于大规模识别一些数据的格式是否正确,比如识别省份证是否以5开头,这类的。
package mycp7;
public class Csdn5_3 {
public static void main(String[] args) {
String z = new String("我是明曦君");
if(z.startsWith("我")){
System.out.println("字符串是以“我”开始的");
}
}
字符串是以“我”开始的
4)public boolean contains(String s):判断当前序列是否包含s序列;
package mycp7;
public class Csdn5_3 {
public static void main(String[] args) {
String z = new String("我是明曦君");
if(z.contains("明曦")){
System.out.println("包含“明曦”");
}
}
}
包含“明曦”
5)public int indexOf(String str):返回首次出现str序列的位置,如无值则返回-1,当然还可以设置参数,表示从第几个字符开始搜索;
这里就可以返回索引,返回指定字符出现的位置
package mycp7;
public class Csdn5_3 {
public static void main(String[] args) {
String v = new String("131452020202222");
System.out.println(v.indexOf('2'));
System.out.println(v.indexOf('2',6));
}
}
5
7
6)public String trim():删掉String对象前后的空格字符序列。
在经常输入密码的时候,我们可能会不经意间输入了括号,为此我们在做密码分析的时候一般是去掉左右的括号,这个在SQL中的密码分析还挺常用的。
package mycp7;
public class Csdn5_3 {
public static void main(String[] args) {
String w = new String(" 2020-3-8 ");
System.out.println(w+" w长度为: "+ w.length());
System.out.println(w.trim()+" w长度为: "+ w.trim().length());
}
}
2020-3-8 w长度为: 13
2020-3-8 w长度为: 8
7)public String substring(int statrt point):就是提取字符串中的一段。
8)字符串与基本数据的相互转化
例:String转换为int需要使用public satatic int parseInt(String s)
当我们看到有satatic时,就知道这个类方法,可以直接输入类.方法进行调用,这个方法的类时Integer。这里我们同时使用substring一区部分字段,
package mycp7;
public class Csdn5_3 {
public static void main(String[] args) {
int x;
String s = "876";
x = Integer.parseInt(s.substring(1, 3));
System.out.println(x);
}
}
876
同样的我们还可以把字符串转为byte、short、long、float、double类型,他们对应的类分别是Byte\Short\Long\Float\Double类,对应的调用方法就是parseByte这种,这里就不做展示了。但需要注意的是调用其他类需要注意取值范围,这个在第一讲数据基本类型里就说过了,可以翻阅查看。
9)将基本类型或者其他类型转化为字符串
例:我们需要将byte、short、int、long、float、double这几个类型的转为字符串型,需要使用public static String valueOf(byte n),这个方法。
10)public String toString() 就是将得到的对象转换为String,下面我们来展示一下把现在的时间进行提取转化为字符串,
package mycp7;
public class Csdn5_3 {
public static void main(String[] args) {
String a = String.valueOf(11153);
System.out.println(a.substring(1,4));
Date d = new Date();
System.out.println(d);
String date = d.toString();
System.out.println(date.substring(11, 19));
}
}
115
Mon Mar 09 09:46:08 CST 2020
09:46:08
结语
好了,今天关于异常类已经String类的常用方法已经分享完了,后续可能会出多个续篇来对更多的常用类进行说明。
谢谢阅读。
参考
JAVA2实用教程第5版
链接:https://pan.baidu.com/s/1MBWZigAGH6NYDqw3nfeWJw
提取码:bhpl