JAVA 笔记(十一)

  1. 我们处理异常的方法:1.try……catch……finally  2.throws
  2. Try…catch….finally的格式try{可能出现问题的代码}catch(异常名 变量){针对问题的处理}finally{释放资源}【finally部分可以不要】注意try里面的代码越少越好,因为占用资源B:cath里面最好有内容,没有内容就是讲异常隐藏了。给出一个提示也行。
  3. 当有一个try多个catch的时候【格式try{}catch(){}catch(){}…】,一旦try里面出现了问题,就会把这里的问题给抛出去,然后和catch里面的问题进行匹配,一旦有匹配的,就执行catch里面的处理,就结束了try…catch,继续执行后面的语句。
  4. 如果不知道异常名就用exception,它可以接收所有的异常。【但是需要注意的是:1.能明确的尽量明确,不要用大的来处理,因为这样效率高。2.平级关系的异常谁在前谁在后无所谓,但是出现了父子关系的异常,父类必须要放在后面】。
  5. Jdk7的新特性(处理多个异常):try{}catch(异常名1 |异常名2|…..变量){处理}。这种方式虽然很简单,但是处理方式是一样的,没有给出具体哪一个,同时异常之间必须是平级关系。
  6. 除了运行时期异常和其子类,其余异常都是编译时期异常。
  7. 编译时期异常:java程序必须显示处理,否则程序就会发生错误,无法通过编译。运行时期异常:无需显示处理,也可以和编译时异常一样处理。【printStackTrace()】
  8. 在try里面发现问题后,jvm会帮我们生成一个异常对象,然后把这个对象抛出,和catch里面的类进行匹配。如果该对象是某个类型的,就会执行catch里面的处理信息。
  9. Throws 异常类名  注意:这个格式必须跟在方法的括号后面。【尽量不要在main方法上抛出异常,这样没有太大意义】
  10. 编译期抛出异常,将来调用者必须处理。运行期抛出异常,将来调用者可以不处理。
  11. Throws后面可以跟多个异常名,用逗号隔开。
  12. 在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出【注意不是throws】。
  13. Throw:如果出现了异常情况,我们就可以把该异常抛出,这个时候抛出的应该是异常的对象。
  14. Throws和throw的区别

   throws

用在方法声明后面,跟的是异常类名

可以跟多个异常类名,用逗号隔开

表示抛出异常,由该方法的调用者来处理

throws表示出现异常的一种可能性,并不一定会发生这些异常

throw

用在方法体内,跟的是异常对象名

只能抛出一个异常对象名

表示抛出异常,由方法体内的语句处理

throw则是抛出了异常,执行throw则一定抛出了某种异常 

 

后续程序需要继续运行就try

后续程序不需要继续运行就throws

  1.   Finally:被其控制的语句体一定会被执行,但是如果在执行到finally之前jvm退出了【例如System.exit(0)】,就不能执行了。Finally还可以释放资源。
  2. 如果catch里面有return语句,finally里面的代码依然会执行,是在return之前,准确的说是在return中间。只能有一条语句可以返回。
  3. Try…..finally:这种写法是为了释放资源,并不是处理异常。
  4. Java不可能对所有的异常都能考虑到,所以在实际的开发中,我们需要自己去定义异常。我们随意写的一个类,是不能作为异常类来看待的,要想你的类是一个异常类,就必须继承Exception(编译时期)或者RuntimeException(运行时期)。
  5. 编译时的异常在throw后依然要抛出异常【需要throws一下货这try…catch】运行时的异常在throw后就不需要了。
  6. 自定义异常就是有构造方法就行了,无参数不好显示异常信息,带参数就是为了显示异常信息,输出到控制台。
  7. 异常的注意事项

 子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)

如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常

如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

 最后的结果是30

      

   最后的结果是30 
      public class FinallyDemo2 {
    public static void main(String[] args) {
        System.out.println(getInt());
    }
public static int getInt() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
        } catch (ArithmeticException e) {
            a = 30;
            return a;
            /*
             * return a在程序执行到这一步的时候,这里不是return a而是return 30;这个返回路径就形成了。
             * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
             * 再次回到以前的返回路径,继续走return 30;
             */
        } finally {
            a = 40;
            return a;//如果这样结果就是40了。
        }
        // return a;
    }
}
432.    自定义异常代码
package hhxu.edu;
public class MyException extends Exception{
public MyException() {
        }
    public MyException(String str) {
        super(str);
        }
}
public class Teacher {
    public static void check(int score)throws MyException{
        if(score>100||score<0){
            throw new MyException("你输入的数据有问题");
        }
        else{
            System.out.println("数据合法!!!");
        }
    }
}
import java.util.Scanner;
public class TestDemo {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.println("亲输入成绩:");
        Teacher t=new Teacher();
        int num=sc.nextInt();
        try{
        t.check(num);
        }catch(MyException e){
            e.printStackTrace();
        }
    }
}

433.     获取指定的文件代码
package meishigan;

import java.io.File;

