常见 API 中会用到的包

  1. java.lang
  2. java.util
  3. java.io
  4. java.sql

    一、Object 类

    1.1 Object 类的基本特点

  • Object 是所有类的父类,位于 java.lang包中
  • 数组也是 Object 类的子类
  • Object 类的常用方法
    • toString()
    • equals()
    • hashCode()
  • Object类在 java.lang 包下,是所有类的根。任何类的对象,都可以调用 Object类中的方法,包括数组对象。

1.2 Object 类 和 Object[] 之间的区别

  • 方法中形参是 Object 类型时,任何类型的参数都可以传进去执行
  • 方法中的形参是 Object[] 类型时,只有对象数组可以传入执行。
  1. public static void arrayTest(Object[] obj){}
  2. public static void main(String[] args) {
  3. int[] array = new int[4];
  4. arrayTest(array); // 报错!!!
  5. }

1.3 Object 类中的常用方法

equals方法与hashCode方法关系

  • 如果两个对象使用equals比较返回true,那么它们的hashCode值- -定要相同
  • 如果两个对象equals比较返回false,那么它们的hashCode值不一定不同覆盖equals,往往需要覆盖hashCode,可以使用Eclipse自动生成,保证equals返回true,则hashCode相同; equals返 回false,则hashCode不同
  • 在Set集合部分有实际应用|

image.png

方法名称 功能
toString方法 toString方法可以将任何一个对象转换成字符串返回,,返回值的生成算法为:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())。
equals方法 Object类中的equals方法,用来比较两个引用的虚地址。当且仅当两个引用在物理上是同一个对象时,返回值为true,否则将返回false。
hashCode方法 获取对象的哈希码值,为16进制

二、包装器类型 (Wrapper类)

  • Java 提供一系列包装类,以便将基础数据类型当做对象进行操作
  • 在 java.lang 包中,对于每个基本数据类型都有一个对应的包装类

2.1 基本数据类型与包装类型一览表

image.png

2.2 包装类型常用方法

  1. xxxx.valueOf() 该方法会把字符数字转换成对应的数据类型 (该方法是一个重载方法,可以把 int 数据转换为 Integer 对象,也可以把字符类型数字转换成 Integer 对象)
    1. xxx 可以为 Integer
    2. xxx 可以为 Short
    3. xxx 可以为 Byte
    4. xxx 可以为 Long 等等
  2. 除了 Boolean 和 Character类以外,其他的包装类都有静态的 parseXxx 方法 (Xxx 代表数据类型)用于将字符串转换成对应的基本数据类型的值
  3. 自动拆箱装箱:基本 —> 包装器 拆:包装器 —> 基本

包装类一班都是 字符串之间的转换

        String s2 = "123";
        int a = Integer.valueOf(s2);
        System.out.println(123 == a);//true

        int i = Integer.parseInt("18"); // 转换成整数
        float f = Float.parseFloat("18.0");

2.3 包装类的装箱与拆箱

装箱:将基本数据类型保存在包装类之中
拆箱:从包装类对象中获取基本数据类型

三、字符串类型

Java String api (Java7)

3.1 String

  • java.lang 包
  • String 两种创建方式
  • String 常用方法

3.1.1 java.lang 包

java.lang 包是 java 内置的一个基础包,其中包含了一系列程序中常要用到的类 该包是默认导出的,无序在程序中显式说明

3.1.2 String 的特征

  1. 该方法是静态的,也就是说无法被修改

    Strings are constant; their values cannot be changed after they are created. (这是来自官方文档的原话)

因为 是被 final 关键字修饰

  1. String 和 char[] 其实是等价的
public class Test{
     public static void main(String[] args) {
         String s = "abc";
        char[] data = {'a','b','c'};
        String s1 = new String(data);
    }
}

3.1.3 String 的创建方式

public class Test {
     public static void main(String[] args) {
            // 直接创建
            String str = "Hello World";

            // 使用构造方法
            String str1 = new String("Hello World"); 
            //String 是一个类,这就能解释为什么 String 不属于基本类型

            /**
            * 两者区别:
            * 使用构造方法每次创建的都是一个 String 对象
            * 使用直接赋值的方式创建两个相同的对象,两者虚地址是一样的,实际上代表是相同的字符串
            */
    }
}

