实训笔记6.14

6.14

一、座右铭

我的故事你说,我的文字我落,我值几两你定,我去何方我挑。

二、知识回顾

2.1 Java常用类

2.1.1 包装类

包装类的使用方式(自动拆箱、自动装箱-必须要求运算符两端的类型一个是基本数据类型、一个是包装类类型)、缓存池问题(Byte\Short\Integer\Long\Character\Boolean)、包装类的值比较问题、包装类和字符串的互相转换的问题

2.1.2 Math、System、Random、Scanner

2.1.3 Date、SimpleDateFormat

SimpleDateFormat:将指定格式的字符串时间转换为Date时间日期类parse(String):Date、将Date时间日期类以指定的字符串格式转换称为字符串format(Date):String.

yyyy-四位数的年份 MM—两位数月数 dd—天数 HH-小时 mm—两位数的分钟 ss-秒数 SSS-毫秒数

Calendar 类是一个抽象类

2.1.4 Arrays数组工具类-java.util

Arrays数组工具类当中提供了很多和数组有关的方法,比如折半查找、排序、打印等等功能。

工具类是Java中一种比较特殊的类,工具类专门为了某个类,某种内容提供的相关方法的组合类。这些方法为了可以快速调用,把这些方法全部声明为了静态方法,那么这样工具类就没必要构建对象了,所以一般工具类的构造器都是私有化的。

声明工具类的方法:

  1. 构造器私有化
  2. 方法全部是static静态的。
方法名 作用
toString(xx[] a):String 将数组转换称为字符串输出
binarySearch(xxx[] array,xx key):int 使用二分查找思想去数组中查找某个元素,
如果找到了返回元素在数组中的索引位置,
如果没找到了,返回最后依次找的索引位置的负值。
sort(xxx[] a,[Comparator]):void 对传入数组进行排序(快排)

代码示例:

int[] array = {
    
    1,3,4,5,6,7,8};
System.out.println(array);//[I@15db9742
String s = Arrays.toString(array);
System.out.println(s);//[1, 3, 4, 5, 6, 7, 8]
		
int index = Arrays.binarySearch(array, 9);
System.out.println(index);//-8
		
int[] array1 = {
    
    2,3,4,1,2,6,4,3};
Arrays.sort(array1);
System.out.println(Arrays.toString(array1));//[1, 2, 2, 3, 3, 4, 4, 6]

2.1.5 Java比较器

Java比较器是专门为引用数据累加比较大小设计的一个接口。接口只是给我们提供了一个引用数据类型比较大小的逻辑方法,但是到底怎么比较,比较器不负责。

Java提供了两个比较器:Comparable、Comparator.

Java提供了两个比较器:Comparable-java.lang、Comparator-java.util。

如果我们想要借助Comparable去实现大小比较,那么要求需要比较的类必须实现这个接口。—使用场景:比较的类不管在怎么情况下大小比较的逻辑都是一样的。

如果我们想要借助Comparator去实现大小比较,那么单独定义一个类去实现这个接口或者是匿名内部类的方式去实现这个接口。–使用场景:类在不同的场景下大小的比较逻辑是不一样的。

代码示例:

		Student[] array = new Student[5];
		array[0] = new Student("zs","man",20);
		array[1] = new Student("ls","woman",20);
		array[2] = new Student("ww","man",20);
		array[3] = new Student("ml","woman",24);
		array[4] = new Student("dnn","man",10);
		
		Arrays.sort(array,new Comparator<Student>() {
    
    

			@Override
			public int compare(Student o1, Student o2) {
    
    
				if(o1.getStudentAge() > o2.getStudentAge()) {
    
    
					return 1;
				}else if(o1.getStudentAge() < o2.getStudentAge()) {
    
    
					return -1;
				}else {
    
    
					return -o1.getStudentName().compareTo(o2.getStudentName());
				}
			}
		});
		
		System.out.println(Arrays.toString(array));
		//[Student [studentName=dnn, studentSex=man, studentAge=10], 
		//Student [studentName=zs, studentSex=man, studentAge=20], 
		//Student [studentName=ww, studentSex=man, studentAge=20], 
		//Student [studentName=ls, studentSex=woman, studentAge=20], 
		//Student [studentName=ml, studentSex=woman, studentAge=24]]

三、Java异常体系

3.1 异常概念

在Java当中,一旦当程序产生了异常之后,JVM默认的处理机制是这样的:在产生异常的代码处自动创建一个该异常的对象,随后将异常对象抛出,随后JVM内存直接中止运行了。

Java异常体系主要就是学习有哪些异常,包括出现一些异常之后我如何对异常进行处理,从而使得程序的运行的损失降低的最低点。

3.2 Java的异常体系

Java异常整体分为两类:

