当前位置:   article > 正文

try 和finally_try finally

try finally

try 和finally

  1. try 不能单独使用

  2. finally 修饰的语句一定会执行,经常用来开启和关闭流

  3. 将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){
                        
                    }
              
               }
            
           }
    ​
         }
  4. 只有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");
  5. 方法体中的规则:

    • 方法体中的代码必须遵循自上而下的顺序依次拙行执行

    • 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);
          }
      ​
      }
      ​

  1. 子类不能抛出比父类更多的异常

    • 父类没有抛出异常子类就不能抛出异常

    • 父类抛出异常,子类在重写父类方法的时候也可以抛出异常,抛出的异常可以说父类异常或者父类异常的子异常(如父类抛出运行时异常,子类可以抛出运行时异常或者空指针异常)

作业

作业一

//程序开始执行时,提升用户输入“用户名”和“密码”信息 //输入信息之后,后台java程序模拟用户注册 //注意:完成注册的方法放到一个单独的类中 //异常自定义即可 //class UserService{ // public void register(String username,String password){ // }//在这个方法中完成注册 // } 编写main方法,在main方法中接受用户输入的信息,在main方法 中调用UserService的register完成注册

  1. 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());
        }
​
​
    }
}
  1. 异常类

public class MyException extends Exception{
    // 创建无参构造
    public MyException(){
​
    }
     //创建有参构造
    public MyException(String s){
        super(s);
    }
}
​
  1. 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是一个父类,应该有很多子武器,

这些子武器应该有以下是可移动的,有一些是可攻击的

类在强制转换成接口的时候,可以与接口之间没有继承关系

集合

集合也是一个对象

  1. 什么是集合?有什么用?

    • 数组其实就是一个集合,集合实际上就是一个容器,可以来形容其他类型数据

    • 集合是一个容器,是一个载体,可以一次容纳多个对象

    • 在实际开发中,假设链接数据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在java程序中会将10条,数据封装成10个java对象,然后将10个java对象放在某一个集合当中,将集合传到前段,然后遍历,将一个数据一个数据展示出来

  2. 集合不能直接存储基本数据类型,另外集合也不嫩直接存储java对象,集合当中存储的欧式java对象的内存地址(或者说是存储的引用)

    集合在Java中本身是一个容器,是一个对象,集合中任何时候存储的都是引用

  3. java中每个不同的集合,底层会对应着不同的数据结构,往不同的集合存数据,会存储道不同的数据结构中,不同的数据结构的存储方式不同

  4. java集合分为两大类

    • 一类是单个方式存储元素:

      单个方式存储元素,这一类集合中超级父类接口:java.util.Collection

    • 一类是以键值对的方式存储元素(一对一对的存)

      以键值对的反思存储元素,这一类集合中超级父类接口:java.utile.Map

  5. 迭代的意思是遍历

总结(所有的类实现):

  1. ArrayList:底层是数组

  2. LinkedList:底层是双向链表

  3. Vector:底层是数组,线程安全的,效率低的,使用较少

  4. HashSet:底层是HashMap,放到TreeSet集合中的元素等同于放到TreeMap集合key部分了

  5. TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到了TreeMap的key部分了

  6. HashMap:底层是哈希表

  7. Hashtable:底层也是哈希表,只不过线程安全的,效率低

  8. Properties:是线程安全的,并且key和value智能存储字符串

  9. TreeMap:底层是二叉树,TreeMap集合的key可以自动按照大小顺排列

  10. List集合存储元素的特点

    • 有序可以重复

    • 有序:存进去的顺序和取出的顺序相同,每一个元素都有下标

    • 可以重复:存进去1,可以在存储1

  11. Set(Map)集合存储元素的特点

    • 无序不可以重复

    • 无序:存进去的顺序和取出的顺序不一定相同,另外Set集合中元素没有下标,

    • 不可以重复:存进去1,不能在存储1

  12. SortedSet(SortedMap)集合存储元素特点

    • 首先是无序不可以重复的,但是SortedSet集合中的元素是可以排序的(按大小排序)

    • 无序:存进去的顺序和取出时的顺序不一定相同

    • 不可以重复:存了1,就不能在存1

  13. 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);
          }
    ​

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/907955
推荐阅读
相关标签
  

闽ICP备14008679号