Java学习

本文详细介绍了Java中的Collection集合,包括其与数组的区别、集合框架、List和Set接口及其主要实现类,以及常用方法如add、clear、remove等。此外,还深入探讨了异常的概念、异常体系、异常处理机制,包括编译时期异常和运行时期异常的处理。通过代码示例展示了异常的抛出和处理方式。最后,文章提供了实际的代码运行结果来辅助理解。
摘要由CSDN通过智能技术生成

Day18
一、学习目标
1.Collection集合
2.异常
3.异常的处理
二、知识点

集合概述

集合是java中提供的一种容器,可以用来储存多个数据。

  1. 集合和数组的区别
    a. 数组的长度是固定的,集合的长度是可变的
    b.数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不—致。在开发中般当对象多的时候,使用集合进行存储。
  2. 集合的框架
    JAVASE提供了满足各种需求的APl,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用。
    集合按照其存储结构可以分为两大类,分别是端列集合java.util.collection和双列集合java.util.Map,今天我们主要学习collection集合。
    在这里插入图片描述
    在这里插入图片描述
    (注:这两张图是连起来的,因上传不了大图,分为两张图发)
  3. Collection:单列集合类的根接口,用于存储—系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List和java.util.set。其中,List 的特点是元素有序、元素可重复。setl的特点是元素无序,而且不可重复。List接口的主要实现类有java.util.ArrayList和java.util.LinkedList. Set接口的主要现类有avaLutlil.Hashset和java.util.Treeset 。
  4. Collection常用功能
    Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(ListFCSet)通用的一些方法,这些方法可用于操作所有的单列集合。方法如下:
    public boolean add(E e):把给定的对象添乔加加口到当前集合中
    public void clear( ):清空集合中所有的元素
    public boolean remove(E e):把给定的对象在当前集合中删除
    public boolean contains(E e):判断当前集合中是否包含给定的对象
    public boolean isEmpty( ):利断当前集合是否为空
    public int size( ):返回集合中元素的个数
    public Object[ ] toArray( ):把集合中的元素,存储到数组中

异常概念

指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误语法错了,编译不通过不会产生字节码文件,根本不能运行。

  1. 异常体系
    异常机制其实是帮助我们找到程序中的问题,异常的根类是java.lang.Throwable,其下有两个子类:java.lang.Error与java.1ang. Exception,平常所说的异常指java.lang.Exception。
    在这里插入图片描述
  2. Throwable体系
    . Error:严重错误Error,无法通过处理的错误,只能事先避免。
  3. Throwable的常用方法:
    ·public void printStackTrace():打印异常的详细信息
    包含了异常的类型,异常的原因还包括异常出现的位置,在开发和调试阶段都得使用printStackTrace
    ·public string getMessage( ):获取发生异常的原因
    提示给用户的时候就提示错误原因
    ·public string tostring( ):获取异常的类型和异常描述信息(不用)
    出现异常,不要紧张把异常的简单类名烤贝到APIl中去查
  4. 异常的分类
    我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?
    ·编译时期异常:checked异常,在编译时期就会检查,如果没有处理异常则编译失败。
    ·运行时期异常:runtime异常,在运行时期检查异常,在编译时期运行异常编译器检测不报错。
    在这里插入图片描述

异常的处理

Java异常处理的五个关键字:try.catch. finally. throw. throws
9. 抛出异常throw
在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法就应该告诉调用者,传递合法的数据进来,这时需要使用抛出异常的方式来告诉调用者。
抛出异常throw格式:throw new 异常类名 (参数);
三、应用运行
1.Collection集合
使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)注意:
Iterator接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型迭代器就是什么泛型。
代码示例

package demo01;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo02Iterator {
	public static void main(String[] args) {
	    //创造集合对象
		Collection<String> coll=new ArrayList<>();
		//往集合中加入元素
	    coll.add("科比");
	    coll.add("詹姆斯");
	    coll.add("布拉特");
	    coll.add("麦迪");
	    coll.add("艾佛森");
	    coll.add("姚明");
	    //多态 接口   实现类对象
	    Iterator<String> it=coll.iterator();
//获取迭代器的实现类对象,并且会把指针(索引)指向集合的索引
	    if(it.hasNext()) {
	    	String e=it.next();
	    	System.out.println(e);
	    }
	    if(it.hasNext()) {
	    	String e=it.next();
	    	System.out.println(e);
	    }
 /*
发现使用迭代器取出集合中元素的代码,是一个重复的过程
所以我们可以使用循环优化
不知道集合中有多少元素,使用while循环
循环结束的条件,hasNext方法返回false
*/
	    while(it.hasNext()) {
	    	String e=it.next();
	    	System.out.println(e);
	    }
	    /*
	    判断集合中还有没有下一个元素
	    做了两件事:
	    1.取出下一个元素“科比” “麦迪” “詹姆斯” “艾佛森” “姚明”
	    2.会把指针向后移动一位
	    */
	    for(Iterator<String> it2=coll.iterator(); it2.hasNext();) {
	    	String e=it2.next();
	    	System.out.println(e);
	    }
	    System.out.println("----------");
	    //增强型for循环
	    for(String s:coll) {
	    	System.out.println(s);
	    }
	    System.out.println("----------");
	    int[] arr1= {4,5,6,7,8,9,10};
	    for(int i=0;i<arr1.length;i++) {
	    	System.out.println(i);
	    }
	    for(int i:arr1) {
	    	System.out.println(i);
	    }
	}
}

