try 和finally
try 和finally
try 不能单独使用
finally 修饰的语句一定会执行,经常用来开启和关闭流
将finally与try ---catch连起来使用
public static void main(String[] args) {new FileInputStream file = null;try{file = FileInputStream("C:\\Users\\Administrator\\Desktop\\大三下");System.out.println("main begin");}catch (FileNotFoundException e){System.out.println("xyz begin");}catch(NullPointerException e){System.out.println("sss begin");}finally{//finall 修饰的一定会执行,就算前面的catch语句出现错误,也会执行//为了防止出现空指针异常对它进行判断if(file !=null){try{file.close();//关闭流}catch(NullPointerException e){}}} }
只有tuichujava虚拟机能不执行finally
ew FileInputStream file = null;try{file = FileInputStream("C:\\Users\\Administrator\\Desktop\\大三下");System.exit(0)//退出java虚拟机//下面的finally不执行}catch (FileNotFoundException e){System.out.println("xyz begin");
方法体中的规则:
方法体中的代码必须遵循自上而下的顺序依次拙行执行
retur语句一旦执行,整个方法必须结束
public static void main(String[] args) {//调用m方法int x = m();System.out.println(x);//返回的是100不是101}public static int m(){int i = 100;try{//return一定最后执行return i;}finally {i++;}}
final finally finalize有什么区别
final:是一个关键字,表示最终 的 不可以变的
finally 也是一个关键字和try联合使用,只用在异常处理机制中,且finally语句块中的代码是一定会执行的
finalize()的objrvt类中的一个方法,作为方法名出现,所属finalize是标识符
自己定义一个异常的步骤
创建一个异常类集成运行时异常或者编译时异常
写无参和有参(带有String参数)两个构造方法
public class Exception07 extends RuntimeException{public Exception07() {} public Exception07(String message) {super(message);} }
子类不能抛出比父类更多的异常
父类没有抛出异常子类就不能抛出异常
父类抛出异常,子类在重写父类方法的时候也可以抛出异常,抛出的异常可以说父类异常或者父类异常的子异常(如父类抛出运行时异常,子类可以抛出运行时异常或者空指针异常)
作业
作业一
//程序开始执行时,提升用户输入“用户名”和“密码”信息 //输入信息之后,后台java程序模拟用户注册 //注意:完成注册的方法放到一个单独的类中 //异常自定义即可 //class UserService{ // public void register(String username,String password){ // }//在这个方法中完成注册 // } 编写main方法,在main方法中接受用户输入的信息,在main方法 中调用UserService的register完成注册
HomeWorTest类
public static void main(String[] args) {//创建UserService对象UserService userService = new UserService();//创建获取键盘数据Scanner sc = new Scanner(System.in);//获取键盘数据System.out.println("请用户输入用户名");String username = sc.next();//获取键盘数据System.out.println("请用户输入密码");String password = sc.next();//调用 userService.register方法try {userService.register(username, password); } catch (MyException e) { System.out.println( e.getMessage());} } }
异常类
public class MyException extends Exception{// 创建无参构造public MyException(){ }//创建有参构造public MyException(String s){super(s);} }
UserService类
public class UserService { public void register(String username,String password) throws MyException { if (username == null ||username.length()<3 ||password.length()<4){//创建异常对象/* MyException me = new MyException("注册失败");throw me;*/throw new MyException("注册失败");}System.out.println("注册成功"); } }
作业二
开放性题目
写一个类Army代表一只军队,这个类有一个属性Weapon数组w(用来存储军队所拥有的所有武器),该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所有最大武器数量,并且用这一大小来初始化数组w
该类还提供一个方法addWeapon(Weapon wa),表示吧参数所代表的武器加入到数组w中,在这个类中还定义两个方法attackAll()让w数组中的所有武器攻击:
以及moveAll()让w数组中的所有可移动的武器移动
写一个main方法请测试
提升:
Weapon是一个父类,应该有很多子武器,
这些子武器应该有以下是可移动的,有一些是可攻击的
类在强制转换成接口的时候,可以与接口之间没有继承关系
集合
集合也是一个对象
什么是集合?有什么用?
数组其实就是一个集合,集合实际上就是一个容器,可以来形容其他类型数据
集合是一个容器,是一个载体,可以一次容纳多个对象
在实际开发中,假设链接数据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在java程序中会将10条,数据封装成10个java对象,然后将10个java对象放在某一个集合当中,将集合传到前段,然后遍历,将一个数据一个数据展示出来
集合不能直接存储基本数据类型,另外集合也不嫩直接存储java对象,集合当中存储的欧式java对象的内存地址(或者说是存储的引用)
集合在Java中本身是一个容器,是一个对象,集合中任何时候存储的都是引用
java中每个不同的集合,底层会对应着不同的数据结构,往不同的集合存数据,会存储道不同的数据结构中,不同的数据结构的存储方式不同
java集合分为两大类
一类是单个方式存储元素:
单个方式存储元素,这一类集合中超级父类接口:java.util.Collection
一类是以键值对的方式存储元素(一对一对的存)
以键值对的反思存储元素,这一类集合中超级父类接口:java.utile.Map
迭代的意思是遍历
总结(所有的类实现):
ArrayList:底层是数组
LinkedList:底层是双向链表
Vector:底层是数组,线程安全的,效率低的,使用较少
HashSet:底层是HashMap,放到TreeSet集合中的元素等同于放到TreeMap集合key部分了
TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到了TreeMap的key部分了
HashMap:底层是哈希表
Hashtable:底层也是哈希表,只不过线程安全的,效率低
Properties:是线程安全的,并且key和value智能存储字符串
TreeMap:底层是二叉树,TreeMap集合的key可以自动按照大小顺排列
List集合存储元素的特点
有序可以重复
有序:存进去的顺序和取出的顺序相同,每一个元素都有下标
可以重复:存进去1,可以在存储1
Set(Map)集合存储元素的特点
无序不可以重复
无序:存进去的顺序和取出的顺序不一定相同,另外Set集合中元素没有下标,
不可以重复:存进去1,不能在存储1
SortedSet(SortedMap)集合存储元素特点
首先是无序不可以重复的,但是SortedSet集合中的元素是可以排序的(按大小排序)
无序:存进去的顺序和取出时的顺序不一定相同
不可以重复:存了1,就不能在存1
Collection中的iterrate迭代器例子
public static void main(String[] args) {//创建一个多态Collection c = new ArrayList();c.add("美国队长");c.add("绿巨人");c.add("幻世");c.add("钢铁侠");c.add("雷神");//创建一个迭代器对象Iterator it = c.iterator();// 遍历 boolean b = it.hasNext();如果 还有违背迭代的元素,则返回true,// 调用 Object next = it.next();获取当前的内存地址boolean b =it.hasNext(); //it.hasNext()输出的true 和false 如果是true 进入while循环,并且用 Object next = it.next( );请获取当前的值//这里不管里面是对象还是说明,通通输出的是Object类型while(it.hasNext()){//存进去是什么类型,取出来也是什么类型,只不过在打印输出的时候会转成字符串Object next = it.next();System.out.println(next);}
最新文章
- CIO需“野蛮生长” 2017中国CIO高峰论坛7月开幕
- ASP.NET MVC Controller激活系统详解:默认实现
- 无意义”的标签div和span的区别
- B站疯传,年度数据分析+Python资料出炉,错过再等一年!
- JavaScript原生对象常用方法总结
- c语言求乘法,急!!!!c语言:求n次多项式的加法和乘法
- 2016OSC源创会年终盛典-架构与数据专场-杨亮
- python 重写抽象类编译错误_从零开始的Java之旅5.0继承、super、this、抽象类
- W​o​r​d​P​r​e​ss数据结构分析
- 2021级C语言大作业 - 霓虹深渊
- 一键卸载MSSQL_1.2 Beta版
- Arduino教程六—DS1302时钟模块
- java后台json集合传前台js
- word2019关闭时无响应
- cannot find -l*** 问题的解决办法
- 行列式与矩阵的初等变换总结
- 播布客视频-Auditing笔记
- 【HTML——线条雨落】(效果+代码)
- 购物网站制作——头部header(index.html)
- matlab在量子力学中的应用,一个关于量子力学中的matlab的问题