Java API、包装类、Object类、常用类(Arrays类、String类、Math类、Random类、System类……)

1、Java API概述

  • API(Application Programming Interface)应用程序编程接口是对java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员进行使用帮助说明。

2、基本数据类型包装类

  • Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类。
  • 包装类(如:Integer,Double等)这些类封装了一个相应的基本数据类型数值,并为其提供了一系列操作方法。
基本数据类型包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
  • 对于包装类来说,这些类的用途主要包含两种:
    • 作为和基本数据类型对应的类类型存在。
    • 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
  • 包装类常用属性方法
//最大的int型数(231-1)
public static final int MAX_VALUE();

//最小的int型数(-231)
public static final int MIN_VALUE();

        //构造方法
        Integer(int a);

        Integer(String a);

//比较方法
static int compareTo(Integer a);

        boolean equals(Object);

        int max(int a, int b);

        int min(int a, int b);
//转换方法
static toBinaryString(int i);

static String toHexString(int i);

static String toOctalString(int i);

        int intValue();

static int parseInt(String s);

        String toString();

static String toString(int i);

static Integer valueOf(int i);

static Integer valueOf(String s);
  • 装箱和拆箱Auto-boxing/unboxing
  • 装箱
    • 自动将基本数据类型转换为包装器类型;
    • 装箱的时候自动调用的是Integer的valueOf(int)方法。
  • 拆箱
    • 自动将包装器类型转换为基本数据类型;
    • 拆箱的时候自动调用的是Integer的intValue方法。
//装箱 
int a = 12;
Integer b = Integer.valueOf(a);
//拆箱
int c = b.intValue();
int a = 12;
//自动装箱
Integer b = a;
//自动拆箱
int c = b;

3、Object类

  • Object类是所有Java类的祖先(根基类)。每个类都使用 Object 作为 超类(父类)。所有对象(包括数组)都实现这个类的方法。
  • 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
public class Person {
	...
} 

等价于:

public class Person extends Object {
	...
}

(1)、toString方法:把对象以字符串形式显示。

  • Object类中定义有public String toString()方法,其返回值是String类型,描述当前对象的有关信息。
  • 在进行String与其它类型数据的连接操作时(如:System.out.println(“info”+person)),将自动调用该对象类的 toString()方法。
  • 可以根据需要在用户自定义类型中重写toString()方法。

(2)、equals方法:比较对象是否相等 ==

  • Object类中定义有:public boolean equals(Object obj)方法,提供定义对象是否“相等”的逻辑。
  • Object 的equals 方法定义为:x.equals ( y ) ,当 x 和 y是同一个对象的引用时返回true否则返回 false。
  • JDK提供的一些类,如String,Date等,重写了Object的equals方法,调用这些类的equals方法,x.equals (y) ,当x和y所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回true否则返回false。

(3)、hashCode():本地方法 获得对象在内存中的地址值。
(4)、getClass():反射,获得类的Class对象。
(5)、wait():线程等待,释放锁,必须要通过唤醒。
(6)、notify():notifyAll(),唤醒线程。
(7)、clone():对象复制。
(8)、finalize():在对象被定为为垃圾时,真正要回收前,会调用一次finalize(),只会被调用一次。

4、Arrays类

java.util.Arrays类
用于操作数组工具类,里面定义了常见操作数组的静态方法。
(1)、equals 方法

  • 比较两个非同一数组是否相等,而数组本身的equals判断另一个数组是否它本身。
  • 声明:public static boolean equals(type[]a,type[]a2)
  • 参数的类型可以是原生数据类型和引用类型的任意一种类型。
  • 返回:如果两个相等,则返回true,否则返回false

(2)、sort——排序

  • 作用于数组的所有元素
    public static void sort(type[] a)
  • 作用于数组指定范围内的元素
public static void sort(type[] a, int fromIndex(包括),int toIndex(不包括))
  • 将指定的类型(除boolean以外的任意原生数据类型)数组所有元素(或指定范 围内的元素)按数字升序进行排序。
  • object型数组,根据元素的自然顺序,对指定对象数组进行升序排序。(fromIndex==toIndex,则排序范围为空)
  • 自定义对象排序
    • 自定义类实现Comparable接口
    • 重写compareTo方法

(3)、binarySearch——使用二分搜索算法搜索指定数组

  • 声明:
public static int binarySearch(type[] a, type key)
public static int binarySearch(long[] a,int fromIndex,int toIndex,long key)
  • 描述:
    • 使用二分搜索算法搜索指定的type型数组,以获得指定的值。
  • 参数:
    • a - 要搜索的数组。
    • key - 要搜索的值。
    • fromIndex - 要排序的第一个元素的索引(包括)。
    • toIndex - 要排序的最后一个元素的索引(不包括)。
    • type-byte、double、float、object、long、int、short、char
  • 如果key在数组中,则返回搜索值的索引;否则返回-1或者”-“(插入点)。

(4)、toString() 方法

  • 声明:
    public static String toString(type[] a)
  • 描述:返回指定数组内容的字符串表示形式。
  • 基本数组,字符串表示形式由数组的元素列表组成,括在[],相邻元素用“, ”(逗号加空格)分隔。

5、String类、StringBuffer类、StringBuilder类