运行结果
在这里插入图片描述

  • 添加功能 boolean add(String s)
    代码示例
package demo01;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Collection;
public class Demo01Collection {
    public static void main(String[] args) {
    	Collection<String> coll=new ArrayList<>();//使用多态形式
    	System .out.println(coll);
    	boolean b1=coll.add("张三");
    	System.out.println(b1);
    	System.out.println(coll);
    	System.out.println("李四");
    	System.out.println("麻子");
    	System.out.println("王二");
    	System.out.println("小六");
    	System.out.println(coll);
    	boolean b2=coll.add("李四");
    	System.out.println(b2);
    	System.out.println(coll);
    	boolean b3=coll.add("王二");
    	System.out.println(b3);
    	System.out.println(coll);
    	boolean b4=coll.add("麻子");
    	System.out.println(b4);
    	boolean b5=coll.isEmpty();
    	System.out.println(b5);
    	int b6=coll.size();
    	System.out.println(b6);
    	Object[] arr=coll.toArray();
    	//for(int i=0;i<arr.length;i++)
    	//{
    	   System.out.println(arr[0]);
    	//}
    	   coll.clear();
    	   System.out.println(coll);
    	}
}

运行结果
在这里插入图片描述
2.异常

  • Exception表示异常,异常产生后程序员可以通过代码的方式征,使程序继续运行,是必须要处理的。
    代码示例
package demo02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo01Exception {
	public static void main(String[] args) {
		//编译期异常
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		Date date=null;
		System.out.println("第一句测试");
		try {
			date=(Date) sdf.parse("2021-05-11");
		} catch (ParseException e) {
			e.printStackTrace();
		}
		System.out.println(date);
		System.out.println("第二句测试");
		//runtiemEx运行期异常
		int[] arr= {1,2,3};
		System.out.println(arr[0]);
		//有问题,但不提示,因为编译器能够通过,在执行时才有异常
		try {
			System.out.println(arr[2]);
		} catch (Exception e) {
			System.out.println("第一句测试");
			System.out.println(e);
		}
		//error错误
		int[] arr2=new int[1024*1024*1024*1024*1024*1024];
		System.out.println("后续代码");
	}
}

运行结果
在这里插入图片描述
3.异常的处理
抛出异常throw

  • 在Java中,提供了一个throw关键字,它用来抛出一个指定的异常对象,抛出一个异常具体怎么操作呢?
    创建一个异常对象,封装一些提示信息(信息可以自己手写)
  • 需要将这个异常处理对象告知给调用者,怎么告知、怎么将这个异常对象传递到调用者处呢?
    通过关键字throw就可完成,throw异常对象
    throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处并结束前方法的执行。
    代码示例
package demo02;
public class Demo02Throw {
	public static void main(String[] args) {
		int[] arr=null;
		//int[] arr=new int[3];
		int e=getElement(arr,3);
		System.out.println(e);
	}
	public static int getElement(int[] arr,int index) {
	//判断  索引是否越界
		if(arr==null) {
			throw new NullPointerException("传递数组的值是NULL");
		}
		if(index<0||index>arr.length-1) {
			throw new ArrayIndexOutOfBoundsException("传递的索引超出数组的正常使用范围");
		}
		int ele=arr[index];
		return ele;
	}
}

运行结果
在这里插入图片描述
异常和异常处理结合使用
代码示例

package demo02;
import java.io.IOException;
import javax.management.InstanceNotFoundException;
public class Demo03Throws {
	public static void main(String[] args) throws InstanceNotFoundException, IOException {
		readFile("c:\\a");
	    System.out.println("后续代码");
	}
	//public static void redFile(String fileName) throws FileNotFoundException,IOException {
	//public static void main(String[] aegs) throws IOException {
	public static void readFile(String fileName) throws InstanceNotFoundException,IOException {
		if(!fileName.equals("c:\\a.txt")) {
			throw new InstanceNotFoundException("传递的文件不是c:\\a.txt");
		}
		if(!fileName.endsWith(".txt")) {
			throw new IOException("文件后缀名有无");
		}
		 System.out.println("文件名正确");
	}
}

运行结果
在这里插入图片描述
2020080605051

针对NVMe SSD试方法,有一些重要的注意事项和步骤。首先,进行预处理(preconditioning)是至关重要的。预处理是指在试之前先向SSD写入一些数据,以使SSD进入一种稳定的状态。这样可以避免SSD试中出现异常行为。没有进行预处理的试可能无法全面评估SSD性能,并可能导致试结果不准确。 其次,在进行SSD试时,需要考虑到多个因素的影响。存储系统的性能受到整个计算机系统的其他硬件和软件方面的影响。例如,SSD性能可能会受到线程数、队列深度、块大小、随机度等多个因素的影响。此外,不同的操作系统、文件系统和访问模式也可能对SSD性能产生影响。因此,在试中要综合考虑这些因素。 最后,个人建议在试NVMe SSD时,首先创建一个包含写入了全随机或伪随机数据的文件,以排除潜在的威胁。然后在此基础上进行试。当然,还应包括原始(RAW)的试情况,以进行对比。这样可以更全面地评估SSD性能表现。 综上所述,对于NVMe SSD试方法,预处理、考虑多个因素的影响,并进行全面的性能评估是关键。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SSD性能怎么?看这一篇就够了!](https://blog.csdn.net/liukuan73/article/details/109306436)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值