Java学习路程5——常用类库

第四章第2节:常用类库

1.学习指导:

当一个手艺人,知道,了解,学习,掌握(记忆)工具:

作为学徒:了解,大量的使用,实验,测试,总结,最后整理成笔记,要非常详细和系统。

整理成文档,要非常详细,比如某个工具,有那几个方法,每个方法有什么功能,需要穿什么参数,能得到什么结果?

2.泛型概述:

泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定 义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

3.泛型在接口中的使用

4.java.util.Objects

(除了static int compare(T a, T b, Comparator<? super T> c)) 暂时不用整理,其它都要整理。

Objects类包含static实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序包括null或null方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及检查索引或子范围值是否超出范围。

变量和类型 方法 描述
static int checkFromIndexSize(int fromIndex, int size, int length) 检查是否在子范围从 fromIndex (包括)到 fromIndex + size (不包括)是范围界限内 0 (包括)到 length (不包括)。
static int checkFromToIndex(int fromIndex, int toIndex, int length) 检查是否在子范围从 fromIndex (包括)到 toIndex (不包括)是范围界限内 0 (包括)到 length (不包括)。
static int checkIndex(int index, int length) 检查 index是否在 0 (含)到 length (不包括)范围内。
static boolean equals(Object a, Object b) 返回 true如果参数相等,彼此 false其他。
static int hash(Object… values) 为一系列输入值生成哈希码。
static int hashCode(Object o) 返回非的哈希码 null参数,0为 null的论点。
static boolean isNull(Object obj) 返回 true如果提供的参考是 null ,否则返回 false 。
static boolean nonNull(Object obj) 返回 true如果提供的参考是非 null否则返回 false 。
static T requireNonNull(T obj) 检查指定的对象引用是否不是 null 。
static T requireNonNull(T obj, String message) 检查指定的对象引用是否为null ,如果是,则抛出自定义的NullPointerException 。
static T requireNonNull(T obj, Supplier messageSupplier) 检查指定的对象引用是否为null ,如果是,则抛出自定义的NullPointerException 。
static T requireNonNullElseGet(T obj, Supplier<? extends T> supplier) 如果它是非 null ,则返回第一个参数,否则返回非 null值 supplier.get() 。
static String toString(Object o) 返回调用的结果 toString对于非 null参数, "null"为 null的说法。
static String toString(Object o, String nullDefault) 如果第一个参数不是 null ,则返回在第一个参数上调用 toString的结果,否则返回第二个参数。

java.lang.Math

数字运算

package com.java.math;

public class Demo2 {
    public static void main(String[] args) {
      /*  System.out.println(Math.abs(-100));
        System.out.println(Math.min(100,200));
        System.out.println(Math.max(100,200));
        //四舍五入
        System.out.println(Math.round(100.5));
        System.out.println(Math.round(-100.5));*/
        System.out.println(Math.acos(0.5));
        System.out.println(Math.addExact(10,20));
        System.out.println(Math.asin(0.5));
        System.out.println(Math.atan(0.5));
        System.out.println(Math.ceil(2.2));
        System.out.println(Math.copySign(2.11,3.333333));
        System.out.println(Math.decrementExact(20));
        System.out.println(Math.exp(20));
        System.out.println(Math.expm1(20));
        System.out.println(Math.floor(200.1));
        System.out.println(Math.getExponent(20));
        //返回小于
        System.out.println(Math.ceil(2.2));
        System.out.println();
        System.out.println();
        System.out.println();
        System.out.println();
    }
}

java.text.DateFormat

package com.java.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * DateFormat
 */
public class Demo3 {
    public static void main(String[] args) throws ParseException {
        //DateFormat
        /**
         *  y   :   年
         *  M   :   月
         *  d   :   日
         *  H   :   时
         *  m   :   分
         *  s   :   秒
         *  2020年12月12日 12:12 50
         */
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        //SimpleDateFormat类里面的包format类,使时间格式转换为字符串String格式:yyyy-MM-dd HH:mm:ss
        String text = format.format(date);
        System.out.println(text);
        //SimpleDateFormat类里面的包parse类,使时间字符串String格式:yyyy-MM-dd HH:mm:ss转化为jvm默认格式
        Date date1 = format.parse(text);
        System.out.println(date1);


    }
}

6.java.util.Arrays

用的比较多的有

toString输出数组

sort排序(默认升序)

binarySearch 二分查找

copyof动态扩容

整理成文档,传到博客里

7.java.math.BigDecimal类

概念:

专门进行算数运算,解决小数问题。

通过在控制台运行0.1 + 0.2 ,会发现float 和 double 的运算误差

由于float类型和double类型在运算时可能会有误差,为了实现精度运算,需要借助java.math.BigDecimal类加以描述

常用构造方法

public BigDecimal(String val) {
}

常用方法

下属所有的运算方法,不会影响参与运算的数据本身,运算的结果会被封装为一个新的BigDecimal对象,这个对象会通过return返回出去。

1.	public BigDecimal add(BigDecimal augend)	:	加法运算
2.	public BigDecimal subtract(BigDecimal augend)	:	减法运算
3.	public BigDecimal multiply(BigDecimal augend)	:	乘法运算
4.	public BigDecima divide(BigDecimal augend)	:	除法运算

本节重点整理以上方法、构造方法、value等。

学习常用类库的流程:

1.告诉你有这么一个类,这个类是做什么的,能解决什么样的问题。

2.然后它有什么方法

8.java.util.Data

Date类表示特定的时刻,精度为毫秒。

getTime() 返回GMT格林威治1970年1月1日以来的毫秒数,到目前为止已经是13位的一个数。返回long类型。

方法Date() 表示当前的时间

方法Data(long data) 表示传入一个data毫秒数,与1970年1月1日到这个毫秒数,可传入未来或以前的毫秒数。

