当前位置: 首页 > 后端技术 > Java

Java笔记(6)

时间:2023-04-02 00:32:19 Java

异常与集合一、异常一、异常概述异常:是程序中的异常情况异常系统:Throwable分为Error和Exception异常分为RuntimeException和非RuntimeExceptionError:严重问题,Exceptionneedstohandle:调用异常类,代表程序本身可以处理的问题:必须在编译期处理,否则无法编译程序2.JVM默认的处理方案如果程序有问题,我们不做任何处理,最终JVM会做默认的处理Output异常的名称,异常的原因,异常发生的位置3.try..catch异常处理...格式:try{可能引发异常的代码;}catch(异常类名变量名){异常处理代码;}执行过程:program如果在try代码开始执行时发生异常,会自动生成一个异常类对象,并将异常对象提交给Java运行系统。Java运行时系统收到异常对象后,会去catch寻找匹配的异常类。发现异常后,异常处理执行完毕后,程序可以继续执行。4、Throwable的成员方法方法名描述publicStringgetMessage0返回这个throwable的详细消息字符串publicStringtoString0返回这个throwable的简短描述publicvoidprintStackTrace0向控制台输出异常的错误信息5、编译时异常并运行运行时异常的区别Java中的异常分为两类:编译时异常和运行时异常,也称为已检查异常和未检查异常。所有RuntimeException类及其子类都称为运行时异常。其他异常是编译时异常。编译时异常:必须显示和处理,否则程序编译失败。运行时异常:不需要显式处理,可以和编译时异常一样处理。6.Throws的异常处理虽然我们可以通过try..catch...来处理异常,但并不是所有情况下我们都有处理异常的权限。也就是说,有时候可能会出现我们无法处理的异常。这个时候怎么办?针对这种情况,Java提供了一种throws处理方案格式:throws异常类名;注意:在编译方法括号后的异常时必须处理此格式。有两种处理方案:try...catch...orthrows,如果采用throws方案,以后谁调用谁处理。运行时异常可以不处理。出现问题后,我们需要修改代码。7.throws和throw的区别throwsthrow●用在方法声明之后,后面是异常类名●用在方法体中,后面是异常对象名●表示抛出异常,由调用者处理方法●表示抛出异常,由方法体中的语句处理。表示有可能出现异常,这些异常未必一定会发生。执行throw必须抛出某种异常。8.自定义异常格式:publicclassexception类名extendsException{无参构造和有参构造}例子:publicclassScoreExceptionextendsException{publicSc??oreException(){}publicSc??oreException(Stringmessage){super(message);}}二。Collection集合1.集合架构集合类的特点:提供存储空间可变的存储模型,存储的数据容量可以随时变化。Collection可以分为Collection(单列)和Map(双列)。Collection可以分为List(可重复)和Set(不可重复)。2、Collection集合概述及使用Collection集合概述:是单例集合的顶层接口,代表了一组对象,这些对象也称为Collection的元素JDK没有提供任何直接实现这个接口,它提供了更具体的子接口(如Set和List)实现Collection集合对象的创建:多态性●具体实现类ArrayList3。Collection集合常用方法方法名称说明booleanadd(Ee)添加元素booleanremove(Objecto)from从集合中移除指定元素voidclear()清除集合中的元素booleancontains(Objecto)判断是否指定元素存在于集合中booleanisEmpty()判断集合是否为空intsize()集合的长度,即集合中元素的个数4.Collection集合遍历Iterator:迭代器,集合Iterator的特殊遍历方法iterator():返回这个集合中元素的迭代器,通过集合的iterator()方法得到Iterator是通过集合的iterator()方法得到的,所以我们说它是普通方法inIterator依赖于集合:Enext():返回迭代中的下一个元素booleanhasNext():如果迭代有更多元素,则返回true3.列表集合1.列表集合概述和特性列表集合概述:●有序集合(也称为序列),用户可以精确控制每个元素在列表中的插入位置。用户可以通过整数索引访问元素并在列表中搜索元素。●与Set集合不同,列表通常允许重复的元素列表集合的特点:有序:存储和取出元素的顺序一致可重复:存储的元素可以重复2.列表集合特有的方法方法名说明voidadd(intindex,Eelement)在此集合的指定位置插入指定元素Eremove(intindex)删除指定索引处的元素,返回删除的元素Eset(intindex,Eelement)修改指定索引处的元素,返回修改后的元素Eget(intindex)返回指定索引处的元素3.并发修改异常并发修改异常:ConcurrentModificationException原因:迭代器遍历过程中,通过集合对象修改了集合中的元素,导致迭代器判断获取到的元素中期望修改值和实际修改值不一致解决方法:使用for循环遍历,然后使用集合对象进行相应操作4.ListlteratorListlterator:列表迭代器:通过List集合的listLterator()方法所以是List集合特有的迭代器列表迭代器,用于让程序员可以任意方向遍历列表,迭代时修改列表,获取迭代器在列表中的当前位置.ListLterator中的常用方法:Enext():返回迭代中的下一个元素booleanhasNext():如果迭代有更多元素则返回trueEprevious():返回列表中的前一个元素booleanhasPrevious():如果返回true此列表迭代器在反方向遍历列表时有更多元素voidadd(Ee):将指定元素插入到列表中5.增强的for循环增强的for:简化数组和集合的遍历●实现Iterable接口的类使其对象成为增强for语句的对象●JDK5之后出现,其内部原理是一个Iterator迭代器,增强for的格式●格式:.for(元素数据类型变量名:Array或Collection){//这里可以使用变量,变量就是元素}例子:.int[]arr={1,2,3,4,5};for(inti:arr){System.out.print(i);}Output:123456.List集合子类的特点List集合常用的子类:ArrayList、LinkedListArrayList:底层数据结构是数组,查询快,增删慢LinkedList:底层数据结构是链表,查询慢,增删快7、LinkedList集合特有的函数方法名说明publicvoidaddFirst(Ee)在链表开头插入指定元素publicvoidaddLast(Ee)在链表末尾追加指定元素listpublicEgetFirst()返回列表中的第一个元素publicEgetLast()返回列表中的最后一个元素publicEremoveFirst()从列表中移除并返回第一个元素publicEremoveLast()从列表中移除并返回最后一个元素4.Set集合1.Set集合特点不包含重复元素的集合没有索引方法,所以不能使用普通的for循环遍历。2.哈希值哈希值:是JDK根据对象的地址或字符串或数字计算出来的int类型的值。Object类中有一个获取对象哈希值的方法。publicinthashCode():返回对象哈希值哈希值对象的特点●对同一个对象多次调用hashCode()方法返回的哈希值是相同的●默认情况下,不同对象的哈希值是不同的。通过重写hashCode()方法,可以使不同对象的hash值相同。3、HashSet集合概述及特性概述:该类实现了set接口,由哈希表(实际上是一个HashMap实例)支持。不对集合的迭代顺序做任何保证;特别是,它不保证订单会随着时间的推移保持不变。此类允许空元素。HashSet集合的特点:底层数据结构是哈希表。集合的迭代顺序是不保证的,也就是说,不保证元素存储和取出的顺序是一致的。没有带索引的方法,所以不能使用普通的for循环遍历。由于它是一个Set集合,所以它是一个不包含重复元素的集合。4.LinkedHashSet集合概述及特点LinkedHashSet集合特点●哈希表和链表实现的Set接口具有可预测的迭代顺序●链表保证元素有序,即存储和提取的顺序元素是一致的。元素的唯一性是由哈希表保证的,也就是说没有重复的元素。排序,但是按照一定的规则排序,具体的排序方式取决于构造方法TreeSet():按照其元素的自然排序排序TreeSet(Comparatorcomparator):按照指定的比较器排序没有带索引的方法,所以不能用普通的for循环遍历,因为它是一个Set集合,所以不包含重复的元素。6、使用自然排序Comparable存储并遍历学生对象,使用无参构造方法创建TreeSet集合需求:按年龄从小到大排序,年龄相同时,按姓名字母顺序排序。结论:使用TreeSet集合存储自定义对象,无参构造方法使用自然排序对元素进行排序。自然排序是指元素所属的类实现了Comparable接口,重写compareTo(To)方法重写方法时一定要注意排序规则一定要按照要求的主从条件来写7.比较器排序Comparator用于存储学生对象并遍历,使用带参数的构造方法创建TreeSet集合需求:按年龄从小到大排序。如果年龄相同,则按姓名字母顺序排序。结论:使用TreeSet集合存储自定义对象,带参数构造方法使用比较器排序对元素进行Comparator排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(To1,To2)方法.改写方法的时候一定要注意,排序规则一定要按照要求的主次条件来写。五、泛型1.泛型的概述和好处泛型:是DK5中引入的一个特性,它提供了一种编译时类型安全检测机制,允许在编译时检测到非法类型。它的本质是参数化类型,也就是说,所有操作的数据类型都指定为参数。说到参数,大家最熟悉的就是在定义一个方法的时候有形参,然后在调用这个方法的时候传递实参时如何理解参数化类型?顾名思义,就是从原来的具体类型参数化类型,然后在使用/调用的时候传入具体类型。这种参数类型可以用在类、方法和接口中。它们分别被称为泛型类、泛型方法和泛型接口。通用定义格式:●:指定类型的格式。这里的类型可以看作是形参●:指定多个类型的格式,多个类型之间用逗号隔开。这里的类型可以看成是形参。以后具体调用时给定的类型可以看作是实参,实参的类型只能是引用数据类型。泛型的好处:●将运行时问题提前到编译期●避免强制类型转换2.泛型类、泛型方法和泛型接口泛型类的定义格式:格式:Modifierclassclassname{}例子:publicclassGeneric{}这里的T可以自由写成任何标识符。T、E、K、V等常用参数常用于表示泛型泛型方法的定义格式:格式:修饰符返回值类型方法名(Type变量名){}例:publicvoidshow(Tt){}泛型接口的定义格式:格式:修饰符接口接口名称{}示例:publicinterfaceGeneric{}3.类型通配符为了表示各种泛型的父类列表,可以使用类型通配符类型通配符:List:表示一个元素类型未知的List,其元素可以匹配任何类型。带通配符的List只是表示它是各种泛型List的父类,不能往里面添加元素。如果说我们不希望List是任何泛型List的父类,我们只希望它代表某类泛型List类型的父类,可以使用类型的上限通配符。类型通配符的上限:列表:它代表的类型是Number或其子类型。除了指定类型通配符的上限之外,我们还可以指定类型通配符的下限。类型通配符的下限:List:它代表的类型是Number或其父类型4.可变参数可变参数也称为参数个数可变,如果作为方法的形参,则方法参数个数是可变的。格式:修饰符返回值类型方法名(数据类型...变量名){}例子:publicstaticintsum(int...a){}变量参数注意事项:这里的变量其实是一个数组。如果一个方法有多个参数,包括可变参数,可变参数应该放在最后。5.Arrays工具类中有个static静态方法:PublicstaticListasList(T...a):返回指定数组支持的固定大小列表。返回的集合不能添加或删除,但可以修改。List接口中有一个static方法:publicstaticListof(E...elements):返回一个包含任意数量元素的不可变列表。不能添加、删除或修改返回的集合。Set接口中有一个静态方法:publicstaticSetof(E...elements):返回一个包含任意数量元素的不可变集合。给元素的时候,不能给重复的元素。返回的集合不可增删,不可修改方法六、Map集合1.Map集合概述及Map集合使用概述接口MapK:key的类型;V:typeofvalue将键映射到值的对象;不能包含重复键;每个A键最多可以映射到一个值例子:学号和姓名itheima001林青霞itheima002张曼玉itheima003王祖贤创建Map集合的对象:多态的方式具体实现类HashMap2的基本功能。Map集合方法名说明Vput(Kkey,Vvalue)添加元素Vremove(Objectkey)根据key删除键值对元素voidclear()移除所有键值对元素booleancontainsKey(Objectkey)判断集合是否包含指定keybooleancontainsValue(Objectvalue)判断集合是否包含指定值booleanisEmpty()判断集合是否为空intsize()集合的长度,即集合的个数集合key中的键值对)根据key获取valueSetkeySet()获取所有key的集合Collectionvalues()获取所有value的集合Set>entrySet()得到所有的键值对对象遍历4.Map集合的集合我们刚才存储的元素都是程对,所以我们把Map看做是夫妻对的集合遍历思路:获取所有结婚证的集合遍历结婚证集合得到每张结婚证根据结婚证获取夫妻,转化为Map集合中的操作:●获取所有key-value对象的集合Set>entrySet():获取所有key-value对象的集合遍历key-value对象的集合得到每一个key值使用对象的增强实现获取每个Map.Entry根据键值对对象获取key和value使用getKey()获取key使用getValue()获取value