博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java(2)
阅读量:2067 次
发布时间:2019-04-29

本文共 8936 字,大约阅读时间需要 29 分钟。

常用API

  1. Math 包含基本数学运算的方法,不能被实例化
    • public staitc int abs(int a) 绝对值
    • public static double ceil(double a) 向上取整
    • public static double floor(double a) 向下取整
    • public static int round(float a) 四舍五入
    • public static int max(int a, int b) int最大值
    • public static int min(int a, int b) int最小值
    • public static double pow(double a, double b) a的b次幂
    • public static double random() 返回double随机数[0.0, 1.0)
  2. System 不能被实例化
    • public static void exit(int status) 中止当前运行的Java虚拟机,传入参数非零表示异常终止,零表示正常终止
    • public static long currentTimeMillis() 返回当前时间的毫秒数
    • public static void arraycopy(fromArr, fromStartIndex, toArr, toStartIndex, copyCount) 拷贝数组
  3. Object
    • public String toString() 打印对象的哈希地址值
    • public boolean equals(Obeject obj) 比较两个对象是否相等,默认比较的是地址
  4. Objects(JDK1.7提供) 不能被实例化
    • public static String toString(一个具体的对象) 返回参数对象的字符串表示形式
    • public static String toString(一个具体的对象,默认字符串) 同上,对象为null时打印默认字符串
    • public static boolean isNull(一个具体的对象) 判断对象是否为空,null true
    • public static boolean nonNull(一个具体的对象) 判断对象是否不为空,not null true
  5. BigDecimal
    • 构造方法
      1. public BigDecimal(double val)
      2. public BigDecimal(String val)
    • 常用方法
      1. public BigDecimal add(BigDecimal b) 加
      2. public BigDecimal subtract(BigDecimal b) 减
      3. public BigDecimal multiply(BigDecimal b) 乘
      4. public BigDecimal divide(BigDecimal b) 除 除不尽会出错
      5. public BigDecimal divide(BigDecimal b, 精确到小数点后几位, 取舍模式) 除 除不尽不会出错
  6. 包装类
    • xxx.valueOf() 包装成对象
    • xxx.parseXXX(String str) 解析字符串成基本数据类型
  7. Arrays
    • public static String toString(Object[] a) 返回数组内容的字符串表示
    • public static void sort(Object[] a) 按照数字顺序排序数组
    • public static Object binarySearch(Object[] a, Object key) 利用二分查找,查找key,数组必须有序
  8. 日期时间类
    • Date
      1. 构造方法
        • public Date() 返回当前系统时间
        • public Date(long time) 返回指定毫秒值确定的时间
      2. 常用方法
        • public long getTime() 获取时间对象的毫秒值
        • public void setTime(long time) 设置时间对象的毫秒值,修改时间
    • SimpleDateFormat 对Date对象进行格式化和解析
      1. 构造方法
        • public SimpleDateFormat() 使用默认格式生成一个格式化对象
        • public SimpleDateFormat(String pattern) 使用指定格式生成一个格式化对象
      2. 常用方法
        • public final String format(Date date) 将日期格式化成字符串
        • public Date parse(String str) 将字符串解析成日期
  9. JDK8新增日期时间类
    • LocalDateTime
      1. 创建方式
        • public static LocalDateTime now() 获取当前系统时间
        • public static LocalDateTime of(年, 月, 日, 时, 分, 秒) 返回指定日期时间的LocalDateTime对象
      2. 获取相关信息
        • public int getYear() 获取年
        • public int getMonthValue() 获取月份(1~12)
        • public int getDayOfMonth() 获取月中的第几天(1~31)
        • public int getDayOfYear() 获取年中的第几天(1~366)
        • public DayOfWeek getDayOfWeek() 获取星期,DayOfWeek枚举类
        • public int getMinute() 获取分钟
        • public int getHour() 获取小时
      3. 转换为LocalDate,LocalTime
        • public LocalDate toLocalDate() 转换为LocalDate
        • public LocalTime toLocalTime() 转换为LocalTime
      4. 格式化和解析
        • public String format(DateTimeFormatter pattern) 将日期格式化成字符串
        • public LocalDateTime parse(String str, DateTimeFormatter pattern) 将字符串解析成日期
          1. DateTimeFormatter 指定对LocalDateTime对象进行格式化和解析的格式
            • public static DateTimeFormatter ofPattern(String pattern) 使用指定格式生成一个格式化对象
      5. 修改日期时间
        • public LocalDateTime plusXXXs(long time) 添加年月日时分秒,周。正加负减
        • public LocalDateTime minusXXXs(long time) 减去年月日时分秒,周。正减负加
        • public LocalDateTime withXXX(long time) 直接修改年月日时分秒,周
    • Period
      1. public static Period between(LocalDate d1, LocalDate d2) 计算两个时间间隔(年月日和年月日,不包含时分秒)
      2. public int getYears() 获取这段时间过了几年
      3. public int getMonths() 获取两段时间月的差值,不是过去了多少个月
      4. public int getDays() 获取两段时间天的差值,不是过去了多少天
      5. public long toTotalMonths() 获取这段时间的总月数,过去了多少个月
    • Duration
      1. public static DurationBetween(LocalDateTime t1, LocalDateTime t2) 计算两个时间间隔(年月日时分秒)
      2. public long toSeconds() 两个时间过了多少秒
      3. public int toMillis() 两个时间过了多少豪秒
      4. public int toNanos() 两个时间过了多少纳秒

