1、Java API概述
- API(Application Programming Interface)应用程序编程接口是对java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员进行使用帮助说明。
2、基本数据类型包装类
- Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类。
- 包装类(如:Integer,Double等)这些类封装了一个相应的基本数据类型数值,并为其提供了一系列操作方法。
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
- 对于包装类来说,这些类的用途主要包含两种:
- 作为和基本数据类型对应的类类型存在。
- 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
- 包装类常用属性方法
//最大的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()