黑马程序员技术交流社区

标题: JAVASE第二阶段day7--day14 学习笔记 [打印本页]

作者: syc123    时间: 2018-1-4 16:57
标题: JAVASE第二阶段day7--day14 学习笔记
     JAVASE第二阶段day7--day14 学习笔记


Day7      
  Set集合的特点:
     1 无序(存储和读取的顺序有可能不一样)
     2 不允许重复(要求元素唯一)                       
     3 没有索引
      HashSet
     重写hashCoude()方法和equals方法  去重               
  Collections:
     面试题:Collection和Collections区别?
         Collection是集合体系的最顶层,包含了集合体系的共性
         Collections是一个工具类,方法都是用于操作Collection                              
  HashMap集合
          Map:是一个双列集合,常用于处理对应关系的数据,key是不可以重复的,也称之为夫妻对集合
         Collection:是单列集合,Coll有不同的子体系                         
  Map的常用功能:
        判断:boolean containsKey
                   Value   
                isEmpty 是否有对应关系
            映射 :put(key,value):就是讲key映射到value,如果key存在,则覆盖value,并将原value返回
           删除:clear  清空
           remove(Object key)根据key删除指定对应
                      int size()返回对应关系个数
                    get 根据key返回指定value                                          
       
         Map的第一种遍历方式:
           1 keySet
             首先着急所有的丈夫key
                  遍历所有丈夫
                  获取每一个丈夫
                  让每一个丈夫去找自己媳妇                   
             创建Map对象
                 添加映射关系
                 遍历Map对象
       2 entrySet()
              通过结婚证对象来获取丈夫媳妇
                 创建Map对象
                       获取所有结婚证对象
                    添加映射关系
                      遍历包含了结婚证的集合
              获取每个单独的记混证对象
              通过结婚证对象来                           
      
            可变参数:当参数不确定,类型明确,Java可以把多个参数直接帮我们转成数组
                    实参:一个参数一个参数的传递
                        形参:类型...变量名
             注意:在可变参数之后不可再追加参数
                           参数的数量自定义,可以给多给也可一个都不给
               
     
         
Day 8 异常
        
        异常:在写代码时出现的编译或者运行时的错误
        异常包含了错误的类型,原因及位置
        异常的体系结构:
            Throwable (最顶层)
                Error:出现的不能够处理的严重问题
                Exception:可以处理的问题   编译时异常
                                RuntimeException运行时异常
        异常处理方式:
             1捕获处理:
                    try...catch 语句
                        try{
                                                        有可能出现问题的代码;
                                                }catch (异常类型 异常对象名  ){
                                                        处理异常;
                                                }
                                        try...catch 的执行顺序:
                        首先try语句,发现异常下面的将不再执行直接跳入catch 语句,catch结束整个语句结束
                        如果没有发现发现语句,try执行完后,语句直接结束,不在执行catch
             2抛出异常
                     当我们不想处理或者没有能力处理异常的时候,我们可以选择抛出去,水调用方法水处理异常
                     使用关键字throws在方法声明处抛出异常                                         
                                               
                jvm处理异常方式:
                 如果出现异常没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置现实在明亮行
                 并且还终止了程序,异常后面的代码将不再执行                                 
         
         如何处理多个异常:
               1 可以使用多个try...catch语句
               2 使用一个try和多个catch
                  
                 多个catch之间的顺序:
                                可以有子父类
                                                评级之间没有顺序
                                                如果有子父类,父类异常必须放在后面
               
      Throwable 常用方法:
                String getMessage() 原因
                 String toString()  类型和原因
                 void printStackTrace() 类型原因和位置                                 
       
            finally
            try{
                                有可能出现问题的代码;
                        }catch (异常类型 异常对象名  ){
                                处理异常;
                        }finally{
                                释放资源;
                                清理垃圾;
                        }
                               
            异常的分类:
                     1 运行时期异常
                         2 编译时期异常
       
        注意:如果抛出的是编译时期异常,必须在方法声明处上抛出(throws)
       
        递归:把大问题拆成很多小问题,然后把小问题茶城更多小问题,
                 当我们把更多小问题解决了,小问题也解决了,随着,大问题也随之解决了
                递归注意事项:
                递归一定要有出口,内存溢出
                 递归次数不宜过多,内存溢出
                                                  
            