9.java.text.DateFormat

作用:将new date()到的时间进行格式化。

DateFormat是一个抽象的类,不能直接去使用,需要使用它的子类SimpleDateFormat

10.java.util.Calendar

Calendar(日历)类是一个抽象类,不能通过new来创建对象,而是通过getInstance()方法,用于解决国际化问题。

11.java.lang.System

System类包含几个有用的类字段和方法。

in “标准输入流”

out “标准输出流”

err "标准"错误输出流

arraycopy 将指定数组中的数组从指定位置开始复制到目标数组的指定位置。

currentTimeMillis() 获取时间戳

12.String 类(绝对重点)

String类表示字符串,Java程序中的任何字符串(例如"abc")都是String的对象。

字符串是不变的,它们的值在创建后无法更改,字符串缓冲区支持可变只服从,因为String对象不可变(内容相同,所它们的内存地址相同),所以可以共享它们。

双引号引起来的内容就是字符串对象。可以直接使用方法。如果没有变量接收,就是匿名对象

字符串常量池

方法区(Methon Area),又称永久代,(Permanent Generation),又称非堆区(Non-Heap space)

方法区是被所有线程共享。
	所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。
	简单说,所有定义的方法的信息都保存在该区域,此区属于共享区间。
	这些区域存储的是:静态变量 + 常量 + 类信息(构造方法/接口定义) + 运行时常量池。
但是,实例变量存在堆内存中,和方法区无关。

以上,只是逻辑上的定义。在HotSpot中,方法区仅仅只是逻辑上的独立,实际上还是包含在Java堆中,也就是说,方式区在物理上属于Java堆区中的一部分,而永久区(Permanent Generation)就是方法去的实现
2、堆(heap)
一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行。

堆 在逻辑上分为三部分(Perm):

新生代(Young Generation,常称为YoungGen)
老年代(old Generation,常称为OldGen、TenuringGen)
永久代(Permanent Generation,常称为PermGen)

2.1、新生区(New/Young Generation)
新生代(Young Generation),常称为YoungGen,位于堆空间;

新生区 又分为Eden区 和 Survior(幸存区)
Eden:新创建的对象
Survior 0、1:经过垃圾回收,但是垃圾回收次数小于15次的对象

2.2、养老代(old Generation)
老年代(Old Generation),常称为oldGen,位于堆空间;

old:垃圾回收次数超过15次,依然存活的对象

2.3、永久区(Permanernt Generation)
永久代(Permanent Generation),常称为PermGen,位于非堆空间。

永久区是一个常驻内存区域,用于存放JDK自身所携带的Class,Interface的源数据,也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM才会释放此区域所占用的内存。

2.3.1、方法区的实现的演变:
Jdk1.7之前:hotspot虚拟机堆方法区的实现为永久代;
Jdk1.8及之后:hotspot移除了永久代用 元空间(Metaspace)
2.3.2、运行时常量池 和 字符串常量池 的变化
JDK1.7之前:
运行时常量池(包含 字符串常量池)存放在方法区,此时hotspot虚拟机对方法去的实现为永久代。

JDK1.7:
字符串常量池 被从方法去拿到了堆中;
运行时常量池 剩下的东西还在 方法区,也就是hotspot中的永久代

JDK1.8:
hotspot移除了永久代,用元空间(Metaspace)取而代之,这时候,
字符串常量池还在堆
运行时常量池 还在方法区,只不过方法去的实现从永久代变成元空间(Metaspace)

字符串拼接能避免就避免,因为会造成很多垃圾

使用StringBuilder.append();//添加 to.String(); 打印 //拼接,节省空间。

如果使用+拼接,那么静态字符串在拼接过程中会参数大量GC无法清除的垃圾(静态永久区中,常量池中)。

package classRoom01;

public class Demo9 {
    public static void main(String[] args) {
        //String text = "123123";
        //System.out.println("123123".substring(1,3));
      /*  String text1 = "锄禾日当午";
        String text2 = "汗滴禾下土";
        String text3 = "窗前明月光";
        text1 = text1 + text2 + text3;
        System.out.println(text1);*/
         //线程不安全的实现
        StringBuilder sb = new StringBuilder();
        //StringBuffer 线程安全的实现
        sb.append("1");
        sb.append("2");
        sb.append("3");
       String text = sb.toString();
        System.out.println(text);
    }
}

package com.java.string;

public class Demo13 {
    public static void main(String[] args){
        //StringBuilder线程不安全的实现
        StringBuffer sb = new StringBuffer();
        //StringBuffer 线程安全的实现
        sb.append("1");
        sb.append("2");
        sb.append("3");
        String text = sb.toString();
        System.out.println(text);

    }
}

charAt

	返回指定索引处的此序列中的char值。  第一个char值位于索引0 ,下一个位于索引1  ,依此类推,如数组索引中所示。 

	index参数必须大于或等于0 ,并且小于此序列的长度。 

	如果索引指定的char值为surrogate ,则返回代理值

Specified by:

charAt在界面 CharSequence

  • 参数
    index - 所需 char值的索引。
  • 结果
    指定索引处的 char值。
  • 异常
    IndexOutOfBoundsException - 如果 index为负数或大于或等于 length() 。
  • 另请参见:
    CharSequence.length()

substring

public String substring(int start, int end)

返回一个新的String ,其中包含当前包含在此序列中的字符的子序列。 子字符串从指定的start开始,并扩展到索引end - 1处的字符。

  • 参数
    start - 起始索引,包括。
    end - 结束索引,独占。
  • 结果
    新的字符串。
  • 异常
    StringIndexOutOfBoundsException - 如果 start或 end为负数或大于 length() ,或 start大于 end 。

缺少文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值