API(Application Programming Interface)
1.包装类
Java是面向对象的语言,但其中存在基本类型,违背了面向对象的思想。
包装类是基本类型与引用类型之间交换的桥梁
类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
(1)类所在的包
java.lang,可以省略不写,所以不需要导包,直接拿来用就行。
(2)类的关系
前6个与数字相关的都默认继承父类Number。8个包装类都实现了Serializable, Comparable接口
(3)是否可以创建对象、调用
8个包装类都带有自己对应类型参数的构造方法
除了Character都存在构造方法重载,带String类型
Numer xxxvalue(); 将一个包装类类型转换为对应的基本类型
1 |
|
类型转化:
1 | int value = Integer.parseInt("123"); |
1 |
(4)笔试中出现的问题
1 | Integer i1 = 10;//Integer类加载时,自己的静态空间内有一个Integer[] -128----127范围的对象 |
==号引用类型比较的是变量空间内存的内容(地址引用),如果比较的为基本类型,则比较的是变量中存储的值
euqals()被重写,比较的为两对象的值
:blonde_man:什么情况?
1 | Integer i1 = 1000; |
10包装成Integer对象,在静态元素区中,当为1000时,范围超出范围,则在堆内存中new 新的对象,则 ==比较后为false
2.数学相关
1.所属的包
java.lang
2.Math构造方法是私有的,我们不能直接调用对象
3.由于Math中提供的属性及方法都是static,所以不需要创建对象
4.
1 | random();0。0-1.0之间的随机数(左闭右开) |
Math.random()计算小数时精确程度可能有所损失:
1 | (Math.random() * 6) + 5; |
Random类
1.所属的包
java.util,使用时需要导入
2.没有任何继承关系,默认继承Object类
3.查找构造方法–》如何创建对象
1 | Random r = new Random(); |
4.类中提供的常用方法
1 | int result = r.nextInt(0);//规定边界 |
1 | float f = r.nextFloat();//随机小数 |
1 | double f = r.nextDouble() + r.nextInt(6) + 5;//随机小数 |
nextBoolean:随机产生bool值
UUID类:
1.所属的包
java.util,使用时需要导入
2.没有任何继承关系,默认继承Object类
3.查找构造方法–》如何创建对象
构造方法有,但没有无参数的,通常不会创建对象
1 | UUID uuid = UUID.randomUUID();//随机生成的UUID |
BigInteger类:大整数
1.所属的包
java.math,使用时需要导入
2.继承自Number
3.如何创建对象?
提供的构造方法全是带参数的,通常利用带String参数的创建这个类的对象
4.类中常用方法:做四则运算
1 | BigInteger bigInteger1 = new BigInteger("5645453456456");BigInteger bigInteger2 = new BigInteger("1");bigInteger1.add(bigInteger2);// + |
1 | BigInteger bigInteger1 = new BigInteger("5645453456456");BigInteger bigInteger2 = new BigInteger("42453455343543543");BigInteger result = bigInteger1.multiply(bigInteger2); |
BigDecima类:长的浮点数
1.所属包与BigInteger一样
2.继承自Number
3.如何创建对象?
提供的构造方法全是带参数的,通常利用带String参数的创建这个类的对象
4.类中常用方法:做四则运算
1 | BigDecimal bigInteger1 = new BigDecimal("5645453456456.1");BigDecimal bigInteger2 = new BigDecimal("42453455343543543");BigDecimal result = bigInteger1.multiply(bigInteger2); |
关于小数部分的处理:
1 | BigDecimal bigDecimal = new BigDecimal("123.4567"); |
DecimalFormat:
1.所属的包
java.text,使用时需要引入
2.通过String参数的构造方法创建一个格式化对象 0、#
3.调用format方法将一个小数格式化一个字符串
1 | DecimalFormat decimalFormat = new DecimalFormat("000.##"); |
3.日期相关
1 | long m =System.currentTimeMillis();//当前时间的毫秒值(1970-1-1 00:00:00) |
Date类:
1.通常使用的是java.util包,不止一个包有,需要导包
2.创建对象
通常使用无参数的构造方法或者带long类型(毫秒)的
3.
1 | Date date = new Date(); |
1 | long time = System.currentTimeMillis(); |
1 | long time = System.currentTimeMillis(); |
DateFormat类(日期格式化):
1.所属包java.text,需要导包使用
2.此类是一个抽象类,不能创建对象,通过子类来使用
3.SimpleDateFormat类,子类
1 | Date date1 = new Date(); |
Calendar类:
1.所属的包为java.util包,需要导包
2.创建对象
有构造方法,是用protected修饰的,通常访问不到。
调用默认的getInstance()方法,构建系统当前时间的Calendar对象
3.常用方法
after()、before()、setTime()、getTime()、
1 | Calendar m = Calendar.getInstance(); |
1 | Calendar m = Calendar.getInstance(); |
*4.字符串相关
String类:
1.所属的包为java.lang,无需导入
2.找寻构造方法创建对象
String是非常特殊的引用数据类型,可以向基本类型一样赋值
(1)直接将字符串常量赋值给a,(直接把引用字符串常量池)
String a = “123”;
(2)创建对象(在堆内存中创建新的对象空间)
String a = new String();//默认为空串
String a = new String(“123”);
1 | byte[] value=new byte[]{65,97,48};//创建byte数组 |
1 | char[] value=new char[]{'a','p','c'};//创建char数组 |
3.String类的特性
没有任何继承关系,实现了3个接口
*不可变特性:
在String类中包含一个字符数组
private final char[] value;//存储String中的每个字符
final->指向的空间不能改变,即地址不让改变,数组的长度本身不让改变
private->不能在类的外部访问,即数组中的内容无法改变
不可变特性体现 :长度及内容不可改变
*5.String类中的常用方法
(1)boolean equals(Object obj);//继承自Object类,String进行了重写,
(2)int hashCode();//
1 | public int hashCode() { |
(3)int = compareTo(String str);//实现自Comparable接口
1 | str1.compareTo(str2); |
按照两个字符串中长度较短的那个作为比较循环的次数,挨个比较元素
str1[i]-str2[i];
循环内如果有结果(差值不为0)直接出结果;如果循环过后发现比较的字符都一样,直接用长度减(len1-len2)
返回0表示两个字符相等
(4)String = toString();//继承自Object,重写,不再输出类名@hashCode
现在输出的字符串的字面值
(5)char = charAt(int index);//返回给定index对应位置的那个字符
(6)int = codePointAt(int index);//返回给定index对应位置的那个字符对应的code码
(7)int = length();//返回字符串的长度
(8)String = concat(String);//将给定的字符串拼接在当前字符串之后
(9)boolean = contains(CharSequence s);//判断给定的s是否在字符串中
1 | boolean a = str1.contains("23"); |
(10)boolean = startsWith(String prefix)/endsWith(String suffix):判断是否以这个字符串开头/结尾
1 | boolean a = str1.startsWith("12"); |
(11)getBytes()/toCharArray():将当前的字符串转化为数组。不同的是一个返回值为byte[],另一个为char[]
1 | byte[] value = new byte[]{65, 97, 48}; |
(12)int = indexOf():四个。找寻给定的元素在字符串中第一次出现的索引位置,返回值为下标,不存在返回-1
int = lastIndexOf():四个。找寻给定的元素在字符串中最后一次出现的索引位置,不存在返回-1
(13)boolean = isEmpty():判断字符串是否为空,(是否为空串,而不是null)
(14)replace()/replaceAll():将给定的字符串替换成另外的字符串
(15)split(String regex【,int limit】):可以添加正则表达式。按照给定的表达式将原来的字符串拆开
6.笔试中常见的问题
1 | String s1 = "abc"; |
将字符存储在char数组中,String对象存放在常量区中。
new String()存放在堆内存中
equals方法首先比较的为地址,地址相同值肯定相同,返回true,不同时比较值,值相同返回true,比较字符值
1 | ==(栈内存变量空间中的内容),也可以比较基本类型,也可以比较引用类型(比较的为地址)。 |
1 | String str = "a" + "b" + "c" + "d"; |
+与concat();
+不断创建新的对象
concat()不断操纵自己对象的小数组进行扩容,但这个过程没有产生新的对象,所以效率更高
StringBuffer对象,拼接效率非常高