Java learning courses Day06-10-

Day06

Map接口
    Map内存储的是[键:值]对这样以成对的对象组(可以把一组对象当成一个元素)
    通过"键"对象来查询"值"对象

    Map是不同于Collection的另外一种集合接口

    Map中,key值是唯一的(不能重复),而value可以重复,key对象时与value对象
    关联在一起的
    重复的添加同一个key的value,相当于替换操作,之前的value被新添加的value
    覆盖掉了

    Map接口有两个实现类:
        HashMap  key:value对 是按照hash算法存储的
            HashMap 又叫散列桶,默认散列桶数量(元素个数)16,散列因子为0.75

        TreeMap  key:value对 是排序(Key)存储的   

    Map接口中常用方法:
        put(Object key,Object value)添加元素
        putAll(Map t)将映射t中的所有映射关系复制到此映射中
        get(Object key)返回此映射中映射到指定键的值
        remove(Object key)若存在此键的映射关系,将其从映射中移除
        containsKey(Object key)若此映射包含指定键的映射关系,返回true
        containsValue(Object value)若此映射为指定值映射一个或多个键,返回true
        size() 返回此映射中的键值对对数
        clear()清楚所有
        isEmpty()若此映射未包含键-值关系,返回true(判断是否为空,空-true)
        keySet()返回此映射中包含的键的set视图(显示出所有键)
                        返回包含此Map中所有键的Set型集合
        values()返回此Map中包含所有value的Collection集合

    Map的遍历
        Map不能直接使用任何工具进行遍历
        有两种方法遍历Map
        1.把Map转换成keySet()视图,然后对这个Set进行遍历
        2.把Map转换成Collection  values  然后进行遍历
    无论是Set还是Collection都不能使用普通for循环遍历
    这事数据结构决定的

练习
    在Test类中的main方法中创建一个Map,把咱们屋里所有人的姓名添加进去
    Key---为添加顺序
    Value-为姓名

    因为随军和张合没来,删除他俩

    然后添加一人,名字叫,苍井空(需要判断map中是否含有这个人,如果没有就添加)

    遍历





    创建一个学生类
    属性:
        姓名        年龄        性别
        家庭住址        家长联系电话
        属性设为私有,set  get方法
        重写toString,equals,hashCode方法

    创建一个学校类
    属性:
        学校的名字    建校时间        校址
        学生        分数        科目
        其中学生与科目和分数互相映射
        科目与分数互相映射
        科目固定为数学,英语,语文,物理,化学
    方法:
        1.添加学生的方法
        2.录入某个学生的方法
        3.修改学生信息的方法


------------------------------------------------------------------------------------------------
Day07

IO流
    Input and Output 输入  输出流

File类
    该类用于描述文件系统中的一个文件或目录

    File:通过它我们可以获取其描述的文件或目录的属性信息

对于文件的读写:RandomAccessFile


    定义一个方法,传入一个String类型路径,显示出这个路径下的所有子项
    名字和大小,是否可读,是否可写,最有一次修改时间


    定义一个方法,实现把一个File复制到另一个File里面去

    定义一个方法,查看一个目录里面包含多少个子项(子项里面的也算)


------------------------------------------------------------------------------------------------
Day08

IO流
    流是按照我们编程人员角度去说的

    输入流input(读取),输出流output(写入)

    输入流:用于读取数据
    输出流:写出数据

    程序员→内存---输出流
    程序员←内存---输入流

    我们看待输入流与输出流是站在我们编写的程序的角度

    流分为高级流与低级流
    低级流:节点流
        数据有明确的来源或去向
    高级流:过滤流,处理流
        不能独立存在,必须依托另一个流工作,往往使用高级流是为了简化读写
    按照流向不同分为:输入流和输出流
    按照读取的单位不同:
        字节流:  一个byte
        字符流:    一个char 只能用于文本格式的读写
    FileInputStream:文件字节输入流
    FileOutputStream:文件字节输出流

    FileInputStream三个基本方法
        int read() 读取一个字节,并将它返回
        int read(byte[] b) 将数据读入一个字节数组,同时返回读取的字节个数
        int read(byte[] b,int start,int length)将数据读入一个字节数组
           放到数组的start指定位置,并用length来指定读取的最大字节数.
        这三个方法读取到文件末尾时,都返回-1,可以用来判断是否全部读取完毕
    其它方法:
        void close() 关闭流
        int available()返回可以从中读取的字节数
        long skip(long n)在输入流中跳过n个字节,将实际跳过的字节数返回

    FileOutputStream三个基本方法:
        void write(int c);  写入一个字节
        void write(byte[] b);写入一个byte数组
         大专栏  Java学习Day06-10-培训班void write(byte[] b,int start,int length)
            把byte数组b中的start开始length个长度写入到文件中
    其它方法:
        close()
        flush():将缓冲中的字节发送到流中,同时清空缓存区

    InputStream接口  低级流 输入流
        InputStream:所有字节流的超类
    OutputStream接口 低级流 输出流
        OuputStream:所有字节流的超类

