常见 API 中会用到的包
- Object 是所有类的父类,位于 java.lang包中
- 数组也是 Object 类的子类
- Object 类的常用方法
- toString()
- equals()
- hashCode()
- Object类在 java.lang 包下,是所有类的根。任何类的对象,都可以调用 Object类中的方法,包括数组对象。
1.2 Object 类 和 Object[] 之间的区别
- 方法中形参是 Object 类型时,任何类型的参数都可以传进去执行
- 方法中的形参是 Object[] 类型时,只有对象数组可以传入执行。
public static void arrayTest(Object[] obj){}
public static void main(String[] args) {
int[] array = new int[4];
arrayTest(array); // 报错!!!
}
1.3 Object 类中的常用方法
equals方法与hashCode方法关系
- 如果两个对象使用equals比较返回true,那么它们的hashCode值- -定要相同
- 如果两个对象equals比较返回false,那么它们的hashCode值不一定不同覆盖equals,往往需要覆盖hashCode,可以使用Eclipse自动生成,保证equals返回true,则hashCode相同; equals返 回false,则hashCode不同
- 在Set集合部分有实际应用|
方法名称 | 功能 |
---|---|
toString方法 | toString方法可以将任何一个对象转换成字符串返回,,返回值的生成算法为: getClass().getName() + ‘@’ + Integer.toHexString(hashCode())。 |
equals方法 | Object类中的equals方法,用来比较两个引用的虚地址。当且仅当两个引用在物理上是同一个对象时,返回值为true,否则将返回false。 |
hashCode方法 | 获取对象的哈希码值,为16进制 |
二、包装器类型 (Wrapper类)
- Java 提供一系列包装类,以便将基础数据类型当做对象进行操作
- 在 java.lang 包中,对于每个基本数据类型都有一个对应的包装类
2.1 基本数据类型与包装类型一览表
2.2 包装类型常用方法
- xxxx.valueOf() 该方法会把字符数字转换成对应的数据类型 (该方法是一个重载方法,可以把 int 数据转换为 Integer 对象,也可以把字符类型数字转换成 Integer 对象)
- xxx 可以为 Integer
- xxx 可以为 Short
- xxx 可以为 Byte
- xxx 可以为 Long 等等
- 除了 Boolean 和 Character类以外,其他的包装类都有静态的 parseXxx 方法 (Xxx 代表数据类型)用于将字符串转换成对应的基本数据类型的值
- 自动拆箱装箱:基本 —> 包装器 拆:包装器 —> 基本
包装类一班都是 字符串之间的转换
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 包装类的装箱与拆箱
装箱:将基本数据类型保存在包装类之中
拆箱:从包装类对象中获取基本数据类型
三、字符串类型
3.1 String
- java.lang 包
- String 两种创建方式
- String 常用方法
3.1.1 java.lang 包
java.lang 包是 java 内置的一个基础包,其中包含了一系列程序中常要用到的类 该包是默认导出的,无序在程序中显式说明
3.1.2 String 的特征
- 该方法是静态的,也就是说无法被修改
Strings are constant; their values cannot be changed after they are created. (这是来自官方文档的原话)
因为 是被 final 关键字修饰
- 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 的内置方法
这里会慢慢更新一些常用方法,如果想查阅更多其它方法的,可以移步到官方文档
补充:
- 字符串替换,使用 replace(oldString, newString);
- 字符串的构造方法,转换 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类常用方法
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);
}
}
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);
}
}
Java 中日期的常见处理
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。