A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-4-24 16:08 编辑

                                       9-13天课堂笔记总结
day09File类File类的概述和常用功能
  • File:文件和目录路径名的抽象表示形式,File 类的实例是不可变的
  • 构造方法:

    • File(File parent, String child)根据指定的父路径对象和文件路径创建File对象.  
    • File(String pathname) 将指定的路径名转换成一个File对象
    • File(String parent, String child)根据指定的父路径和文件路径创建File对象


  • File的常用功能:

    • 创建功能

      • boolean createNewFile() :当指定文件不存在时,创建文件并返回true,否则返回false
      • boolean mkdir() :当指定文件夹不存在时,创建文件夹并返回true,否则返回false
      • boolean mkdirs(): 创建指定文件夹,当文件夹所在的目录不存在,则顺道一块创建了


    • 删除功能

      • boolean delete() : 当指定的文件或文件夹存在时,删除文件或者文件夹并返回true,否则返回false.

        • 注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹.



    • 获取功能

      • File getAbsoluteFile():以File
      • String  getAbsolutePath():返回File对象所指向的绝对路径
      • String getParent():
      • File getParentFile()
      • String getName(): 获取文件和文件夹的名称
      • String getPath(): 返回创建File对象是给的路径
      • long lastModified() :以毫秒值得形式返回最后修改时间
      • long length(): 返回文件的字节数


    • 判断功能

      • `boolean exists():判断文件或者文件夹是否存在,如果在则返回true,否则返回false
      • boolean isAbsolute():判断File对象指向的路径是否是绝对路径,如果是绝对路径则返回true否则返回false
      • boolean isDirectory(): 判断File对象指向路径是否是文件夹,如果是则返回true,否则返回false.
      • boolean isFile(): 判断File对象指向路径是否是文件,如果是则返回true,否则返回false.
      • boolean isHidden(): 判断File对象指向的路径是否有隐藏属性,如果隐藏了则返回true,否则返回false.



  • 绝对路径:固定不可改变的路径,以盘符开头
  • 相对路径: 相对某个参照物,不能以盘符开头,

    • 在eclipse中相对路径相对应当前项目的跟目录



File 类的获取功能和修改名字功能
  • 修改功能

    • boolean renameTo(File dest) : 将当前File对象所指向的路径,修改为指定File对象所指向的路径

      • 注意: 修改的文件路径不能存在,如果存在则修改失败!!!




File的重要获取功能
  • String[] list() : 返回当前路径下所有的文件和文件夹名称

    • 注意:只有指向文件夹的File对象才可以使用


  • File[] listFiles() :返回指定目录中的所有子文件或子目录的File对象
  • static File[] listRoots() : 返回的是所有盘符.


IO字节流与IO字符流IO流的分类
  • 流向

    • 输入流 : 读数据 FileReader                Reader
    • 输出流 : 写出数据 FileWriter          Writer


  • 数据类型

    • 字节流

      • 字节输入流        读取数据                InputStream
      • 字节输出流     写出数据        OutputStream


    • 字符流

      • 字符输入流        读取数据        Reader
      • 字符输出流     写出数据        Writer




InputStream和OutputStream概述
  • InputStream:字节出入流
  • OutputStream: 字节输出流
    二进制文件只能使用字节流进行赋值(二进制文件:用windows自带记事本读不懂的)
    文本文件的赋值即可使用字符流,也可以使用字节流.


练习将指定目录中的内容复制到另一个目录中day 10IO标准输入流 & 转换流 & 打印流
  • 标准输入输出流:

    • public static final InputStream in:字节输入流,用来读取键盘录入的数据.
    • public static final PrintStream out:字节输出流,将数据输出到命令行


    OutputStreamWriter的概述和使用
    ​        由于标准输出流是一个字节输出流,所以只能输出字节或者字节数组,但是我们读取到的数据则是字符串,如果想进行输出还需要转换成字节数组.
    ​        所以只能输出字节或者字节数组,但是我们读取到的数据则是字符串,如果想进行输出还需要转换成字节数组
    InputStreamReader的概述和使用
    打印流概述
  • 打印流分类

    • printStream
    • printWriter
    • 注意: 只能输入不能输出


  • 特点:

    • 可以自动换行,println()
    • 不能输出字节,但是可以输出其他任意类型
    • 通过某些配置,可以实现自动刷新(只有在调用println,printf或format才有用)
    • 也是包装流,不具备写出功能
    • 可以把字节输出流转换成字符输出流


    打印流特有功能
  • 自动换行: 使用方法println()实现自动换行
  • 自动刷新 : 创建PrintWriter对象时启动自动刷新开关,并肩使用println等3个方法可以实现自动刷新.
  • 注意:

    • 创建FileWriter对象是boolean参数是是否参加
    • 而创建打印流对象的boolean参数是是否自动刷新



对象操作流对象操作流的概述
  • 对象操作流:可以用于读写任意类型的对象

    • ObjectOutputStream

      • writeObject
      • ObjectOutputStream   (OutputStream out)


    • ObjectInputStream

      • readObject
      • ObjectInputStream          (InputStream in)


    • 注意: 使用对象输出流写出对象,只能使用对象输入流来读取对象
    • 只能讲支持java.io.Serializable 接口的对象写入流中



使用对象操作流读写对象解决对象输入流读取对象出现异常的问题实体类中序列号的作用Properties概述编码表
  • 编码表的作用

    • 将计算机二进制数据转换为不同的字符


    day 11(多线程)多线程概述
    • 进程:Process,当前正在运行的程序,一个应用程序在内存中的执行区域.
    • 线程:Thread, 进程中的一个执行控制单元,执行路径

      • 一个进程可以有一个线程,也可以有多个线程,每个线程可以执行自己的代码.
      • 多个线程各自执行的任务可以同时进行.
      • 线程的执行依靠CPU调度分配

        • 单核CPU:靠CPU不断高速的随机的切换执行的线程,达到看似同时进行的效果.
        • 多核CPU:每个CPU可以完全执行一个线程,或者多个CPU各自不断高速随机切换,更高效.



    • 单线程和多线程特点

      • 单线程: 同一时间只做一件事情,安全性高,但是效率低.
      • 多线程:同一时间做多件事,安全性低,但是效率高.
      • 单线程和多线程的例子

        • 假设各位同学吃坏了, 都想去卫生间, 只有1个空位
        • 单线程方式: 同学1进去解决完毕, 同学2再去. ( 安全性高, 效率低)
        • 多线程方式: 大家同时进去解决... (安全性低, 效率高)


      • 多线程案例:360,迅雷等.


    • 扩展

      • 并发:并行发生,同时发生,多线程就可以实现并发
      • 同步:sync,注意并不是同时的意思,同步是指一步接一步的执行,一个执行完毕再开始执行下一个

        • 单线程就是同步


      • 异步:async,不是一步一步执行,而是同时执行多步,每个步骤何时结束不确定

        • 多线程就是异步


      • 同一线程内的代码是同步执行的,不同线程的代码是异步执行的.
      • 阻塞: 上一行代码正在执行,还没有执行完毕,程序就阻塞在这里了,下一行代码必须等上一行不在阻塞后才能执行.



    创建线程的第一种方式: 继承Thread类
    • 方式1: 一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的run 方法。接下来可以分配并启动该子类的实例.

      • 定义类,继承Thread类,重写run()方法
      • 步骤

        • 1.定义一个类,继承Thread类
        • 2.在子类中重写父类的run()方法
        • 3.创建子类的对象
        • 3.调用子类对象的start()方法启动线程.



      Thread
    • java.lang.Thread类:实现了Runnable接口

      • 构造方法


          • Thread Thread(): 创建Thead对象
          • Thread Thread(Runnable r): 通过Runnable对象创建Thread对象
          • Thread Thread(Runnable r, String threadName): 通过Runnable对象创建Thread对象并指定线程名


        • 成员方法

          • void run(): 用于让子类重写, 表示该线程要执行的任务. 不能直接调用
          • void start(): 启动线程, 即让线程开始执行run()方法中的代码
          • String getName(): 获取线程的名称
          • void setName(String name): 设置线程名称


        • 静态方法

          • static Thread currentThread(): 返回对当前正在执行的线程对象的引用
          • static void sleep(long millis): 让所在线程睡眠指定的毫秒





    主方法是单线程的创建线程的第二种方式:实现Runnable接口
    • 方式2:创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。


    多线程安全问题产生&解决方案多线程模拟火车站售票出现问题
    • 在判断的时候由于cpu高速切换,在没有执行完的时候就切换到了其他线程,


    使用同步代码块解决多线程案例中出现的问题
    • 问题出现的原因:

      • 要有多个线程
      • 要有被多个线程所共享的数据
      • 多个线程并发的访问共享的数据.


    • synchronized:同步 (锁),可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他的线程将无法访问.



      同步代码块格式:
          synchronized(锁对象) {
          //要同步执行的对象
          }
    • 注意: 锁对象需要被所有的线程所共享.

      • 同步:安全性高,效率低.
      • 非同步: 效率高,安全性低.



    使用同步方法解决线程安全问题
    • 同步方法:使用关键字synchronized修饰的方法,一旦被一个线程访问,则整个方法全部锁住,其他线程则无法访问.
    • synchronized
    • 注意:

      • 非静态同步方法的锁对象是this
      • 静态的同步方法的锁对象是当前类的字节码对象.
      • day12网络编程概述网络编程的概述
        Socket
        网络通信中的三要素
        • 传输协议

          • UDP协议

            • 无连接的不可靠协议
            • 数据传输大小限制为64K(一个包)
            • 不需要建立连接即可传输
            • 数据发送速度快,发送方只发送数据,不检查接受方是否真正受到数据,所以数据可能有丢包的情况.


          • TCP协议

            • 需要建立连接的可靠协议
            • 没有数据传输大小的限制
            • 在传输前需要先建立连接(三次握手)
            • 它的重发机制保证了数据传输的准确性,但因为需要接收方发回验证信息,所以数据发送时间长,数据流量大



        • IP地址

          • ipconfig 查看自己的IP地址


        • 端口号

          • 查看端口号:netstat -an



        InetAddress
        • InetAddress:此类表示互联网协议(IP)地址.
        • static InetAddress getByName(String host):确定主机IP地址


        使用UDP协议发送数据
        • 创建发送端Socket对象
        • 创建数据并打包
        • 发送数据
        • 释放资源


        使用UDP协议接收数据
        • 创建接收端Socket对象
        • 接收数据
        • 解析数据
        • 输出数据
        • 释放资源


        UDP协议收发数据的注意事项
        • 端口号错误,数据可以正常发出,不会出现异常,但是收不到数据
        • 出现错误,端口号已经被绑定了.


        使用TCP协议发送数据
        • 创建发送端Socket对象(创建连接)
        • 获取输出流对象
        • 发送数据
        • 释放资源


        使用TCP协议接收数据
        • 创建接收端Socket对象
        • 监听(阻塞)
        • 获取输入流对象
        • 获取数据
        • 输出数据
        • 释放资源


        day 13反射Reflect
        • 反射:在程序运行时,获取任何一个类的所有属性和方法(包括私有的),调用任意一个对象的所有属性和方法(包括私有的).

          • 在运行时,我们可以获取任意一个类的所有方法和属性
          • 在运行时,让我们调用任意一个对象的所有方法和属性


        • 反射的前提

          • 要获取类的对象(Class对象)

            • 通过Object的getClass()方法获取,必须要有对象        对象名.getCalss();
            • 通过类名获取字节码对象   类名.class
            • 通过Class类中的静态方法, 指定字符串, 该字符串是类的全类名(包名+类名) Class.forName(“com.itheima_01.Student”);




        通过反射获取构造方法并使用
        • 获取构造方法

          • getConstructors():获取所有public修饰的构造方法.
          • getConstructor(Class<?>...parameterTypes):获取无参构造,
          • getDeclaredConstructors()
          • getDeclaredFields():获取所有的成员变量
          • getFields():获取公共的成员变量
          • getField():根据字段名称获取公共的字段对象


        • 创建对象

          • T newInstance():使用该类的无参构造创建一个对象



        JavaBean
        • JavaBean: 用于封装数据.

          • 类使用公共进行修饰
          • 提供私有修饰的成员变量
          • 为成员变量提供公共的getter和setter方法
          • 提供公共无参的构造
          • 实现序列号接口


        • BeanUtils: Apache commons提供的一个组件,主要功能就是为了简化JavaBean封装数据的操作.













0 个回复

您需要登录后才可以回帖 登录 | 加入黑马