异常

  1. 异常类结构
    • Throwable
      1. Error 程序还未执行出现的错误,无法处理
      2. Exception 程序运行出现的异常,可以处理
        • RuntimeException 不需要强制处理
  2. Throwable这个类用来表示任何可以作为异常被抛出的类
  3. try中出现的异常未处理(没有catch子句),在finally中抛出新的异常或者return,会导致异常丢失
  4. 异常处理与return语句
    • 即使在try,catch里面return,也还是会执行finally,并且finally里面的return会改变返回值
    • 抛出异常不能和return写在一个代码块之中
    • throw 和 return 之后都不能继续执行了,所以这两个语句之后不允许写代码。除了finally可以继续执行
  5. throw 手动抛出一个异常,throws 方法可能抛出的异常
    • throw一个编译异常,要么方法内部try…catch处理,要么throws抛出给调用者处理
  6. 断言assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启
    • assert boolean表达式

      1. 如果表达式为true,则程序继续执行
      2. 如果为false,则程序抛出AssertionError,并终止执行
    • assert boolean表达式 : 错误信息表达式

      1. 如果boolean表达式为true,则程序继续执行
      2. 如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>
  7. 要想打印跟踪栈的信息,e.toString()不行,参照如下代码:
    public static String getTrace(Throwable t) {     StringWriter stringWriter = new StringWriter();     PrintWriter writer = new PrintWriter(stringWriter);     t.printStackTrace(writer);     StringBuffer buffer = stringWriter.getBuffer();     return buffer.toString(); }
  8. System.out 和 System.err 区别
    • 标准输入输出流都是在控制台(console)上
    • 重定向就是把System.out.println(),System.in 定位到其他地方,比如文件
    • System.err不受到标准输入输出流重定向的影响
      public static void main(String[] args) throws Exception {    File f = new File("D:/out.txt");      FileOutputStream fileOutputStream = new FileOutputStream(f);          PrintStream printStream = new PrintStream(fileOutputStream);      System.setOut(printStream);      // 重定向到文件    System.out.println("NOT CONSOLE");      // 还是在控制台输出    System.err.println("CONSOLE");}
    • System.out.println可能会被缓冲,而System.err.println不会,由于err不需要缓冲即可输出,直接造成了打印位置的不确定性
  9. 异常链
    • 如果B异常的出现是因为A异常的出现而出现,那么他们就有一个链式关系A->B
    • 处理异常的时候必定是
      catch (AException e) {    throw new BException();}// 这里的异常信息看不出来A和B有联系,而是会抛出两个异常
    • 通过设置cause用来保存原始的异常信息
      catch (AException Ae) {    // 两种方式的前提是B异常必须拥有一个接受Throwable类型参数的构造方法    throw new BException(Ae);    // 第二种方式    BException be = new BException();    be.initCayse(Ae);}

集合

  1. 集合类的体系结构
    • Collection 单值
      1. List 可重复的单值
        • ArrayList
        • LinkedList
      2. Set 不可重复的单值
        • HashSet
        • TreeSet
    • Map 双值
      1. HashMap
      2. TreeMap
  2. Collection
    • 常用方法
      1. boolean add(E e) 添加元素
      2. boolean remove(Object o) 从集合中移除指定元素
      3. boolean removeif(Predicate<? super String>) 根据条件移除指定元素,传入的参数时一个Lambda表达式的过滤器
      4. void clear() 清空元素
      5. boolean contains(Object o) 判断集合中是否包含指定元素
      6. boolean isEmpty() 判断集合是否为空
      7. int size() 获取集合的长度
    • 用迭代器遍历集合
      1. Iterator iterator() 返回集合的迭代器
        • boolean hasNext() 是否有下一个
        • void next() 取出下一个并且向下移动迭代器指针
        • void remove() 迭代器本身带的删除方法
      2. 增强For for( : ) JDK1.5出现
  3. List
    • 特有方法
      1. void add(int index, E e) 在集合中的指定位置插入指定元素
      2. E remove(int index) 删除指定索引元素并返回该元素
      3. E set(int index, E e) 修改指定索引元素为指定元素,返回被修改的元素
      4. E get(int index) 获取指定索引元素
  4. ArrayList,LinkedList
    • 特有方法,ArrayList特有方法基本没有,只列举LinkedList的
      1. void addFirst(E e) 在列表开头添加指定元素
      2. void addLast(E e) 在列表末尾添加指定元素
      3. E getFirst() 获取第一个元素
      4. E getLas() 获取最后一个元素
      5. E removeFirst() 移除第一个元素并返回
      6. removeLast() 移除最后一个元素并返回
  5. 泛型(JDK1.5引入)
    • 用在类上 public class MyClass {}
    • 用在方法上 public void show(T t) {}
    • 用在接口上 public interface MyInterface {}
    • <? extends E> 只能是E以及E的子类
    • <? super E> 只能是E以及E的父类
  6. Set,TreeSet,HashSet
    • TreeSet 存储元素有序,底层红黑树
      1. 自定义类使用TreeSet一定要自定义排序规则(实现Comparable接口)
      2. 或者在生成TreeSet对象的时候,用带比较器的构造方法
    • HashSet 存储元素无序,底层哈希表
      1. 哈希值 是JDK根据对象的地址或者属性值,算出来的int类型的整数
      2. Object类中有一个方法可以获取对象的哈希值 int hashCode():根据对象的地址值算出来的哈希值
      3. 默认的hashCode方法是根据对象的地址值计算的,不同的对象hash值不一样
      4. 重写hashCode方法后,一般根据类的属性计算hash值,不同对象如果属性值一样,那么hash值就会一样
      5. 哈希表
        • JDK8以前,底层采用数组 + 链表实现
        • JDK8以后,底层采用数字 + 链表 + 红黑树实现
      6. HashSet JDK8以前原理
        • 底层(数组 + 链表)
        • 数组的长度默认是16,加载因子是0.75
        • 底层会获得元素的哈希值,计算出在数组中应存入的索引位置
        • 添加元素时,同一数组位置,且新旧值不一样,就会在该数组位置形成一个链表结构
      7. HashSet JDK8以后原理(同一位置元素过多,比较次数多)
        • 在之前的基础上,如果链表长度大于8,这个链表就会变成红黑树进行存储
  7. 二叉树
    • 一个节点最多只能有两个子节点
    • 二叉查找树:任意一个节点的左子节点都小于自己,右子节点都大于自己
    • 平衡二叉树
      1. 二叉树左右两个子树的高度差不超过1
      2. 任意节点的左右子树都是一颗平衡二叉树
      3. 平衡二叉树的旋转,当添加一个节点后,该树不再是一颗平衡二叉树的时候,就会触发旋转
        • 左旋 将根节点的右侧往左拉,原先的右子节点变成新的根节点,并把这个右子节点的左子节点给到降级的根节点当右子节点
        • 右旋 将根节点的左侧往右拉,原先的左子节点变成新的根节点,并把这个左子节点的右子节点给到降级的根节点当左子节点
  8. 红黑树(平衡二叉B树)
    • 规则
      1. 它是一种特殊的二叉查找树,每一个节点都有红或黑一种颜色
      2. 它不是高度平衡的,它的平衡是通过“红黑规则”实现的
      3. 根节点必须是黑色的
      4. 如果一个节点没有子节点或者父节点,则该节点乡音的指针属性值为Nil,这些Nil是为叶节点,每个叶节点都是黑色的
      5. 如果某一个节点是红色的,那么它的子节点必须是黑色
      6. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
    • 添加节点
      1. 默认为红色的效率最高
  9. Map
    • 常用方法
      1. V put(K key, V value) 添加元素
      2. V remove(Obeject key) 删除元素
      3. void clear() 清空集合
      4. boolean containsKey(Obeject key) 是否包含指定Key
      5. boolean containsValue(Object value) 是否包含指定值
      6. boolean isEmpty() 判断集合是否为空
      7. int size() 获取集合长度
    • 遍历方式
      1. Set<K> keySet() 获取所有键的集合
      2. V get(Object key) 根据键获取值
      3. Set<Map.Entry<K, V>> entrySet() 获取所有键值对对象集合
      4. K getKey() 获得键 这个方法是Entry类的方法
      5. V getValue() 获得值 这个方法是Entry类的方法
    • HashMap 底层是哈希表
    • TreeMap 底层是红黑树
  10. 不可变集合
    • List,Set,Map都有一个静态的of方法用来创建一个不可改变的集合对象
    • 内容不可变,长度不可变
    • static<E> List<E> of(E…elements)
    • static<E> Set<E> of(E…elements)
    • static<K, V> Map<K, V> of(E…elements)

Stream流(JDK8) 像流水线一样操作数据,不会改变数据源

  1. 应用场景
    • 单列集合
    • 双列集合
    • 数组
    • 同种数据类型的多个数据
  2. 三类方法
    • 获取Stream流 创建一条流水线,并把数据放到流水线上准备进行操作
      1. 单列集合 使用Collection接口中的默认方法stream()生成流 default Stream<E> stream()
      2. 双列集合 间接获取 先通过keySet或者entrySet获取一个Set集合 再通过这个单列集合获取Stream流
      3. 数组 使用Arrays中的静态方法stream生成流
      4. 同种数据类型的多个数据 型如"1,2,3,4…" 使用Stream.of(T…values) 生成流
    • 中间方法 流水线上对数据的操作方法
      1. Stream<T> filter(Predicate predicate)
        • 对流中的数据进行过滤
        • Predicate接口中只有一个抽象方法booelan test() 该方法用于指定留下的元素的规则
      2. Stream<T> limit(long maxSize) 截取指定参数个数的数据,保留前maxSize个数据
      3. Stream<T> skip(long n) 跳过指定参数个数的数据,前n个数据不要
      4. static <T> Stream<T> concat(Stream a, Stream b) 合并a,b两个流
      5. Stream<T> distinct() 去除流中重复的元素,依赖(hashCode和equals方法)
    • 终结方法 流水线上的最后一个操作
      1. void forEach(Consumer action) 对流的每个元素执行操作
        • Consumer接口中的方法,void accept(T t) 对给定的参数执行此操作
      2. void count() 返回流中的元素个数
  3. Stream流的收集操作,把流中的数据保存起来
    • R Collect(Collector collector)
      1. 只是收集流中的数据,这个方法不会创建容器,更不会往容器中添加元素
      2. 方法的参数如下,会创建集合容器,并添加元素,之后这个方法就可以返回新的集合了
    • 工具类Collectors提供了具体的收集方式
      1. static <T> Collector toList() 把元素收集到List集合中
      2. static <T> Collector toSet() 把元素收集到Set集合中
      3. static Collector toMap(Function keyMapper, Function valueMapper) 把元素收集到Map集合中

转载地址:http://eikmf.baihongyu.com/

你可能感兴趣的文章
flask_migrate
查看>>
解决activemq多消费者并发处理
查看>>
UDP连接和TCP连接的异同
查看>>
hibernate 时间段查询
查看>>
java操作cookie 实现两周内自动登录
查看>>
Tomcat 7优化前及优化后的性能对比
查看>>
Java Guava中的函数式编程讲解
查看>>
Eclipse Memory Analyzer 使用技巧
查看>>
tomcat连接超时
查看>>
谈谈编程思想
查看>>
iOS MapKit导航及地理转码辅助类
查看>>
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
iOS常用宏定义
查看>>
被废弃的dispatch_get_current_queue
查看>>
什么是ActiveRecord
查看>>
有道词典for mac在Mac OS X 10.9不能取词
查看>>
关于“团队建设”的反思
查看>>
利用jekyll在github中搭建博客
查看>>