Day9 IO流


    一:File类
        File:文件和目录路径吗名的抽象表示形式,File类的实例是不可变得
        构造方法:
            File(String pathname):将制定的路径名转换成一个File对象
            File(String parent,String child)根据制定父路径和文件路径创建File对象
            File(File parent,String child)根据制定父路径和文件路径创建File对象
                FIle常用功能:
             创建功能 boolean createNewFile()
              删除功能 boolean delete()         
                 获取功能  File get
                                   String get
                  判断功能 boolean exists()
                   注意:删除一个文件夹,该文件夹下不能有其他文件和文件夹
                       
        File重要获取功能:
            String[]list()返回当前路径下所有文件和文件夹名称               
                        File[]listFiles()
                static File[]listRoots()返回的是所有盘符
       
        IO流分类“
                    输入流,读取数据 FileReader Reader
                        输出流,写出数据 FileWriter Writer
              数据类型:
                    字节流:
                           字节输入流  读取数据 InputStream
                           字节输出流  写出数据 OutputStream   
                        字符流
                字符输入流  读取数据 Reader
                字符输出流  写出数据 Writer
                               
                路径
           绝对路径
             以盘符开头: E:\\a\\a.txt
           相对路径
               以斜杠开头: \\a\\a.txt
                以文件/目录名开头: a               
                               
                               
Day10
            
      标准流
         System.err: 标准错误流. (命令行输出错误信息)
         System.in: 标准输入流. (键盘输入)
         是InputStream类, 属于字节输入流
         System.out: 标准输出流. (控制台输出)
         是OutputStream的子类PrintStream, 属于字节输出流
     转换流
         InputStreamReader: 字节输入流转字符输入流
         是Reader的子类, 属于字符输入流
         OutputStreamWriter: 字符输出流转字节输出流
         是Writer的子类, 属于字符输出流
     特点
         转换流也是包装类, 需要传入实际的输入输出流对象
     打印流
         PrintStream: 字节打印流
         PrintWriter: 字符打印流
     注意
         打印是输出操作, 所以打印流只有输出, 没有输入
     PrintWriter打印流的特点
      可以自动换行, println(). 会根据系统自动确定换行符
      不能输出字节, 可以输出其他任意类型(要输出字节需要使用PrintStream)
      通过构造方法的配置可以实现自动刷新(flush)(只在调用println, printf, format时有用)
     也是包装流, 自身没有写出功能
      可以把字节输出流转换为字符输出流
     关流不会抛出异常(此类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常)
              
             list方法和store方法的区别
                list只能接收打印流(PrintStream, PrintWriter)
                store可以接收任何输出流(OutputStream, Writer)
                                            
      Properties 集合  
            Properties 表示了一个持久性的属性集,属性列表中每个键及其对应值都是一个字符串
            构造方法:
                Properties()
                                       
          编码表:把计算机底层的二进制数据转换成我们看懂
                        ASCII 码表
                                GB2312 --- GBK
                    Unicode 所有字符都占两个字节
                                UTF—8 长度可变的码表                       
                            ANSI:本地编码表 gbk
                    乱码:编码保持前后一致即可解决
                                   
                       
       


Day 11  
        
          多线程:
               
        进程 Process :当前正在运行的程序,一个应用程序在内存中的执行区域
            线程 Thread :进程中的一个执行控制单元,执行路径
                       
                一个进程可以有多个线程,也可以有一个
               
            单线程:安全性高,效率低
                多线程:安全性低,效率高
       
          多线程的实现方式1: 继承Thread类
                创建线程实例
                           MyThread  mt=new MyThread();
                        启动线程
                            mt.start();
            
           String getName()返回该线程的名称
            void setName(String name)改变线程名称
                              
           主方法是单线程 main
                   
         多线程的实现方式2 :实现Runnable接口
                 static Thread  currentThread();返回当前线程对象
       
   问题出现原因:
         要有多个线程
         要有被多个线程所共享的数据
         多个线程并发的访问共享数据
                 
        synchronized:同步(锁),可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他程序无法访问
        同步代码块:
             格式:
              synchronized(锁对象){
                     需要同步的代码
                }
        注意:锁对象需要被所有的线程共享
                 
            同步:安全性高,效率低
                非同步:效率高,但是安全性低
       
        同步方法:
                 使用关键字synchronized修饰的方法,一旦被某个线程访问则被锁住
            synchronized 同步方法的锁对象是this
                静态的同步方法的锁对象是当前类的字节码对象
               
               
       
Day12
     网络通信三要素:               
            传输协议
            IP地址
             端口号
         
        InetAddress :此类表示互联网协议(IP)地址
       
         使用UDP协议发送数据
                创建发送端Socket对象
                        创建数据并打包
                        发送数据
                        释放资源                       
                DatagramSocket 此类表示用来发送和接受数据,基于UDP协议的                 
        使用UDP协议接收数据
                创建接收端Socket对象
                        接收数据
                        解析数据
                        输出数据
                        释放资源                       
          UDP收发数据注意事项:
             端口号错误,数据可以正常发出,不会出现异常,但是收不到数据
                 端口号已经绑定了,端口号不能重复
          
        使用TCP协议发送数据
             创建发送端Socket对象(创建连接)
                 获取输出流对象
                 发送数据
                 释放资源
        使用TCP协议接受数据
         创建接收端Socket对象  ServerSocket:接收端《服务端Socket
         监听(阻塞)
         获取输入流对象                 
             获取数据
                 输出数据
                 释放资源
                 
       


