一、异常
1.1捕获异常-try -finally
1、语法:
try{
可能发生异常的代码
}finally{
最后执行的代码
}
2、执行流程:
A.执行try中的代码
B.执行finally中的代码
3、说明
A.没有对一场进行处理 还是由jvm来处理异常(这种方式不提倡使用)
B.try与finally代码来进行分离 try与finally中的代码互不影响
1.2Throwable
1.2.1简介
A.Throwable 类是 Java 语言中所有错误或异常的超类
B.只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。
1.2.2常用的方方法
方法名称 | 方法的描述 |
public void printStackTrace() | 将此 throwable 及其追踪输出至标准错误流。(打印堆栈信息-错误信息) |
public String getMessage() | 返回此 throwable 的详细消息字符串 |
public String toString() | 返回此 throwable 的简短描述。 |
代码:
package com.gkd.test01; public class Test01 { public static void main(String[] args) { try { int [] arrays={10,20,30,40}; System.out.println(arrays[6]); } catch (Exception e) { // e.printStackTrace(); // System.out.println(e.getMessage()); System.out.println(e.toString()); } } }
1.3声明异常-throws(重点)
1、throws 声明异常
2、使用场景:在定义方法的时候 方法中的代码可能产生异常 但是这个异常不想进行处理
就可以使用throws声明异常 异常给调用者处理
3、语法:定义再方法参数的后面
访问修饰符 返回值类型 方法名称(参数列表) throws 异常类型{
方法体;
return 返回值;
}
4、说明:
A.声明的异常的范围越小越好
B.声明的异常 或者是其子类 这种异常 调用者可以不需要进行处理
C.声明的异常 不是或者是其子类 这种异常 调用者需要进行处理
D.throws可以声明多个异常
1.4throw(重点)
1、throw 抛出异常
2、语法:
访问修饰符 返回值类型 方法的名称(参数列表){
throw new 异常类型()
}
3、说明
A.声明的异常 或者是其子类 这种异常 调用者可以不需要进行处理
B.声明的异常 不是或者是其子类 这种异常 调用者需要进行处理
处理方式:a.在方法中声明 b.使用try-catch来捕获异常
C.在同一作用域下 只能抛出一个异常
1.5throws与throw(重点)
throws | throw |
声明异常 | 抛出异常 |
声明多个异常 | 抛出一个异常 |
声明的异常不一定会发生 | 抛出的异常是确实存在的 可能会发生 |
定义再方法的参数后面 | 定义再方法中 |
1.6案例
step01需求:
使用异常对用户年龄不合法处理
step02代码:
代码-学生类
package com.gkd.test02; 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) throws Exception{ //用这个赋值的,所以在这个方法里面抛出异常 if(age<=0||age>120){ throw new Exception(); } this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
代码-测试类
package com.gkd.test02; public class Test { public static void main(String[] args) { //实例化一个学生类 Student stu =new Student(); try { stu.setName("老王"); stu.setAge(10); } catch (Exception e) { e.printStackTrace(); } System.out.println(stu); } }
1.7继承中的异常
在继承中 重写的方法声明的异常必须小于或者等于父类的范围(必须是父类声明异常的本身或者其子类)
1.8自定义异常
1、jdk提供很多的异常类 jdk提供不能满足实际开发中的异常信息要求 就可以自定义异常类
2、步骤
A.定义一个类 继承 Exception
B.调用父类的构造方法 设置异常信息
step01定义一个类 继承 Exception
package com.gkd.test03; public class MyException extends Exception{ public MyException(String message){ //调用父类的构造方法 super(message); } }
step02定义一个字符串的工具类
package com.gkd.test03; public class StingUtils { public static boolean isFlag(String str) throws MyException { if(str.length()<5||str.length()>15){ //抛出异常 throw new MyException("QQ号不合法……"); } return true; } }
step03定义一个测试类
package com.gkd.test03; public class Test { public static void main(String[] args) { try { System.out.println(StingUtils.isFlag("123456")); } catch (MyException e) { e.printStackTrace(); } } }
二、插件
step01
彩虹括号
翻译
step02
step03重启IDEA
三、集合
3.1简介
1、概念:用于存储数据的容器(集合)
2、数组与集合的比较
A.数组的长度的不可变的 集合的长度是可变的
B.数组是存储基本数据类型的数据 也可以存储引用数据类型的数据 集合只能存储引用数据类型的数据
3、集合的分类:
单列集合:每一个元素都是独立的单元
双列集合:以键(key)值(value)对来存储的数据 以组为主
单列集合
双列集合
3.2Collection
3.2.1简介
A.Collection 层次结构 中的根接口。
B.它提供更具体的子接口(如 Set 和 List)实现。
C.实现类
3.2.2常用方法
方法的名称 | 方法的描述 |
boolean add(E e) | 向集合中插入元素 |
void clear() | 清空集合元素 |
boolean contains(Object o) | 集合是否包含此元素 |
boolean isEmpty( | 集合是否为空 |
Iterator iterator() | 将集合转换位迭代器 |
boolean remove(Object o) | 删除集合中元素 |
int size() | 获取集合中的长度 |
Object[] toArray() | 将集合转换为数组 |
package com.gkd.test04; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; public class Test01 { public static void main(String[] args) { //实例化集合 Collection col=new ArrayList(); //向集合添加元素 col.add("四大男神"); col.add("陈冠希"); col.add("吴彦祖"); col.add("胡歌"); col.add("老王"); System.out.println(col); //删除集合中的元素 col.remove("胡歌"); System.out.println(col); //查询集合中的元素 System.out.println(col.contains("胡歌")); System.out.println(col.contains("陈冠希")); //获取集合的长度 col.size(); //将集合转换为数组 Object[] arrays = col.toArray(); System.out.println(Arrays.toString(arrays)); //清空集合元素 col.clear(); //获取集合长度,判断集合是否为空 System.out.println(col.size()); System.out.println(col.isEmpty()); } }
3.2.3四个带all方法
方法的名称 | 方法的描述 | 方法的返回值 | col1集合 | col2集合 |
boolean addAll(CollectionE> c) | 大集合添加小集合 | col添加成功之后返回true 添加失败 则返回false | 会发生改变 | 不发生改变 |
boolean containsAll(Collection c) | 大集合是否完全包含小集合 | col1集合完全包含col2集合则返回true 否则返回false | 不发生改变 | 不发生改变 |
boolean removeAll(Collection c) | 大集合删除小集合 | col1集合中元素发生改变则返回true | col1获取的是col1与col2集合交集剩余的部分 | 不发生改变 |
boolean retainAll(Collection c) | 大集合和小集合的交集 | col1与col2的集合的元素完全相同返回false否则返回true | 会发生改变(取得是col1与col2得交集) | 不发生改变 |
package com.gkd.test04; import java.util.ArrayList; import java.util.Collection; public class Test02 { public static void main(String[] args) { showInfo01(); // showInfo02(); // showInfo03(); // showInfo04(); } public static void showInfo01(){ //实例化集合 Collection col1=new ArrayList(); col1.add('a'); col1.add('b'); col1.add('c'); col1.add('d'); //实例化另一个集合 Collection col2=new ArrayList(); col2.add('a'); col2.add('b'); col2.add('c'); col2.add('d'); //调用方法大集合添加小集合 boolean flag=col1.addAll(col2); System.out.println(flag); System.out.println(col1); System.out.println(col2); } public static void showInfo02(){ //实例化集合 Collection col1=new ArrayList(); col1.add('a'); col1.add('b'); col1.add('c'); col1.add('d'); //实例化另一个集合 Collection col2=new ArrayList(); col2.add('a'); col2.add('b'); col2.add('c'); col2.add('f'); //调用方法大集合是否完全包含小集合 boolean flag=col1.containsAll(col2); System.out.println(flag); System.out.println(col1); System.out.println(col2); } public static void showInfo03(){ //实例化集合 Collection col1=new ArrayList(); col1.add('a'); col1.add('b'); col1.add('c'); col1.add('d'); //实例化另一个集合 Collection col2=new ArrayList(); col2.add('a'); col2.add('b'); col2.add('w'); //调用方法大集合删除与小集合的交集 boolean flag=col1.removeAll(col2); System.out.println(flag); System.out.println(col1); System.out.println(col2); } public static void showInfo04(){ //实例化集合 Collection col1=new ArrayList(); col1.add('a'); col1.add('b'); col1.add('c'); col1.add('d'); //实例化另一个集合 Collection col2=new ArrayList(); col2.add('a'); col2.add('b'); // col2.add('c'); // col2.add('d'); //调用方法获取大集合与小集合中的交集 boolean flag=col1.retainAll(col2); System.out.println(flag); System.out.println(col1); System.out.println(col2); } }
3.3集合的遍历方式
3.3.1集合转换成数组:Object []toArray()
代码:
package com.gkd.test05; import java.util.ArrayList; import java.util.Collection; public class Test01 { public static void main(String[] args) { //实例化集合 Collection col=new ArrayList(); //给集合赋值 col.add("老王"); col.add("凤舞"); col.add("阿河"); col.add("超超"); //将集合转变成数组 Object[] objects = col.toArray(); //使用循环遍历数组 for (int i=0;i<objects.length;i++){ System.out.println(objects[i]); } } }
3.3.2集合的第二种方式-使用迭代器
1、集合转换为迭代器
IteratorE> iterator()
2、迭代器常用的方法
方法的名称 | 方法的描述 |
boolean hasNext() | 判断是否有下一个元素 |
E next() | 返回迭代的下一个元素 |
void remove() | 删除迭代器的元素 |
package com.gkd.test05; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test02 { public static void main(String[] args) { //实例化集合 Collection col=new ArrayList(); //给集合赋值 col.add("三大美女"); col.add("刘亦菲"); col.add("杨幂"); col.add("唐嫣"); //转换成迭代器 Iterator iter = col.iterator(); //获取元素 //iter.hasNext()判断是否有下一个元素 // if (iter.hasNext()){ // System.out.println(iter.next()); // } // if (iter.hasNext()){ // System.out.println(iter.next()); // } // if (iter.hasNext()){ // System.out.println(iter.next()); // } // if (iter.hasNext()){ // System.out.println(iter.next()); // } // if (iter.hasNext()){ // System.out.println(iter.next()); // } // while (iter.hasNext()){ // System.out.println(iter.next()); Object obj=iter.next(); System.out.println(obj); } } }
迭代器遍历的原理
3.3.3使用增强for循环遍历
1、语法:
for(集合或者数组的数据类型 变量名:需要遍历的集合或者数组){
变量名==>就是集合中每一个元素
}
2、说明:
A.变量名表示集合中的每一个元素
B.增强for循环的底层也是使用迭代器遍历的
代码:
package com.gkd.test05; import java.util.ArrayList; import java.util.Collection; public class Test03 { public static void main(String[] args) { //实例化集合 Collection col=new ArrayList(); //给集合赋值 col.add("五大老师"); col.add("仓老师"); col.add("波多老师"); col.add("小野老师"); col.add("泷泽老师"); col.add("小泽老师"); //使用增强for循环 for(Object obj:col){ System.out.println(obj); } } }
3.3.4案例
step01需求:使用集合存储四个新闻(属性:标题 作者 内容 日期)对象 使用三种遍历方式获取每一个新闻信息
step02分析
A.定义一个新闻类
B.实例化一个集合,存入新闻对象
C.使用三种遍历方式遍历
step03代码-新闻类(News)
package com.gkd.test06; import java.text.SimpleDateFormat; import java.util.Date; public class News { private String title; private String author; private String content; private Date createTime; public News() { } public News(String title, String author, String content, Date createTime) { this.title = title; this.author = author; this.content = content; this.createTime = createTime; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } @Override public String toString() { return "News{" + "title='" + title + '\'' + ", author='" + author + '\'' + ", content='" + content + '\'' + ", createTime=" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime) + '}'; } }
step04代码-测试类
package com.gkd.test06; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; public class Test { public static void main(String[] args) { //实例化集合 Collection col=new ArrayList(); //向集合存储进新闻对象 col.add(new News("老王与波多老师故事","凤舞","精彩无限",new Date())); col.add(new News("拉稀哥是什样练成的","星运","努力奋斗",new Date())); col.add(new News("老六是什么样吹牛逼的","阿廖","永不言败",new Date())); col.add(new News("阿廖什么生活的","云曦","朗德里格朗",new Date())); //使用转换成数组遍历 Object[] obj = col.toArray(); for (int i=0;i<obj.length;i++){ System.out.println(obj[i]); } System.out.println("========================================="); //使用转换成迭代器遍历 Iterator iter = col.iterator(); while (iter.hasNext()){ System.out.println(iter.next()); } System.out.println("========================================="); //使用增强for循环遍历 for (Object obj1:col){ System.out.println(obj1); } } }
3.4List
3.4.1简介
1、有序的
2、索引访问元素 有索引
3、列表通常允许重复的元素 集合中的元素可以重复
4、特点:有序 有索引 可重复
5、list是个接口,实现类是:ArrayList, LinkedList
3.4.2带索引的方法
方法的名称 | 方法的描述 |
void add(int index, E element)(增) | 在列表的指定位置插入指定的元素 |
E get(int index)(查) | 返回列表的指定位置的元素 |
E remove(int index)(删) | 移除列表中指定位置的元素 |
E set(int index, E element)(改) | 用指定元素替换列表中指定位置的元素 |
代码:
package com.gkd.test07; import java.util.ArrayList; import java.util.List; public class Test01 { public static void main(String[] args) { //实例化集合 List li=new ArrayList(); //给集合赋值 li.add("广科大-王总"); System.out.println(li); //根据索引来添加元素 li.add(0,"广科大-拉稀哥"); System.out.println(li); li.add(1,"广科大-阿廖"); System.out.println(li); //根据索引获取元素 System.out.println(li.get(0)); //根据索引修改元素 注意:这个索引必须存在 li.set(2,"广科大-覃老6"); System.out.println(li); //通过索引删除元素 li.remove(0); System.out.println(li); } }
3.4.3第四种遍历方式
List集合提供了带索引的方法 通过索引来获取集合中的元素 可以通过for循环来获取元素
代码:
package com.gkd.test07; import java.util.ArrayList; import java.util.List; public class Test02 { public static void main(String[] args) { //实例化List集合 List li = new ArrayList(); //给集合赋值 li.add("广科大-王总"); li.add("广科大-拉稀哥"); li.add("广科大-阿廖"); li.add("广科大-王总"); li.add("广科大-覃老6"); //普通for循环 for(int i=0;i<li.size();i++){ System.out.println(li.get(i)); } } }