3.1.4 String 的内置方法

这里会慢慢更新一些常用方法,如果想查阅更多其它方法的,可以移步到官方文档

image.png

补充:

  1. 字符串替换,使用 replace(oldString, newString);
  2. 字符串的构造方法,转换 bytes[] 和 char[] 类型的数组

小贴士:为什么字符串比较不使用 ‘==’, 因为 ‘==’ 比较的是 虚地址,equalsIgnoreCase() 会忽略大小写比较字符串

public class Test {
     public static void main(String[] args) {
            // 直接创建
            String s1 = "Hello World";
            String s2 = "Hello World";
            System.out.print(s1 == s2); // 返回 true , 因为使用 等号赋值,比较的是值
            // 使用构造方法
            String str1 = new String("Hello World"); 
            String str2 = new String("Hello World");
            System.out.print(str1 == str2); // 返回 false  虚地址不一样
            System.out.print(str1.equals(str2)); // 返回 true, 这时候比较的就是值了

            // 所以一般使用 equals 方法比较字符串的值很常用 (equalsIgnoreCase 是忽略大小写比较)

    }
}

3.1.5 String 总结

  • 理解 Java.lang 包
  • String 是引用数据类型
  • String 的两种创建方式
  • String 的一些常用方法
  • String 的不可变性 (被 final 修饰的都不可变)

    3.2 StringBuffer

  • StringBuffer 类用于表示可以修改的字符串,称为 字符串缓冲对象

  • 使用运算符的字符串将 自动创建字符串缓冲对象
    • 例如 str1+str2, 实际上是把 str1 和 str2 都创建为 StringBuffer 类对象
  • StringBuffer 的出现是解决 String 不可修改,它提供了字符可变序列
  • StringBuffer 和 String 是同等类,唯一区别就是可以更改
  • 线程安全
  • 效率相对 StringBuilder 低,因为使用一个线程处理

3.2.1 StringBuffer 的构造方法

构造方法 说明
StringBuffer() 创建一个空的 StringBuffer对象,默认保留16个字符的缓存空间
StringBuffer(String str) 根据字符串 str 的内容创建 StringBuffer 对象,并默认保留 16个字符的缓存空间
StringBuffer(int capacity) 创建一个空的 StringBuffer 对象,缓冲空间大小由 capacity 决定

3.2.2 StringBuffer类常用方法

image.png

3.2.3 示例

public class Test {
    public static void main(String[] args) {
        StringBuffer sbf = new StringBuffer("Java");
        sbf.append(" Java8"); // 连接字符串
        System.out.println(sbf);

        sbf.insert(0, "aaa");// 插入字符串
        System.out.println(sbf);

        sbf.reverse(); // 字符串反转
        System.out.println(sbf);
    }
}

image.png

3.3 StringBuilder

  • JDK 1.5 之后,提供的一个新的在字符串缓冲区
  • 提供了和 StrngBuilder 相似的 API
  • 非线程安全
  • 单线程下效率比 StringBuffer 高

四、 Math 库学习使用

4.1 Math 类

  • 位于 java.lang 包中
  • 数学类定义了许多数学函数,如sin、cos、exp 、abs等。Math类是- -个工具类,它在解决与数学有关的一-些问题有着非常重要的作用。
  • 这个类有两个静态属性: E和PI。 E代表数学中的e2.7182818, 而 PI 代表圆周率3.1415926。
  • Math类中的方法都是static方法,调用静态方法可以直接使用类名.方法名来调用,不需要先创建类的一一个对象

4.2 Math 方法

  • Math.abs求绝对值
  • Math.sin正弦函数Math.asin反正弦函数
  • Math.cos余弦函数Math.acos反余弦函数
  • Math.tan正切函数Math.atan反正切函数
  • Math.toDegrees弧度转化为角度
  • Math.toRadians角度转化为弧度
  • Math.ceil得到不小于某数的最大整数
  • Math.floor得到不大于某数的最大整数
  • Math.max求两数中最大
  • Math.min求两数中最小
  • Math.sqrt求开方
  • Math. pow求某数的任意次方,抛出ArithmeticException处理溢出异常
  • Math.exp求e的任意次方
  • Math.log10以10为底的对数
  • Math.log自然对数
  • Math.rint求距离某数最近的整数(可能比某数大,也可能比它小)
  • Math.round同上,返回int型或者long型(上一个函数返回double型)
  • Math.random返回0,1之间的一个随机数

