学Java第13天

一、Scanner

1.概念:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描==>就是一个文本扫描器
2.构造方法
学Java第13天

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()放在第一个接受录入的位置

二、Arrays数组的工具类

1.概念:此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查
看的静态工厂
2.常用的方法
学Java第13天

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.异常的体系
学Java第13天
3.异常的分类:
A.编译时异常:在编译期间发生的异常 就是编译时异常
B.运行时异常:在程序运行期间发生的异常 就是运行时异常

学Java第13天

四、jvm处理异常

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

}

五 try-catch 处理异常

1.语法:
try{
可能出现异常的代码
}catch(异常类型的声明){
处理异常 或者 是打印异常异常
}
2.解释:
A.try 大括号后一定要可能出现异常的代码
B.catch小括号 是异常类型的声明 异常类型必须是Throwable的子类
C.catch 大括号后 是异常的处理的解决方案
3.执行的流程
A.执行try中的代码
B.如果不发生异常 继续往下执行代码
C.如果发生异常是 声明的时的异常子类或者是本身的时候 就执行catch的代码
D.如果生异常是 声明的时的异常 不匹配 则jvm处理异常

六、try-catch-catch 捕获异常

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

七、try-catch-finally

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("最后代码");
        }
    }
}

八、try-finally

1.语法:
try {
可能发生异常的代码
}finally{
最终执行的代码
}
2.执行的流程:
A.先执行可能发生异常的代码
B.再执行final学Java第13天
ly中的代码
3.特点:
A.不管是否发生异常 都会执行finally中代码
B.try 与finally中的代码进行分离 结构更加清晰
C.这种方式的异常处理只能由jvm来进行处理

九、Throwable

1.概念:Throwable 类是 Java 语言中所有错误或异常的超类 两个子类的实例,Error 和
Exception
2.常用的方法
学Java第13天

十、Throws

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

十一 Throw

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

学Java第13天
抛出异常后,需要在方法参数后声明异常或者捕获异常 即 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.集合的体系:
单列集合: 集合中的一个数据都是独立的单元
双列集合 集合中的数据是以组为单位来进行存储 以键值对来进行存储
学Java第13天

十五、Collection 集合

1.概念:Collection 层次结构 中的根接口 子接口 Set 和 List
2.使用多态来实例化对象
3.展示实现类
4.常用的方法
学Java第13天

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

    }
}

上一篇:搭建MySQL集群-注意版本


下一篇:边写边学Python(7)复制列表