java基础总结_09

异常

(1)程序出现的不正常的情况。
(2)异常的体系
    Throwable
        |--Error    严重问题,我们不处理。
        |--Exception
            |--RuntimeException 运行期异常,我们需要修正代码
            |--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过
(3)异常的处理:
    A:JVM的默认处理
        把异常的名称,原因,位置等信息输出在控制台,但是呢程序不能继续执行了。
    B:自己处理
        a:try...catch...finally
            自己编写处理代码,后面的程序可以继续执行
        b:throws
            把自己处理不了的,在方法上声明,告诉调用者,这里有问题
(4)面试题
    A:编译期异常和运行期异常的区别?
        编译期异常 必须要处理的,否则编译不通过
        运行期异常 可以不处理,也可以处理
    B:throw和throws是的区别
        throw:
            在方法体中,后面跟的是异常对象名,并且只能是一个
            throw抛出的是一个异常对象,说明这里肯定有一个异常产生了
        throws:
            在方法声明上,后面跟的是异常的类名,可以是多个
            throws是声明方法有异常,是一种可能性,这个异常并不一定会产生
(5)finally关键字及其面试题
    A:finally用于释放资源,它的代码永远会执行。特殊情况:在执行到finally之前jvm退出了
    B:面试题
        a:final,finally,finalize的区别?
        b:如果在catch里面有return,请问finally还执行吗?如果执行,在return前还是后
            会,前。

            实际上在中间。这个上课我们讲过
    C:异常处理的变形
        try...catch...finally
        try...catch...
        try...catch...catch...
        try...catch...catch...fianlly
        try...finally
(6)自定义异常
    继承自Exception或者RuntimeException,只需要提供无参构造和一个带参构造即可
(7)异常的注意实现
    A:父的方法有异常抛出,子的重写方法在抛出异常的时候必须要小于等于父的异常 
    B:父的方法没有异常抛出,子的重写方法不能有异常抛出
    C:父的方法抛出多个异常,子的重写方法必须比父少或者小

File

(1)IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件
(2)构造方法
    A:File file = new File("e:\\demo\\a.txt");
    B:File file = new File("e:\\demo","a.txt");
    C:File file = new File("e:\\demo");
      File file2 = new File(file,"a.txt");
(3)File类的功能(自己补齐)
    A:创建功能
    B:删除功能
    C:重命名功能
    D:判断功能
    E:获取功能
    F:高级获取功能
    G:过滤器功能
(4)案例:
    A:输出指定目录下指定后缀名的文件名称
        a:先获取所有的,在遍历的时候判断,再输出
        b:先判断,再获取,最后直接遍历输出即可
    B:批量修改文件名称

递归

(1)方法定义中调用方法本身的现象
    举例:老和尚给小和尚讲故事,我们学编程
(2)递归的注意事项;
    A:要有出口,否则就是死递归
    B:次数不能过多,否则内存溢出
    C:构造方法不能递归使用
(3)递归的案例:
    A:递归求阶乘
    B:兔子问题
    C:递归输出指定目录下所有指定后缀名的文件绝对路径
    D:递归删除带内容的目录(小心使用)

IO流

(1)IO用于在设备间进行数据传输的操作    
(2)分类:
    A:流向
        输入流 读取数据
        输出流 写出数据
    B:数据类型
        字节流 
                字节输入流
                字节输出流
        字符流
                字符输入流
                字符输出流
    注意:
        a:如果我们没有明确说明按照什么分,默认按照数据类型分。
        b:除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。
(3)FileOutputStream写出数据
    A:操作步骤
        a:创建字节输出流对象
        b:调用write()方法
        c:释放资源

    B:代码体现:
        FileOutputStream fos = new FileOutputStream("fos.txt");

        fos.write("hello".getBytes());

        fos.close();

    C:要注意的问题?
        a:创建字节输出流对象做了几件事情?
        b:为什么要close()?
        c:如何实现数据的换行?
        d:如何实现数据的追加写入?
(4)FileInputStream读取数据
    A:操作步骤
        a:创建字节输入流对象
        b:调用read()方法
        c:释放资源

    B:代码体现:
        FileInputStream fis = new FileInputStream("fos.txt");

        //方式1
        int by = 0;
        while((by=fis.read())!=-1) {
            System.out.print((char)by);
        }

        //方式2
        byte[] bys = new byte[1024];
        int len = 0;
        while((len=fis.read(bys))!=-1) {
            System.out.print(new String(bys,0,len));
        }

        fis.close();
(6)字节缓冲区流
    A:BufferedOutputStream
    B:BufferedInputStream       

字符流