public class HuoQu {
    public static void main(String[] args) {
        File file=new File("e:\\");
        File[] fl=file.listFiles();
        for(File f:fl){
            if(f.isFile()){
                String str=f.getName();
                if(str.endsWith(".txt")){
                    System.out.println(f.getName());
                }
            }
        }
    }
}
另一种方式:package meishigan;
import java.io.File;
import java.io.FilenameFilter;
public class HuoQu {
    public static void main(String[] args) {
        File file = new File("e:\\");
        String[] str = file.list(new FilenameFilter(){
            public boolean accept(File dir, String name) {
                return new File(dir, name).isFile() && name.endsWith(".txt");
}
        });
        for (String s : str) {
            System.out.println(s);
        }
}
}

434.     同一个文件重命名
package cn.itcast_09;
import java.io.File;
/*
 * 需求:把E:\评书\三国演义下面的视频名称修改为
 *         00?_介绍.avi
 *  思路:
 *         A:封装目录
 *         B:获取该目录下所有的文件的File数组
 *         C:遍历该File数组,得到每一个File对象
 *         D:拼接一个新的名称,然后重命名即可。
*/
public class FileDemo {
    public static void main(String[] args) {
        // 封装目录
        File srcFolder = new File("E:\\评书\\三国演义");
// 获取该目录下所有的文件的File数组
        File[] fileArray = srcFolder.listFiles();
// 遍历该File数组,得到每一个File对象
        for (File file : fileArray) {
            // System.out.println(file);
            // E:\评书\三国演义\三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.avi
            // 改后:E:\评书\三国演义\001_桃园三结义.avi
            String name = file.getName(); // 三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.avi
int index = name.indexOf("_");
            String numberString = name.substring(index + 1, index + 4);
            // System.out.println(numberString);
// int startIndex = name.lastIndexOf('_');
            // int endIndex = name.lastIndexOf('.');
            // String nameString = name.substring(startIndex + 1, endIndex);
            // System.out.println(nameString);
            int endIndex = name.lastIndexOf('_');
            String nameString = name.substring(endIndex);
String newName = numberString.concat(nameString); // 001_桃园三结义.avi
            // System.out.println(newName);
File newFile = new File(srcFolder, newName); // E:\\评书\\三国演义\\001_桃园三结义.avi
// 重命名即可
            file.renameTo(newFile);
        }
    }
}
package cn.itcast_03;
import java.io.File;
/*
 * 需求:请大家把E:\JavaSE目录下所有的java结尾的文件的绝对路径给输出在控制台。
 * 
 * 分析:
 *         A:封装目录
 *         B:获取该目录下所有的文件或者文件夹的File数组
 *         C:遍历该File数组,得到每一个File对象
 *         D:判断该File对象是否是文件夹
 *             是:回到B
 *             否:继续判断是否以.java结尾
 *                 是:就输出该文件的绝对路径
 *                 否:不搭理它
 */
