zoukankan      html  css  js  c++  java
  • [Java] HOW2J(Java中级)

    异常

    • 定义:导致程序正常流程被中断的事件
    • 异常处理常见手段
      • try catch:将可能抛出异常的代码放在try的块中,一旦出现异常就跳转到catch的块中处理
      • throws/throw:不在本模块处理异常,而是交给调用者处理
      • finally:无论是否出现异常,都会执行(保证能正常结束)
    • 使用异常的父类进行catch:可以,但可能不精确
    • 多异常捕捉:分别进行catch,或放在一个catch里统一捕捉
    • throws出现在方法声明上(可能出现异常),而throw通常出现在方法体内(一定抛出异常)
    • 异常分类
      • 可查异常(CheckedException):必须进行处理的异常,否则编译不通过
      • 运行时异常(RuntimeException):不是必须进行try catch的异常,不try catch也不会有编译错误,如下标越界或空指针
      • 错误(Error):系统级别的异常,不要求强制捕捉,如内存耗尽

     

    文件

    • 文件类(java.io.File):文件和文件夹对象都是File,有File对象不代表硬盘里有文件
    • 流(Stream)就是一系列数据(文件、数据库、网络),用于不同介质之间的数据交互
    • 操作文件用File,操作文件的内容用Stream
    • 字节流
      • 字节输入流(InputStream):读取文件的数据到程序中(硬盘->JVM内存),为抽象类,只提供方法声明
      • 字节输出流(OutputStream)
      • java.io.FileInputStream是InputStream的子类,用于对文件的读取
      • java.io.FileOutputStream是OutputStream的子类,用于向文件写数据
    • 字符流
      • 字符输入流(java.io.Reader)
      • 字符输出流(java.io.Writer)
      • java.io.FileReader是Reader的子类,用于从文件读数据
      • java.io.FileWriter是Writer的子类,用于向文件写数据
    • 用完后,在finally中关闭流
    • 字节流与字符流的区别:字节流直接与终端文件进行数据交互,字符流需将数据经过缓冲区处理才与文件进行数据交互,字符流处理中文更方便
    • 常见编码
      • ASCII:数字和字母
      • GBK:中文
      • UNICODE:所有文字,Java采用的编码方式
      • UTF-8:UNICODE的简化版,节省内存
      • ANSI:本地码,中文操作系统就是GBK
    • 缓存流
      • 一次性读较多的数据到缓存,缓存中数据读完后再到硬盘取数据,以减少硬盘的访问次数(用大碗吃饭)
      • 与用户交互时,键盘输入完了再读数据
      • 缓存流必须建立在一个存在的流的基础上
      • 缓冲字节输入流(java.io.BufferedInputStream)
      • 缓冲字节输出流(java.io.BufferedOutputStream)
      • 缓存字符输入流(java.io.BufferedReader):一次读取一行数据
      • 缓存字符输出流(java.io.PrintWriter):一次写一行数据
      • readLine():读取一行数据,默认以“ ”作为分隔符
      • flush():立即把数据写到硬盘
    • 数据流
      • 数据输入流(java.io.DataInputStream)
      • 数据输入流(java.io.DataOutputStream)
      • readUTF()、writeUTF():格式化读写
    • 对象流
      • 序列化:一个对象以流的形式进行传输。要求该对象对应的类必须实现Serializable接口
      • 序列化操作类(java.io.ObjectOutputStream):将对象序列化为指定格式的二进制数据
      • 反序列化操作(java.io.ObjectInputStream):将序列化的二进制对象信息转换回对象内容
      • writeObject():序列化对象
      • readObject():从序列流中读取对象
      • 如果对象中某些属性的内容不需要被保存,定义为transient
    • 扫描流
      • Scanner:逐行读取数据,比System.in.read()更方便
    • System类中的IO常量
      • System.in:InputStream类对象,用于接收键盘的数据输入
      • System.out:PrintStream类对象,用于显示器上的信息输出,可调用PrintStream类中的println()
      • System.err:PrintStream类对象,用于显示器上的错误输出

    集合框架

    • java.util.Collection
      • Set、List、Queue、Deque的接口
      • 常用方法
        • public boolean add(E e)
        • public Iterator<E> iterator()
    • java.util.List
      • 扩充方法(父接口:Collection)
        • public E get(int index):取得索引标号的内容(重要)
        • public E set(int index, E element):修改指定索引编号的内容
        • public ListIterator<E> listIterator():为ListIterator接口实例化
    • java.util.ArrayList
      • 实现了接口java.util.List
      • 大小随对象增加而增长,可代替数组
      • 数据按照保存顺序存放,允许重复
      • 常用方法
        • add():增加
        • contains():是否存在对象,需要覆写equals()
        • get():获取指定位置
        • indexOf():获取对象位置
        • remove():删除,需要覆写equals()
        • set():替换
        • size():获取大小
        • toArray():转换为数组,不指明类型则转为Object数组
        • addAll():把另一个容器的所有对象加进来
        • clear():清空
      • 遍历方法
        • for
        • iterator:在while或for循环中使用
        • for::无法进行ArrayList的初始化,无法得知当前是第几个元素  
    • java.util.LinkedList  
      • 实现了List<E>、Queue<E>接口
      • 线性表,分为Queue(FIFO)、Stack(FILO)、Deque(双向链表)等
    • java.util.HashMap<K,V>
      • 实现了Map<K,V>接口
      • 以key-value对的方式存储数据
      • key的值是唯一的,以相同的key插入的value会覆盖原有的值,同一个value可以以不同key插入
      • 与List<E>相比,可以实现极为高效的查找操作
    • java.util.HashTable<K,V>
      • 与hashMap<K,V>相比
        • 不能存放null
        • 线程安全
    • java.util.LinkedHashSet<K,V>
      • 实现了Set<E>接口
      • 元素按插入顺序排序
    • java.util.HashSet<E>
      • 实现了Set<E>接口
      • 封装了Map<E>
      • value不能重复
      • 元素没有顺序
      • 不同于List<E>,不提供get()获取指定元素位置,遍历需用迭代器,或增强for
    • java.util.Collections
      • 容器的工具类
    • 泛型(Generic)容器
      • 不指定泛型的容器可存放任意类型元素,指定了泛型的容器只能存放指定类型元素(保证元素类型一致)
      • 前后都要使用泛型,如List<Hero> genericheros = new ArrayList<Hero>();
              
  • 相关阅读:
    AC自动机【学习笔记】
    SCOI2016 背单词【Trie树,贪心】
    【字符串算法】字典树Trie入门
    USACO 1.3 Name That Number【暴搜】
    MapReduce分组
    MapReduce排序
    博客园添加访问人数统计
    MapReduce的分区
    MapReduce的计数器
    MapReduce部分源码解读(一)
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12401342.html
Copyright © 2011-2022 走看看