字符流
    Reader/Writer处理的是字符类型的数据.它处理流的方式是以字符为
    单位进行的(接口)

        Reader:输入流
        Writer:输出流

    Reader/Writer也分为低级流(节点)和高级流(处理)

    Reader低级流类
        CharArrayReader
        StringReader
        PipedReader
        FileReader
    Reader高级流类
        BufferedReader
        InputStreamReader
        LineNumberReader


------------------------------------------------------------------------------------------------
Day09

序列化与反序列化
    序列化(Serialization)是将对象的信息转换为可以存储或传输的形式的过程

    一般将一个对象存储至一个存储媒介,例如档案或是记忆体缓冲等.在网络传输
    过程中,可以是字节或者是XML格式.而字节的XML编码格式还可以还原完全相等
    的对象.这个相反的过程被称之为反序列化

    Java对象的序列化与反序列化
    在Java中我们可以通过很多方式来创建对象,并且只要对象没有被回收我们都可以
    使用该对象,但是,我们创建出来的这些Java对象收拾存在于JVM的堆内存中.只有
    JVM处于运行状态的时候,这些对象才可能存在,一旦JVM停止运行,这些对象的状态
    也就随之而去了(丢了).

    但是在真实的应用场景中,我们需要将这些对象持久化下来,并且能够在需要时在把
    对象读取出来.Java的对象序列化就可以帮助我们实现该功能

    对象序列化机制(object serialization) 是Java语言内建的一种对象持久化
    方式

    要想序列化一个对象,那么这个类必须实现Serializable接口


------------------------------------------------------------------------------------------------
Day10    

异常:
    什么是异常?
        就是程序在运行时出现的不正常情况
    异常的由来:
        写程序是为了描述现实生活中的事物,那么现实生活中也包含很多的问题
        而问题本身也是现实生活中的一类事物,也可也通过Java类的形式进行描
        述并封装成对象,Java对描述问题的对象称之为不正常情况,也就是异常

    Java中对对于问题的描述类是Throwable(Throwable是所有异常或错误的父类)
    Java中对于问题的划分分为两种:
        1.严重的问题,Java通过Error类进行描述
            对于Error 一般我们不编写针对性的代码对其进行处理
        2.是非严重的问题,Java通过Exception类进行描述
            对于Exception可以使用针对性的代码对其进行针对性处理

    对于Exception异常的处理

        try{
            被检测的代码;
        }catch(异常类  变量){
            处理异常的代码(处理方式);
        }.................catch(){

        }finally{
            一定会执行的代码;
        }

    声明异常
        在函数参数列表的后面写上throws 异常类 来声明一个异常,通知调用者
        本方法可能会存在问题,调用者必须做出回应(处理方式),否则就编译失败

        对于该问题有两种处理方式
            1.把问题抛出给JVM(throws),JVM的处理方式就是终止程序
            2.捕获该问题并做出处理(try catch)

    多异常的处理
        1.一个函数中可能会存在很多种异常,建议每种异常都声明的更为具体些
        2.一个函数声明了几个异常,调用者就写几个catch代码块
            原则:父类异常在后,子类异常在前

    不要在catch快里写输出语句等简单的处理方法,要写具体处理方法

    练习:
        定义一个函数,声明
        ArithmeticException
        ArrayIndexOutOfBoundsException
        异常,在main方法中调用该函数,try catch 除了声明的两种异常外
        再加上空指针异常和Exception异常 对于算数异常的处理方式为等于
        一个int类型最小值,数组越界异常处理方式为,输出一句话"越界了"
        NullPointerException

    自定义异常
        class 自定义异常名a extends Exception{

        }

        使用
            throw new a();

    练习:
        自定义3个异常类,在Demo04测试类里面定义一个函数,这个函数可能会
        引发我们定义的这3个异常,在该函数中声明并确定在什么情况下抛出那个
        异常,在main方法中调用该函数

        自定义5个异常类,MeOne.........Exception


        定义一个函数,该函数对String类型进行排序,如果这个字符串中不都是
        大或小写英文字母,就抛出AbcException异常(自定义的),在Demo05中进行
        测试

        控制台输入月份判断这个月多少天?(2017)
        如果输入月份不对就抛出MonthException异常

Guess you like

Origin www.cnblogs.com/dajunjun/p/11699375.html