赞
踩
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); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。