1.概念:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描==>就是一个文本扫描器
2.构造方法
import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner input = new Scanner(System.in); // System.out.println("请输入字符串"); // String s = input.next(); // System.out.println(s); // System.out.println("请输入字符串"); // String s1 = input.nextLine(); // System.out.println(s1); System.out.println("请输入年龄"); if (input.hasNextInt()){ int age = input.nextInt(); System.out.println(age); }else{ System.out.println("输入不合法"); } } }
4.问题:
第一次输入的年龄 nextLine 直接读取回车键 所有结束了 无法再输入
5.解决:
A.实例化一个新的Scanner
B.键盘都接收String类型 再将String转换为int类型
C.都是调用 nextLine() 是不会出现这种问题
或者将nextLine()放在第一个接受录入的位置
1.概念:此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查
看的静态工厂
2.常用的方法
package com.qf.demo02; import java.util.Arrays; public class Test01 { public static void main(String[] args) { int [] arrays ={-1,30,80,40,70}; Arrays.sort(arrays); System.out.println(Arrays.toString(arrays)); System.out.println(Arrays.binarySearch(arrays, 30)); int[] ints = Arrays.copyOf(arrays, 6); System.out.println(Arrays.toString(ints)); Arrays.fill(arrays,100); System.out.println(Arrays.toString(arrays)); } }
注意数组转字符串是Arrays.toString(数组名),而不是数组名.toString,后者返回数组地址值
1.概念:在编译期间 或者是程序运行期间 出现的错误 或者不正确的情况都是异常
2.异常的体系
3.异常的分类:
A.编译时异常:在编译期间发生的异常 就是编译时异常
B.运行时异常:在程序运行期间发生的异常 就是运行时异常
1.如果执行一段代码 产生了异常 将异常信息封装到Throwable类中
2.将异常信息返回给调用者 一层 一层返回给调用者
3.如果所有的调用者都不处理异常 这个异常由jvm来进行处理
4.处理结果:停止程序 将异常信息打印到控制台
package day13.work; public class Work03 { public static void main(String[] args) { show03(); System.out.println("123456789"); } public static void show03(){ show02(); } public static void show02(){ show01(); } public static void show01(){ System.out.println(1/0); } }
1.语法:
try{
可能出现异常的代码
}catch(异常类型的声明){
处理异常 或者 是打印异常异常
}
2.解释:
A.try 大括号后一定要可能出现异常的代码
B.catch小括号 是异常类型的声明 异常类型必须是Throwable的子类
C.catch 大括号后 是异常的处理的解决方案
3.执行的流程
A.执行try中的代码
B.如果不发生异常 继续往下执行代码
C.如果发生异常是 声明的时的异常子类或者是本身的时候 就执行catch的代码
D.如果生异常是 声明的时的异常 不匹配 则jvm处理异常
1.语法:
try {
可能产生异常的代码
代码
}catch(异常声明1){
处理异常1方式
}catch(异常声明2){
处理异常2的方式
}
2.执行的流程:
A.执行可能发生异常的的代码
B.如果发生异常 依次与catch中的异常声明进行匹配 如果可以则执行 catch 大括号后的代码
C.如果发生异常 与catch中声明的异常不匹配 则jvm处理异常 停止程序运行 打印错误的信息
3.注意点:
A.在jdk1.7之后 多个异常的声明可以使用|来进行连接 一般不能连接Exception异常
B 声明多个异常的时候 异常类的范围从小到大来进行声明
C.当一个异常匹配且执行后不会再运行try{}里报错位置后的代码,也不会再匹配另一个catch,直接跳出try-catch结构,执行后面的代码
package day13; import java.util.Scanner; public class Test03 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("输入被除数"); int num = sc.nextInt(); System.out.println("输入除数"); int num1 = sc.nextInt(); //快捷键 选中代码 +ctrl + alt +t :快速生成try catch结构 try { int sum =num/num1; System.out.println("商为:"+sum); int [] array = null; System.out.println(array[0]); } catch (ArithmeticException e) { System.out.println("除数不能为0"); }catch (NullPointerException e){ System.out.println("空指针异常"); } System.out.println(123); } }
1.语法:
try{
可能发生异常的代码
}catch(异常的声明){
处理异常的方式
}finally{
最终执行的代码
}
2.执行流程
A.执行可能发生异常的代码
B.依次与catch中声明异常进行匹配 如果可以匹配 则执行catch对应的大括号的代码 最后执行finally代码
C.依次与catch中声明异常进行匹配 如果不可以匹配 则jvm处理异常 最后执行finally中的代码
3.说明:
A.不管是否发生异常 都会执行finally中的代码
B.如果return; 关键字不发生异常 先执行finally中代码 再执行return;
C.杀死jvm 才不会执行finally中的代码 System.exit(0);
package day13; import java.util.Scanner; public class Test04 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("输入索引下标"); int [] num = {20,30,40}; int i = sc.nextInt(); try { System.out.println(num[i]); System.exit(0); //int [] nums = null; //System.out.println(nums[1]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组下标越界"); } catch (NullPointerException e){ System.out.println("空指针异常"); } finally { System.out.println("最后代码"); } } }
1.语法:
try {
可能发生异常的代码
}finally{
最终执行的代码
}
2.执行的流程:
A.先执行可能发生异常的代码
B.再执行final
ly中的代码
3.特点:
A.不管是否发生异常 都会执行finally中代码
B.try 与finally中的代码进行分离 结构更加清晰
C.这种方式的异常处理只能由jvm来进行处理
1.概念:Throwable 类是 Java 语言中所有错误或异常的超类 两个子类的实例,Error 和
Exception
2.常用的方法
1.Throws 声明异常
2.使用场景:程序在运行期间 可能发生异常 不想自身进行处理 就可以声明异常 给调用者来处理
3.语法:在方法的参数列表的后面
访问修饰符 返回值类型 方法的名称(参数列表) throws 异常1,异常2{
方法体;
retrun 返回值;
}
4.注意点:
A.声明的异常是运行时异常以及其子类 调用者不用处理 如果不是则需要调用者进行处理
B.声明异常的类型范围越小,越精确更好
package com.qf.demo03; public class Test09 { public static void main(String[] args) { showInfo(); } public static void showInfo()throws ArithmeticException,RuntimeException{ System.out.println(1/0); } }
1.Throw 抛出异常
2.语法:写在方法中
访问修饰符 返回值类型 方法的名称(参数列表){
throw new 异常类型
}
3.说明:
A.如果在方法中 抛出的异常是运行时异常的子类以及其本身 则不需要在方法上进行异常的声明
B.如果在方法中 抛出不是运行时异常 要么进行异常的捕获 要么进行异常的声明
C.一般发生异常 建议捕获
D.在实际开发一般Throw与Throws会进行搭配的使用
package com.qf.demo03; public class Test10 { public static void main(String[] args) { showInfo(); } public static void showInfo() throws Exception { // try { // throw new Exception(); // } catch (Exception e) { // e.printStackTrace(); // } throw new Exception(); } }
抛出异常后,需要在方法参数后声明异常或者捕获异常 即 Throw 必须与throws 或者 try-catch 搭配,一般与后者搭配
在继承中 子类重写方法的时候 声明的异常的范围 不能超出父类异常的范围 要么是本身或者是其子类
1.概念:在实际项目中项目需要的异常信息 jdk不能满足的时候 就使用自定义异常
2.步骤:
A.定义一个类继承Throwable 或者是 Exception
B.调用父类的构造方法来传递异常信息
package com.qf.demo05; public class MyExecption extends Exception { public MyExecption(String msg){ //调用父类的有参的构造 super(msg); } }
package com.qf.demo05; public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { if (age < 0 || age >100){ try { throw new MyExecption("什么什么鬼......"); } catch (MyExecption myExecption) { myExecption.printStackTrace(); } }else{ this.age =age; } } }
package com.qf.demo05; public class Test { public static void main(String[] args) { Student stu = new Student(); stu.setAge(-100); } }
1.集合:用于存储数据的容器
2.数组与集合的区别:
相同点:都是用于存储数据的容器
不同点:
A.数组可以存储基本数据类型 也可以存储引用数据类型 集合只能存储引用数据类型
B.数组的是固定 集合的长度不是固定
3.集合的体系:
单列集合: 集合中的一个数据都是独立的单元
双列集合 集合中的数据是以组为单位来进行存储 以键值对来进行存储
1.概念:Collection 层次结构 中的根接口 子接口 Set 和 List
2.使用多态来实例化对象
3.展示实现类
4.常用的方法
package day13; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; public class Test08 { public static void main(String[] args) { Collection cal = new ArrayList(); cal.add("小明"); cal.add("来广州"); cal.add("当靓仔"); cal.add("学Java"); System.out.println(cal); System.out.println(cal.isEmpty()); cal.remove("来广州");//根据内容来移除 System.out.println(cal); System.out.println(cal.size()); System.out.println(cal.contains("小明")); System.out.println(cal.contains("靓仔")); System.out.println(Arrays.toString(cal.toArray())); cal.clear(); System.out.println(cal); } }