Error类型的异常:一般是因为硬件设备的问题导致的一些异常,这种异常就算我们编写了针对性的代码也解决不掉,因此这种异常干脆不做任何的处理。

StackOverflowError和OOM

Exception类型的异常:这种异常一般是因为代码自带的或者是程序员编写代码的时候逻辑出现问题导致的错误都成为exception异常。Exception类型的异常又分为两类:

  1. 编译时异常-受检异常:在我们使用javac命令编译代码时就会出现的异常称之为编译时异常,这种异常需要开发人员必须手动解决,不解决代码永远无法编译或者运行。

  2. 运行时异常-非受检异常:运行时异常就是我们在编译代码的时候不会出现任何的问题,可以顺利的编译称为class字节码文件,但是当我们运行的时候,因为无法分别分配或者是其他原因导致的异常称之为运行时异常,异常一般也是不解决的。运行时异常一般是不受控制的,我们可能根本不知道哪一行代码会出现运行时异常。

3.3 异常的解决方案

(1)抛出:throws—只有方法的抛出

当我们Java程序在运行过程中,如果某一行产生异常之后,JVM会在异常行的位置新建一个该异常的对象,随后异常行之后的代码均停止执行,随后异常对象会被方法抛出,抛出给调用者,然后调用者进行处理,调用者也可以选择抛出处理,如果所有的使用者都是抛出处理,main主方法也是抛出处理,那么程序就直接终止了。

抛出的语法:
访问控制修饰符 static fianl 返回值类型 方法名(xxx) throws 异常类或者是异常类的父类 {}

代码示例:

package com.sxuek.exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 异常的解决方案一:使用抛出的方式进行解决
 * 
 * @author 11018
 *
 */
public class Demo02 {
    
    
	public static void main(String[] args) throws ParseException{
    
    
		test();
		System.out.println(1);
	}

	public static void test() throws ParseException {
    
    
		test01();
		System.out.println("调用者的代码");
	}

	public static void test01() throws ParseException{
    
    
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		//ctrl shift o  导入当前类中没有导入的所有类
		Date date = sdf.parse("2022-10/31");
		System.out.println("异常之后的代码");
	}
}

(2)捕获:try catch finally—特殊的代码块处理记住

在异常的两种处理机制中,抛出是一种极不负责任的解决方式,真正可以解决异常问题是try catch finally体系。

使用方式:

try{
    
    
	异常代码;
	//如果try块的某一行代码执行出了问题,那么try块剩余的代码均不执行了,随后进行catch匹配,看看异常使用哪个catch解决,最后都要执行一下finally方法。
}catch(异常类异常对象名){
    
    
    异常的解决方案
}catch(xxxxx){
    
    
    //catch块可以有无数个,但是在些catch块的时候,必须按照异常的从小到大的顺序依次捕获。
}finally{
    
    
}

代码示例:

package com.sxuek.exception;

import java.io.FileNotFoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 异常的解决方案二:使用try catch解决
 * 
 * @author 11018
 *
 */
public class Demo03 {
    
    
	public static void main(String[] args){
    
    
		test();
		System.out.println(1);
	}

	public static void test(){
    
    
		test01();
		System.out.println("调用者的代码");
	}

	public static void test01(){
    
    
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
    
    
			Date date = sdf.parse("2022-10/31");
			System.out.println(2);
		}catch(ParseException e) {
    
    
			//处理代码  你想怎么处理就怎么处理
			//一般的处理机制就是把处理信息打印处理即可
			e.printStackTrace();
		}catch(Exception e) {
    
    
			
		}
		finally {
    
    
			System.out.println(1);
		}
		
		System.out.println("异常之后的代码");
	}
}

【注意:两种异常解决方案的使用问题】:结合使用的,一般由最底层的方法抛出异常,然后由调用者进行异常的捕获操作。

特殊的情况,方法重写的情况,如果父类方法没有抛出异常,子类方法产生了编译时异常,那么子类方法只能进行捕获操作,无法进行抛出操作,如果父类抛出了异常,子类不能抛出比父类更大的异常。

3.4 Java异常的产生的过程问题

当Java代码在运行过程中,如果某一行突然出现了错误bug,一般是由JVM内存在异常产生行的位置创建一个该异常的异常类对象,随后将异常类对象抛出,抛出之后查看异常处是否对该异常有解决方案,如果有的话,按照异常的解决方案进行解决,如果没有解决,那么直接原地报错。

除了由JVM内存帮助我们自动产生异常对象,我们也可以基于这个思想在代码中,合理的利用异常机制自己产生异常的报错,来进行相关功能的开发。

手动抛出方式为:throw new xxxExpection(“message”);

猜你喜欢

转载自blog.csdn.net/cai_4/article/details/131214865
今日推荐