public class FilePathDemo {
    public static void main(String[] args) {
        // 封装目录
        File srcFolder = new File("E:\\JavaSE");
// 递归功能实现
        getAllJavaFilePaths(srcFolder);
    }
private static void getAllJavaFilePaths(File srcFolder) {
        // 获取该目录下所有的文件或者文件夹的File数组
        File[] fileArray = srcFolder.listFiles();
// 遍历该File数组,得到每一个File对象
        for (File file : fileArray) {
            // 判断该File对象是否是文件夹
            if (file.isDirectory()) {
                getAllJavaFilePaths(file);
            } else {
                // 继续判断是否以.java结尾
                if (file.getName().endsWith(".java")) {
                    // 就输出该文件的绝对路径
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }
}               

 

 File:文件或者目录(文件夹)路径名的抽象表现形式。【未必是真实存在的】。

  1. Mkdir():创建文件夹,如果这个文件夹已存在,就不创建了。Midirs()也是创建文件夹,如果父类文件夹不存在,会帮你创建出来。
  2.  创建文件的方法也是一样的【指的是通429】。
  3. 要想在某个目录下创建内容,该目录首先的存在。创建内容有异常抛出,创建文件夹没有异常抛出。
  4. 如果你创建文件或者目录的时候,忘记了写盘符路径,那么默认路径就是当前项目路径。
  5. Java中的删除不走回收站,删除文件夹,必须文件夹是空的。【就是里面没有文件或者文件夹】。
  6. RenameTo()改名:如果路径相同就直接改名了,如果路径不相同,就是剪切并改名。
  7. 文件的length()方法:获取的长度是字节数。LastModified(),刚方法是获取文件最后一次修改的时间,返回的是毫秒数。
  8. Yyyy—MM—dd  HH:mm:ss
  9. 自定义异常代码
package hhxu.edu;

public class MyException extends Exception{

public MyException() {

              }

       public MyException(String str) {

              super(str);

              }

}

public class Teacher {

       public static void check(int score)throws MyException{

              if(score>100||score<0){

                     throw new MyException("你输入的数据有问题");

              }

              else{

                     System.out.println("数据合法!!!");

              }

       }

}

import java.util.Scanner;

public class TestDemo {

       public static void main(String[] args){

              Scanner sc=new Scanner(System.in);

              System.out.println("亲输入成绩:");

              Teacher t=new Teacher();

              int num=sc.nextInt();

              try{

              t.check(num);

              }catch(MyException e){

                     e.printStackTrace();

              }

       }

}

 

 

  1.  获取指定的文件代码
package meishigan;

 

import java.io.File;

 

public class HuoQu {

   public static void main(String[] args) {

      File file=new File("e:\\");

      File[] fl=file.listFiles();

      for(File f:fl){

         if(f.isFile()){

            String str=f.getName();

            if(str.endsWith(".txt")){

                System.out.println(f.getName());

            }

         }

      }

   }

}

另一种方式:package meishigan;

import java.io.File;

import java.io.FilenameFilter;

public class HuoQu {

       public static void main(String[] args) {

              File file = new File("e:\\");

              String[] str = file.list(new FilenameFilter(){

                     public boolean accept(File dir, String name) {

                            return new File(dir, name).isFile() && name.endsWith(".txt");

}

              });

              for (String s : str) {

                     System.out.println(s);

              }

}

}

 

 

  1.  同一个文件重命名
  1. package cn.itcast_09;
    
    import java.io.File;
    
    /*
    
     * 需求:把E:\评书\三国演义下面的视频名称修改为
    
     *               00?_介绍.avi
    
     *  思路:
    
     *               A:封装目录
    
     *               B:获取该目录下所有的文件的File数组
    
     *               C:遍历该File数组,得到每一个File对象
    
     *               D:拼接一个新的名称,然后重命名即可。
    
    */
    
    public class FileDemo {
    
           public static void main(String[] args) {
    
                  // 封装目录
    
                  File srcFolder = new File("E:\\评书\\三国演义");
    
    // 获取该目录下所有的文件的File数组
    
                  File[] fileArray = srcFolder.listFiles();
    
    // 遍历该File数组,得到每一个File对象
    
                  for (File file : fileArray) {
    
                         // System.out.println(file);
    
                         // E:\评书\三国演义\三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.avi
    
                         // 改后:E:\评书\三国演义\001_桃园三结义.avi
    
                         String name = file.getName(); // 三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.avi
    
    int index = name.indexOf("_");
    
                         String numberString = name.substring(index + 1, index + 4);
    
                         // System.out.println(numberString);
    
    // int startIndex = name.lastIndexOf('_');
    
                         // int endIndex = name.lastIndexOf('.');
    
                         // String nameString = name.substring(startIndex + 1, endIndex);
    
                         // System.out.println(nameString);
    
                         int endIndex = name.lastIndexOf('_');
    
                         String nameString = name.substring(endIndex);
    
    String newName = numberString.concat(nameString); // 001_桃园三结义.avi
    
                         // System.out.println(newName);
    
    File newFile = new File(srcFolder, newName); // E:\\评书\\三国演义\\001_桃园三结义.avi
    
    // 重命名即可
    
                         file.renameTo(newFile);
    
                  }
    
           }
    
    }

     

    递归一定要有出口,并且递归的次数不能太多,否则容易造成内存 溢出。构造方法不能递归使用。  【递归可以看做是先分解,在合并,所以每次调用的时候都会开辟空间,直到完成后才消失,所以调用的次数不能过多,否则内存溢出。】     
  2. 递归就是方法中调用方法本身,所以要想实现递归就得有方法。              
  3. 递归实现找到指定目录下所有的java文件。
 package cn.itcast_03;

import java.io.File;

/*

 * 需求:请大家把E:\JavaSE目录下所有的java结尾的文件的绝对路径给输出在控制台。

 *

 * 分析:

 *               A:封装目录

 *               B:获取该目录下所有的文件或者文件夹的File数组

 *               C:遍历该File数组,得到每一个File对象

 *               D:判断该File对象是否是文件夹

 *                      是:回到B

 *                      否:继续判断是否以.java结尾

 *                             是:就输出该文件的绝对路径

 *                             否:不搭理它

 */

public class FilePathDemo {

       public static void main(String[] args) {

              // 封装目录

              File srcFolder = new File("E:\\JavaSE");

// 递归功能实现

              getAllJavaFilePaths(srcFolder);

       }

private static void getAllJavaFilePaths(File srcFolder) {

              // 获取该目录下所有的文件或者文件夹的File数组

              File[] fileArray = srcFolder.listFiles();

// 遍历该File数组,得到每一个File对象

              for (File file : fileArray) {

                     // 判断该File对象是否是文件夹

                     if (file.isDirectory()) {

                            getAllJavaFilePaths(file);

                     } else {

                            // 继续判断是否以.java结尾

                            if (file.getName().endsWith(".java")) {

                                   // 就输出该文件的绝对路径

                                   System.out.println(file.getAbsolutePath());

                            }

                     }

              }

       }

}         
  1.  增强for的目标不能是null,所以可以先判断一下。           
  2. 输出流【java程序到硬盘】(写入数据)输入流【硬盘到Java程序】(读取数据)这里的出和入都是相对于java程序来说的。(这两种流是流的一种划分形式:流向)            
  3. 【流的另一种划分形式:类型】字节流和字符流(方便操作文本)。-------->待续
posted on 2016-05-06 15:09  doAction  阅读(270)  评论(0编辑  收藏  举报