第十九天笔记

黑马程序员 <a href="http://www.itheima.com" target="blank">java培训</a>

1.异常的概述和分类

异常就是程序在运行中出现的一些问些,在开发过程中必须要处理的.

异常的分类:

Throwable类是Java中所有错误或异常的超类。

错误:Error

异常:Exception

Java中异常的分类

编译异常:

运行异常:在运行阶段会出现的问题。

public class ExceptionDemo1 {

    public static void main(String[] args) {
        // int a = 10;
        // int b = 0;
        // System.out.println(a / b); // java.lang.ArithmeticException ----运行时异常
        //
        // SimpleDateFormat sdf = new SimpleDateFormat();

        // sdf.parse("asdfsadf"); //就是一个编译异常,要求我们程序员必须对异常进行处理.

        // int[] arr={1,2,3};

        // System.out.println(arr[3]);  //数组下标越界   ArrayIndexOutOfBoundsException
        //int n = Integer.parseInt("abc"); //NumberFormatException
        //System.out.println(n); 

        //空指针
        String s=null;

        System.out.println(s.length());
        System.out.println("hello world");
    }
}

2.Jvm默认怎样处理异常

注意:在java中,它已经定义好了一些问题的描述.

例如:数组下标越界 ArrayIndexOutOfBoundsException

将一个字符串转换成数字  有可能出现  NumberFormatException

总结:jvm会将问题包装成具体的异常类对象,并通过这个对象调用它的一些方法,来在控制台上把问题反馈。

3.Try….catch的方式处理异常

异常分类:

运行时异常:RuntimeException及其子类

编译异常:Exception其及子类,但是不包含RuntimeException及其子类

对于异常,运行时异常可以处理也可以不处理,编译异常必须处理。

try…catch格式:

try{

有可能出现异常的代码块;

}catch(异常类型  e){

处理方式

}

运行的代码如果出现的异常,catch会捕获到,你在catch中要捕获的是什么异常,如果出现了,就会将其捕获.

public class ExceptionDemo2 {

    public static void main(String[] args) {

        //处理除数为0异常

        int a=10;
        int b=10;
        //System.out.println(a/b);  //java.lang.ArithmeticException  运行时异常

        //现在我们要使用try...catch来处理异常.

        try {
            System.out.println(a / b); // 有可能出现异常
        } catch (ArithmeticException e) { //catch只有在try块中的代码出现了异常才会执行.
            System.out.println("除数不能为0");
        }
    }
}

4.编译期异常和运行异常的区别

编译异常,要求我们必须处理,不处理编译不了代码,运行时异常,你可以处理,也可以不处理,不处理jvm处理。

编译异常  Exception类及其子类,除了RuntimeException及其子类,运行异常  RuntimeException及其子类。

5.Throws的方式处理异常

关于java中异常处理方式

  1. try…catch
  2. throws

throws处理的格式:

我们在方法后面直接写  throws  异常类,这就代表要将这个异常抛出。

//throw作用