五、日历,日期,时间库使用

  • Date 类
    • 表示特定的瞬间,精确到毫秒
  • DateFormat类(抽象类)
    • 抽象类,以语言无挂你的方式格式化并分析日期或时间
  • SimpleDateFormat类 (DateFormat 的子类)
    • 与语言环境相关的方式来格式化和分析日期的具体类
  • Calendar 类
    • 抽象类,为铁定瞬间与一组注入 YEAR、MONTH、DAY_OF_MONTH、HOUR等日历之间的转换提供了一些方法,并未操作日历手段 (如获得下星期的日期)提供了一些方法
public class TestDate {
    public static void main(String[] args) throws ParseException {
        // 创建日期
        Date date = new Date();
        Calendar c = Calendar.getInstance();
        c.set(2020,3,31);

        // 日期格式化
        DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println(df1.format(date));

        DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日hh:mm:ss", Locale.CHINA);
        System.out.println(df2.format(date));

        // 将符合格式的字符串转换成 Date 类型对象
        String d = "2013年4月25日06:22:38";
        Date birthday = df2.parse(d);
        System.out.println("birthday:"+birthday);

        // 使用 Calendar 类获取日期中的年月日等
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        System.out.println("年份:"+calendar.get(Calendar.YEAR)+" 月份:"+calendar.get(Calendar.MONTH));

        // 比较日期先后
        Date date1 = df2.parse("2019年1月11日06:45:32");
        Date date2 = df2.parse("2019年1月12日06:45:32");

        int flag = date1.compareTo(date2);
        System.out.println(flag);
    }
}

image.png

  • Java 中日期的常见处理

    • 创建日期
    • 日期格式化显示
    • 日期的转换(主要是字符串之间的相互转换)
    • 日期中年、月、日、时、分、秒、星期、月份等获取
    • 日期大小比较,日期的加减

      六、大数的处理

      6.1 BigInteger类

  • BigInteger类使用的原因

    • 8种基本数据类型中,long类型所能表示的整数范围是.最大的,但还是有限的。
    • 为了解决这些问题,Java中专门提供了用来进行不限制大小的整数计算的类- - - -java.math.BigInteger。
    • 该类可以对任意大小的整数进行操作,不过在进行计算的时候是通过方法调用进行的,而不是使用算术运算符
  • Big Integer类—构造方法
    • BigInteger(byte[] val):使用一个byte数组 表示来构造一个大整数,
    • BigInteger(int signum, byte[] magnitude):用一个byte数组magnitude来构造大整数,用signum的-1, 0,1来表示负,零,正。
    • BigInteger(int bitLength, int certainty, Random rnd):构造一个随机产生的,正的,指定长度的,可能是素数的大整数,参数certainty指明要进行多少次素数测试.
    • BigInteger(int numBits, Random rnd):构造一个随机产生的大整数,范围在0到2^numBits- 1之间.
    • BigInteger(String val):转换十进制的字符串表达方式为BigInteger这个字符串由一系列的10进制数字和可选择的负号组成符转数字的映射由Character.digit实现这个字符串不能包含任意无关字符(例如:空格)
    • BigInteger(String val, int radix) :转换字符串的表达式为指定(radix)进制的大整数这个字符串由一系列的指定进制(radix)的数字组成,任意跟上负号字符转数字的映射由Character.digit实现同样,这个字符串不能包含任意无关字符(例如:空格)
  • BigInteger的方法—四则运算实现
    • add(Biglnteger val)返回其值为(this + val)的BigInteger.
    • subtract(BigInteger val)返回其值为(this - val)的 igInteger。
    • multiply(BigInteger val)返回其值为(this * val)的BigInteger。
    • divide(BigInteger val)返回其值为(this / val)的BigInteger.
    • remainder(BigInteger val)返回其值为(this % val)的BigInteger
    • mod(BigInteger m)返回其值为(this mod m)的BigInteger。