Day13
     
         反射:Reflection
                在运行时,我们可以获取任意一个类的所有方法和属性
            在运行时,我们可以调用任意一个对象的所有方法和属性
      反射的前提:
                 要获取类的字节码对象(Class对象)
                         1 通过类名获取字节码对象  对象.getClass()
                         2 通过Object的getClass()方法获取,必须有对象   类名.class                         
                         3 Class.forName(String className)
         
       通过反射获取构造方法
             Constructor<?>[]getConstructors  获取所有public修饰的构造方法
                         .getConstructor()  过去无参
                         .getConstructor(String.class,int.class)获取有参
                         newInstance()获取无参
                         
                通过反射获取成员变量
             //获取学生类的字节码对象
             //获取学生类的对象
             Field[]getFields()获取公共
             getDeclaredFields()获取所有                       
             Field getField(String name)根据字段名称获取公共的字段对象
             set (  , )


                 通过反射获取私有的成员变量并使用
                      //获取学生类的字节码对象
             //获取学生类的对象
                         //获取私有的字段对象
                         setAccessible(true)
                         
                 通过反射获取成员方法
             //获取学生类的字节码对象
             //获取学生类的对象
             //获取无参无返回值的方法
             //获取有参无返回值的方法                         
                         //获取无参有返回值的方法
             invoke
                         
     JavaBean:用于封装数据
             类使用公共进行修饰
             提供私有修饰的成员变量                         
             为成员变量提供公共getter和setter方法
                         提供公共无参构造
                         实现序列号接口
                         
         BeanUtils:Apache Commons提供的一个组件,
                         主要功能就是为了简化JavaBean封装数据的操作
                                          
             注意:BeanUtils的setProoerty和get方法底层并不是直接操作成员变量而是有关的get set方法
                         
                  


Day14  xml
   
     xml是指可扩展标记语言
             描述数据
                                   
     XML只能有一个跟标签
         
     注释只能写在文档声明下面,不能嵌套注释
         
         把标签写成普通文本
               


    DTD 约束
        Schema 约束
   
      xml解析
         DOM:将整颗树一口气全部加载到内存中,我们可以随便操作标签和属性,但树太大了内存会溢出
           节点:标签,属性,文本,甚至是换号都称之为节点
                 SAX:一个节点一个节点的进行解析
        
     XML解析开发包
         JAXP  sun公司
         Dom4j   Dom for j 开源组织
                 
                * `org.dom4j.io.SAXReader`类: SAX解析器
        * 构造方法:
                * `SAXReader()`: 创建一个SAX解析器
        * 成员方法:
                * `Document        read(String systemId)`: 读取XML文件, 返回一个Document对象
* `org.dom4j.io.OutputFormat`类: 配置XML输出格式
        * `static OutputFormat createPrettyPrint()`: 创建一个用户输出美观格式的OutputFormat对象
        * `void        setEncoding(String encoding)`: 设置字符集
* `org.dom4j.io.XMLWriter`类: 用于向XML中写入数据的输出流
        * 构造方法:
                * `XMLWriter(OutputStream out)`: 使用字节流创建一个XMLWriter对象
        * 成员方法:
                * `void        write(Document doc)`: 将Document对象中的数据写入到XML文件
* `org.dom4j.Document`接口: 代表一个XML文档
        * `Element getRootElement()`: 获取根元素对象. 需要用根元素获取其他子元素
* `org.dom4j.Element`接口: 代表一个元素
        * 获取元素信息
                * `String getName()`: 获取元素名
        * 元素增删改查
                * 获取元素
                        * `List<Element> elements()`: 获取调用元素对象的所有子元素
                        * `List<Element> elements(String name)`: 获取所有的指定名称的子元素
                        * `Element element(String name)`: 获取第一个该名称的子元素对象
                        * `Element getParent()`: 获取当前元素的父元素对象
                * 添加元素
                        * `Element addElement(String elementName)`: 在当前元素下添加指定名称的子元素
                * 删除元素
                        * `boolean remove(Element child)`: 删除子元素
        * 操作元素中的文本
                * `String elementText(String name)`: 获取第一个该名称的子元素的文本内容
                * `String getText()`: 获取当前元素对象的文本
                * `void setText(String text)`: 设置当前元素对象的文本
        * 操作元素的属性
                * `String attributeValue(String name)`: 根据指定的属性名获取属性值
                * `Element addAttribute(String name, String value)`: 添加或修改指定属性名的属性值
* `org.dom4j.DocumentHelper`类:
        * `static Element createElement(String name)`: 使用指定名称作为元素名, 创建一个元素对象
                          













欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2