String类

  • String类:字符串是由多个字符组成的一串数据(字符序列)的字符串常量,java中所有字符串都是String类的实例。
  • 两种创建形式:
    • 第一种:String s = "abc";
      先在栈中创建一个对String类的对象引用变量s,然后去字符串常量池中查找有没有"abc", 如果没有则在常量池中添加”abc”,
      s引用变量指向常量池中 的”abc”,如果常量池中有,则直接指向改地址即可,不用重新创建。
    • 第二种: 一概在堆中创建新对象,值存储在堆内存的对象中。String s = new String("abc");
  • 构造方法
    • public String()
    • public String(String str)
    • public String(byte[] bytes)
    • public String(char[] value)
  • 判断功能
    • boolean equals(Object obj)
    • boolean equalsIgnoreCase(String str)
    • boolean contains(String str)
    • boolean isEmpty()
    • boolean startsWith(String prefix)
    • boolean endsWith(String suffix)
  • 转换功能
    • byte[] getBytes()
    • char[] toCharArray()
    • static String valueOf(char[] chs)
    • String toLowerCase()
    • String toUpperCase()
    • String concat(String str)
    • Stirng[] split(分割符)
  • 替换功能
    • String replace(char old,char new)
    • String replace(String old,String new)
    • replaceAll(String regex, String replacement)
    • replaceFirst(String regex, String replacement)
  • 去除字符串两空格
    • String trim()

StringBuffer类

  • StringBuffer类:我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题。StringBuffer线程安全的可变字符序列。
  • 构造方法
    • public StringBuffer()
    • public StringBuffer(String str)
  • 添加功能
    • public StringBuffer append(String str)
    • public StringBuffer insert(int offset,String str)
  • 删除功能
    • public StringBuffer deleteCharAt(int index)
    • public StringBuffer delete(int start,int end)
  • 替换功能
    • public StringBuffer replace(int start,int end,String str)
  • 反转功能
    • public StringBuffer reverse()
  • 截取功能
    • public String substring(int start)
    • public String substring(int start,int end)
  • 截取功能和前面几个功能的不同
    • 返回值类型是String类型,本身没有发生改变。
  • StringBuilder类功能和StringBuffer功能完全一致, StringBuffer是线程安全的。

StringBuilder类

  • StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。

String类、StringBuffer类、StringBuilder类的区别

  • String:是字符常量,适用于少量的字符串操作的情况。
  • StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。StringBuffer是线程安全的。
  • StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。StringBuilder则没有实现线程安全功能,所以性能略高。

StringBuffer是如何实现线程安全的呢?

  • StringBuffer类中实现的方法:
    在这里插入图片描述
  • StringBuilder类中实现的方法:
    在这里插入图片描述
    StringBuffer类中的方法都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。

6、Math类、Random类、System类

  • java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和 返回值类型一般为double型。
    • abs 绝对值
    • sqrt平方根
    • pow(double a, double b) a的b次幂
    • max(double a, double b)
    • min(double a, double b)
    • random() 返回 0.0 到 1.0 的随机数
    • long round(double a) double型的数据a转换为long型(四舍五入)
  • Random类:此类用于产生随机数
    • 构造方法
      • public Random()
    • 成员方法
      • public int nextInt()
      • public int nextInt(int n)
  • System类:System 类包含一些有用的类字段和方法。它不能被实例化。
    • 成员方法
      • public static void exit(int status)
      • public static long currentTimeMillis()

7、Date类、Calendar类、SimpleDateFormat类

  • Date类:使用Date类代表当前系统时间
    • Date d = new Date();
    • Date d = new Date(long d);
  • Calendar类:Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
    • Calendar c1 = Calendar.getInstance();
    • c1.get(Calendar. YEAR);
  • SimpleDateFormat:日期格式化类
  • 构造方法
SimpleDateFormat(格式);// yyyy-MM-dd
  • 日期转字符串
Date now=new Date();
myFmt.format(now);
  • 字符串转日期
myFmt.parse(2018-02-10);
//字符串日期格式与指定格式必须一致
String s =2018-03-15;
new SimpleDateFormat(“yyyy-MM-dd”);

8、BigInteger、BigDecimal

(1)、BigInteger

  • 在 Java 中,有许多数字处理的类,比如 Integer类,但是Integer类有一定的 局限性。
  • Integer 是 Int 的包装类,int 的最大值为 2^31-1。描述更大的整数数据时,使用Integer数据类型就无法实现了,所以Java中提供了BigInteger 类。
  • BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意精度的整数,也就是说在运算中BigInteger 类型可以准确地表示任何大小的整数值而不会丢失任何信息。
  • BigInteger类位于java.math包中
  • 构造方法
BigInteger(String val) 
BigInteger(byte[] val) ... 
  • 基本运算方法
    add(),subtract(),multiply(),divide()
    (2)、BigDecimal
  • 在计算机中不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去 一定的精确度。
  • 根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近于那个值.
public class test {
    public static void main(String[] args) {
        double a = 1.0 - 0.9;
        double b = 0.8 - 0.7;
        System.out.println(a == b);//输出为false
    }
}
  • Java在java.math包中提供的API类BigDecimal
  • 构造方法
    • BigDecimal(String val)
  • 基本运算方法
    • add(),subtract(),multiply(),divide()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值