public class ExceptionDemo8 {
    public static void main(String[] args) {
        try {

            show();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public static void show() throws Exception {
        int a = 10;
        int b = 0;
        // 对除数进行一个判断
        if (b == 0) {
            throw new Exception("除数不能为0"); // throw是用于抛出具体问题
        }
        System.out.println(a / b);

    }
}
//在方法上是否使用throws,取决于方法内的throw抛出的异常类型,如果抛出的是编译异常,那么在方法上必须通过throws声明,而throw如果是一个运行异常,那么
//在方法上可以throws异常,也可以不用。

6.throw的概述以及和throws的区别

throw是用于抛出具体异常的,注意,它抛出的是异常对象。

对于throw,如果执行了,方法体也就结束 了。

在开发中经常会使用throw让我们的方法结束。

7.finally关键字的特点及作用

在实际开发中,我们使用try..catch一般都 会与finally连用。

格式

try{

}catch(类型 e){

}finally{

}

//finally使用

public class ExceptionDemo9 {
    public static void main(String[] args) {

        int a = 10;
        int b = 0;
        try {
            System.out.println(a / b);

            //释放资源
        } catch (ArithmeticException e) {
            System.out.println("除数不能为0");
            //释放资源
            // System.exit(0);如果出现这句话finally是执行不了的。
        } finally {
            System.out.println("finally");
            //释放资源
        }

        // 1.程序出现了异常,执行catch后还要执行finally
        // 2.程序没有出现异常,执行try中内容后,也会执行finally.
        // 总结:finally中的内容永远都会被执行.

        //问题:finally有什么作用?
        //在开发中finally中一般有于释放资源,执行关闭动作。

    }
}

8.关于final finally finalize 的区别

Final是一个修饰符

修饰属性    常量

修饰方法    不可以被重写

修饰类      不可以被继承

Finally 异常中的,这个块中的内容永远会被执行,用于关闭资源。

Finalize是Object类中的一个方法,用于垃圾回收.

9.异常处理的变形以及自定义异常

关于异常变形

try…catch..finally

try…catch

Try…catch..catch..catch

try…finally

对于我们开发中,在try,catch,finally中又嵌套了try..catch

自定义异常:

继承自异常类的一个自定义的类,这个类就叫做自定义异常。

自定义异常的作用

在实际开发中,我们会处理很多关于业务操作的问题,而这些问题,是在jdk中的异常无法描述的,那么我们就需要定义一个自定义异常来描述。

10.异常的注意事项

A.如果父类(父接口)的方法没有定义异常,子类(实现类)重写的方法不能抛出异常。

B.如果父类(父接口)的方法定义了异常,子类(实现类)重写的方法可以抛出同样异常,也可以不抛出。

C.如果父类(父接口)的方法定义了异常,子类也要抛出异常,这时,可以抛出与父类相同的异常或者其异常的子集

11.File类的概述和构造方法

File类就是使用java中提供的File类来映射一个文件。

注意:我们使用File来映射一个文件,只能对文件的属性进行操作,而不能修改文件的内容。如果要对文件的内容进行操作,只能使用IO流。

  1. File的构造方法

File类是在java.io包下.

File(String pathname)

File(String parent,String child)

File(File parent,String child)

public class FileDemo1 {

    public static void main(String[] args) {

        // 问题,下面代码是否会有问题?

        File file = new File("d:/b/c/d/a.txt");
    }

    // 1.使用File(String pathname)来描述d:/a.txt文件
    public static void demo1() {
        // File file = new File("d:\\a.txt");

        // File file=new File("d:/a.txt");

        // 注意:在linux系统中它的分隔符就是"/" 在widnows系统中它的分隔符是"\",在java开发中,可以使用一个/来代替        // 注意:如果想要写一个通用的程序,在任何系统上都可以使用
        File file = new File("d:" + File.separator + "a.txt");
    }

    // 2.使用File(String parent,String child)来描述 d:/a.txt文件
    public static void demo2() {
        File file = new File("d:/a", "a.txt");
    }

    // 3.使用File(File parent,String child)来描述d:/a/a.txt
    public static void demo3() {
        File parent = new File("d:/a"); // 它映射的是d:/a目录

        File file = new File(parent, "a.txt"); // d:/a目录下的a.txt文件。
    }
}

2.File的创建功能

2.1.创建文件   createNewFile()

public boolean createNewFile(); 这个方法抛出了IOException异常,我们在使用它时需要处理,如果指定的文件的路径错误,抛出异常

2.2.创建目录  mkdir();  public boolean mkdir();

2.3.创建目录mkdirs();  用于创建多层目录 ;public boolean mkdirs();

public class FileDemo2 {

    public static void main(String[] args) {
        demo3();
    }

    // 1.创建文件 createNewFile()
    public static void demo1() {
        File file = new File("d:/a.txt"); // 这个文件不存在

        try {
            System.out.println(file.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    // 2.创建目录
    public static void demo2() {
        File file = new File("d:", "a.txt"); // 这个文件不存在

        file.mkdir();
    }

    // 3.创建多层目录
    public static void demo3() {
        File file = new File("d:/a/b/c");

        System.out.println(file.mkdirs());
    }
}

3.关于java中文件的路径问题

绝对路径:可以简单理解成是c:/xxx  d:/xxx 带盘符

相对路径:它是需要参照物的。

如果我们使用记录本来操作,这时创建的文件与.java在同一目录下。

如果我们使用eclipse它的相对路径,在当前工和下,它是相对于src。

注意:我们在使用相对路径是时,经常使用”..”,它代表的是上一层目录。

3.File文件的功能

A.删除操作

delete方法

public boolean delete()  它可以删除目录也可以删除文件。

java中的File类的delete方法删除时不走回收站。

//删除操作
//delete方法
//public boolean delete()  它可以删除目录也可以删除文件。
//java中的File类的delete方法删除时不走回收站。
public class FileDemo4 {

    public static void main(String[] args) {

        //File file=new File("d:/a/a.txt");

        //删除文件
        //file.delete();

        File file=new File("d:/a");
        //删除目录,如果目录中存在了子目录或子文件,目录是不能删除的。
        System.out.println(file.delete());
    }
}

B.重命名

public boolean renameTo(File dest)

如果使用renameTo方法,路径没有改变,直接修改名称,如果路径改变 ,它相当于改名后剪切。

如果使用renameTo方法,对目录操作,可以改名,但不能改变位置.

public class FileDemo5 {

    public static void main(String[] args) {
        //创建一个文件
        File file=new File("d:/a");
        //重命名
        System.out.println(file.renameTo(new File("d:/b")));
    }
}

4.File文件的判断功能

A.判断文件或目录是否存在

public boolean exists()  返回值为true,代表存,否则不存在。

B.判断是文件

public boolean isFile()

C.判断是目录

public boolean isDirectory();

D.判断是否是隐藏文件

public boolean isHidden();

E.判断是否是只读

public boolean canRead();

F.判断是否是只写

public boolean canWrite();

5.File的获取功能

A.获取文件的长度

public long length()  获取文件长度,单位是字节(byte)

B.获取当前文件的绝对路径(不规范)

public String getAbsolutePath()

C.获取当前文件的绝对路径(规范)

public String getCanonicalPath()

D.获取当前文件的名称

public String getName();

public class FileDemo7 {

    public static void main(String[] args) throws IOException {
        demo3();
    }
    //获取文件长度
    public static void demo1(){
        File file=new File("c:/a.txt");
        System.out.println(file.length());

    }

    //获取文件名称
    public static void demo2(){
        File file=new File("c:/a.txt");
        System.out.println(file.getName());
    }

    //获取文件的绝对磁盘路径
    public static void demo3() throws IOException{
        File file=new File("c:/a/../a.txt");

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

12.File的高级获取功能

A.list

public String[] list();用于获取当前目录下的所有子的名称的一个字符串数组。

B.listFiles

public File[] listFiles();用于获取当前目录下所有子的一个File数组

public class FileDemo8 {

    public static void main(String[] args) {
        demo1();
    }

    // list方法
    public static void demo1() {        

        File file = new File("c:/a");
        String[] files = file.list();

        for(String f:files){
            System.out.println(f);
        }
    }

    // listFiles方法
    public static void demo2() {

        File file = new File("c:/a");
        File[] files = file.listFiles();
        //new File("c:/a/a.txt")  new File("c:/a/b");
        for(File f:files){
            System.out.println(f.getName()); //获取文件名称
        }
    }
}
时间: 2024-10-17 17:25:46

第十九天笔记的相关文章

十八、十九天笔记总结

一:网络编程三要素+UDP协议 1.1 1.网络通信介绍 2.tcp/ip 3.udp/ip   1.2 Socket通信          *网络编程三要素:                    ip:                             一个计算的标示(找到这个计算机)                    端口:                             应用程序都会对应一个端口,用来进行通信,有效端口:0~65535,其中0~1024系统使用或保留端口

安卓第十六天笔记-音频与视频播放

安卓第十六天笔记-音频与视频播放 音频与视频播放 1.音频 播放应用资源中的音乐 应用中的音乐一般放在res/raw目录下 /** * 播放应用资源中的音乐 * * @param v */ public void player1(View v) { // 设置播放数据源 MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.gm); // 不需要准备,create,创建完成直接可以使用播放 mediaPlayer.start(); }

安卓第十天笔记-fragment

安卓第十天笔记-fragment Fragment(片段) 一.Fragment简介 *Fragment是3.0引入的API,主要为了解决平板,大屏幕手机显示问题 *Fragment代表了Activity的子模块,因此可以把fragment理解成Activity的片段 *Fragment必须被嵌入Activity中使用 二.创建Fragment的步骤 创建一个类继承Fragment类或者其子类 重写Fragment中的一些onxxx方法 一般有三个方法要重写 .onCreate()系统创建Fra

第二十九天 月出惊山鸟 —Spring的AOP_AspectJ @annotation

6月14日,阴转雨."四面垂杨十里荷,向云何处最花多, 画楼南畔夕阳和.天气乍凉人寂寞, 光阴须得酒消磨,且来花里听笙歌." 面向切面的框架AspectJ邂逅Spring,不仅造就一种简洁,更带来更多的选择空间. 上篇的切面与代理配置方式,麻烦且繁琐.好在Spring 与 AspectJ 进行了集成,从接口和配置的泥潭爬出,善莫大焉. 下面把上一篇Spring的AOP 的例子改写一下,达到同样的效果. 1-3步骤不变. 4.定义一个 Aspect 切面类BallHandler.java

javaSE第十九天

第十九天????227 1:异常(理解)????227 (1) 定义????227 a)异常的引入????227 (2)异常的体系????228 (3)异常的处理:????229 A:JVM的默认处理????229 B:自己处理????229 (4)异常知识点代码详解????229 a) 异常处理的方式????229 b) 多个异常的处理????230 c) JDK7异常处理的新方式????233 d) 编译时期异常和运行时期异常的区别????234 e) 异常中的方法详解????235 f)

第十天笔记

黑马程序员  第十天笔记 <a href="http://www.itheima.com" target="blank">java培训</a> 1.接口定义 关键字 interface 接口名{ 成员变量: Public static final int I=10: 成员方法: Public abstract 返回值类型 方法名(参数): } 接口的权限必须最大public,不写权限,编译的时候,自动加上 /* 接口实例 */ interfa

第三十九天 一乐在其中—Android的小游戏打飞机(三)飞机打子弹

8月7日,小雨."乳鸦啼散玉屏空,一枕新凉一扇风.睡起秋色无觅处,满阶梧桐月明中." 上篇已经让飞机随手指自由移动,本篇加载子弹和音效及背景音乐. 本篇要用到的几个函数讲解: 一.cocos2d的音效.背景音乐函数如下: 1.SoundEngine.sharedEngine().playSound(Context ctxt, int resId, boolean loop) 用于播放背景音乐. 2.SoundEngine.sharedEngine().playEffect(Contex

Training的第十九天

昨天经过获取网页的源代码,再从源代码中截取相关的图片的网址的字符串,就实现了每天可以把必应搜索主页的图片下载.解决了之前的一个类似于hard code的不足. 今天要做的是要把每天新下载的图片应用为桌面.现在还没有什么思路,看来又得在网上搜索一阵子了. Training的第十九天

第十九天模块调用的讲解:

1.怎么在re模块中使用search给要输出的内容进行命名:(?p<name>正则表达式) import re ret=re.search('\d(?P<name>\w+)','1jdkfjjdfkjjfdj') print(ret.group('name')) 结果为 jdkfjjdfkjjfdj 2.可以利用分组中的的形式给分组进行起名字:(?P<name>) import re ret=re.search('<(?P<tag_name>\w+)&