IO流分类
    字节流:
        InputStream
            FileInputStream
            BufferedInputStream
        OutputStream
            FileOutputStream
            BufferedOutputStream

    字符流:
        Reader
            FileReader
            BufferedReader
        Writer
            FileWriter
            BufferedWriter
(1)字节流操作中文数据不是特别的方便,所以就出现了转换流。
   转换流的作用就是把字节流转换字符流来使用。
(2)转换流其实是一个字符流
    字符流 = 字节流 + 编码表
(3)编码表
    A:就是由字符和对应的数值组成的一张表
    B:常见的编码表
        ASCII
        ISO-8859-1
        GB2312
        GBK
        GB18030
        UTF-8
    C:字符串中的编码问题
        编码
            String -- byte[]
        解码
            byte[] -- String
(4)IO流中的编码问题
    A:OutputStreamWriter
        OutputStreamWriter(OutputStream os):默认编码,GBK
        OutputStreamWriter(OutputStream os,String charsetName):指定编码。
    B:InputStreamReader
        InputStreamReader(InputStream is):默认编码,GBK
        InputStreamReader(InputStream is,String charsetName):指定编码
    C:编码问题其实很简单
        编码只要一致即可
(5)字符流
    Reader
        |--InputStreamReader
            |--FileReader
        |--BufferedReader
    Writer
        |--OutputStreamWriter
            |--FileWriter
        |--BufferedWriter
(6)复制文本文件(5种方式)

IO流小结

IO流
    |--字节流
        |--字节输入流
            InputStream
                int read():一次读取一个字节
                int read(byte[] bys):一次读取一个字节数组

                |--FileInputStream
                |--BufferedInputStream
        |--字节输出流
            OutputStream
                void write(int by):一次写一个字节
                void write(byte[] bys,int index,int len):一次写一个字节数组的一部分

                |--FileOutputStream
                |--BufferedOutputStream
    |--字符流
        |--字符输入流
            Reader
                int read():一次读取一个字符
                int read(char[] chs):一次读取一个字符数组

                |--InputStreamReader
                    |--FileReader
                |--BufferedReader
                    String readLine():一次读取一个字符串
        |--字符输出流
            Writer
                void write(int ch):一次写一个字符
                void write(char[] chs,int index,int len):一次写一个字符数组的一部分

                |--OutputStreamWriter
                    |--FileWriter
                |--BufferedWriter
                    void newLine():写一个换行符

                    void write(String line):一次写一个字符串

多线程

(1)多线程:一个应用程序有多条执行路径
    进程:正在执行的应用程序
    线程:进程的执行单元,执行路径
    单线程:一个应用程序只有一条执行路径
    多线程:一个应用程序有多条执行路径

    多进程的意义?
        提高CPU的使用率
    多线程的意义?
        提高应用程序的使用率
(2)Java程序的运行原理及JVM的启动是多线程的吗?
    A:Java命令去启动JVM,JVM会启动一个进程,该进程会启动一个主线程。
    B:JVM的启动是多线程的,因为它最低有两个线程启动了,主线程和垃圾回收线程。
(3)多线程的实现方案(自己补齐步骤及代码   掌握)
    A:继承Thread类
    B:实现Runnable接口
(4)线程的调度和优先级问题
    A:线程的调度
        a:分时调度
        b:抢占式调度 (Java采用的是该调度方式)
    B:获取和设置线程优先级
        a:默认是5
        b:范围是1-10
(5)线程的控制(常见方法)
    A:休眠线程
    B:加入线程
    C:礼让线程
    D:后台线程
    E:终止线程(掌握)
(6)线程的生命周期(参照   线程生命周期图解.bmp)
    A:新建
    B:就绪
    C:运行
    D:阻塞
    E:死亡
(7)电影院卖票程序的实现
    A:继承Thread类
    B:实现Runnable接口
(8)电影院卖票程序出问题
    A:为了更符合真实的场景,加入了休眠100毫秒。
    B:卖票问题
        a:同票多次
        b:负数票
(9)多线程安全问题的原因(也是我们以后判断一个程序是否有线程安全问题的依据)
    A:是否有多线程环境
    B:是否有共享数据
    C:是否有多条语句操作共享数据
(10)同步解决线程安全问题
    A:同步代码块
        synchronized(对象) {
            需要被同步的代码;
        }

        这里的锁对象可以是任意对象。

    B:同步方法
        把同步加在方法上。

        这里的锁对象是this

    C:静态同步方法
        把同步加在方法上。

        这里的锁对象是当前类的字节码文件对象(反射再讲字节码文件对象)
(11)回顾以前的线程安全的类
    A:StringBuffer
    B:Vector
    C:Hashtable
    D:如何把一个线程不安全的集合类变成一个线程安全的集合类
        用Collections工具类的方法即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值