1. 包装类
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
- 八个包装类都在java.lang 包下 不需要import
- 6个与数字相关的 默认的继承父类是 Number
- 8个包装类都实现了Serializable Comparable
- 8个包装类都有带自己对应的构造方法,7个有构造方法重载(除了Charactor),带了String
- 6个包装了继承了 java.lang.Number xxxValue() 将一个包装类类型转化为对应的基本类型(拆箱)
笔试
Integer i1=10;//自动装箱
//i1=128
Integer i2=10;
//i2=128 i1==i2 false
Integer i3=new Integer(10);//在堆内存中开辟空间
Integer i4=new Integer(10);
//在Integer类加载时,自己有一个静态空间,内存储大小为Integer[] -128~127的对象 256个对象
//如果使用的对象范围在这个之内,直接取静态区中找对应的对象。如果超过了-128~127 则创建一个新的integer对象
System.out.println(i1==i2);//true
System.out.println(i1==i3);//false
System.out.println(i3==i4);//false
System.out.println(i1.equals(i2));//true
System.out.println(i1.equals(i3));//true
System.out.println(i3.equals(i4));//true
(略)查看API
2. 数学类
- java.lang
- Math的构造方法hiprivate 不能直接调用创建对象 (由于Math的方法 属性都是static)
2.1 常用属性
PI E
2.2 常用方法:
abs():绝对值
ceil():向上取整
floor():向下取整
rint():临近的整数 如果两边一样(1.5 返回 2)则返回偶数
round():四舍五入
Math.pow(a,b):ab
double sqrt(a):a开根
random():[0,1)产生之间的double
(略)查看API
2.3 Random
- Random类 默认继承Object
构造函数:- Random():创建一个新的随机数生成器
- Random(long seed) 使用单个 long种子创建一个新的随机数生成器。
Random r=new Random();
int v3=r.nextInt();//随机产生一个整数 -2^32~2^32-1
int v4=r.nextInt(10);//范围0~10 [0,10)的int broud必须为整数 否则异常 ILLegalArgumentException
3. float v5=r.nextFloat();//[0.0,1.0)
4. r.nextBoolean;//随机产生 true false
- UUID类
默认继承Object
UUID uuid=UUID.randomUUID();//生成一个32位 每一个位16进制的数 最后 为一个String (可以数据库key)
2.4 BigInteger 类
超过了long取值范围 使用数组来存储一些元素
import java.math.BigInteger
利用带String 创建对象`BigInteger bigInteger=new BigInteger("123");`
/**
* 计算给定数字的阶乘
*/
public BigInteger factorial(int num){
BigInteger result=new BigInteger("1");
for(int i=1;i<=num;i++){
result=result.multiply(new BigInteger(i+""));
}
return result;
}
2.5 BigDecimal
- 超过了double取值范围
- 可以处理小数之后的位数
2.6 DecimalFormat
- 只能四舍五入
- 小数点之前之后的位数都能处理 格式化
- import java.text.DecimalFormat;
DecimalFormat df=new DecimalFormat("##.00");
String vv=df.format(123.456);
System.out.println(vv);//0必须 #可有可无 默认四舍五入 123.46
3. 日期相关类
3.1 Date
- 通常 import java.util.Date;
long time= System.currentTimeMillis();//当前系统时间的毫秒值 可以做一个对程序的执行效率
System.out.println(time);
Date date1=new Date();//默认时当前系统时间
Date date2=new Date(1558317538831L);
System.out.println(date1);
System.out.println(date2);
System.out.println(date1.before(date2));//判断date1是否在date2之前
System.out.println(date1.after(date2));//判断date1是否在date2之后
System.out.println(date1.getTime());//获取Time 或者setTime
3.1 DateFormat
- import java.text.DateFormat;
- 是一个抽象类 不能直接new一个对象 可以通过子类来使用
- 调用带String的构造方法1创建对象
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//处理日期格式
//DateFormat
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String v=dateFormat.format(System.currentTimeMillis());
System.out.println(v);
3.2 Calendar
- import java.util.Calendar
- 默认继承Object 抽象的
Calendar calendar=Calendar.getInstance();//默认可以构造系统当前时间的对象
Calendar calendar=Calendar.getInstance();//默认可以构造系统当前时间的对象
System.out.println(calendar.get(Calendar.YEAR));//有一个date属性 可以获取年月日--
System.out.println(calendar.get(Calendar.MONTH));//MONTH从0开始
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
3.3 TimeZone
- java.util
- 可以通过 calender对象.getTimeZone()来获取 、、 或者TimeZone.getDefault()
- getID():获取时区ID号
- getDisplayName()
System.out.println(calendar.getTimeZone().getDisplayName()+" "+calendar.getTimeZone().getID() );
(略)查看API
4. 字符串
4.1 String
- java.lang
- String是一个特殊的引用数据类型 对象
- 实现了三个接口 Serializable CharSequence Comparable
4.1.1 笔试String特点
String s1="abc";//"abc"对象 存储在常量区 自动创建的
String s2="abc";
String s3=new String("abc");//堆new的对象
String s4=new String("abc");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//false
System.out.println(s3==s4);//false
System.out.println(s1.equals(s2));//true 把继承于Object的equals方法进行重写了改成了字符集
System.out.println(s1.equals(s3));//true
System.out.println(s3.equals(s4));//true
4.1.2 不可变特性
- public final class String
private final char value[]
;//存储String中每一个字符 final最终的 不能改变的 数组的地址不能改变 数组长度不能改变 数组中的内容也不能改变private
- 长度不可变:final修饰的数组 数组长度本身不能改变 final修饰的数组地址不能改变
- 内容不可变:private 修饰 不能再类外访问
4.1.3 String常用的方法
1.public boolean equals(Object anObject)
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
- public int hashCode() 重写了 h = 31 * h + val[i];
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
- public int compareTo(String anotherString) 实现自 Comparable
- 先找寻两个字符串长度较短的那个作为循环比较次数 按照字典索引的顺序比较
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
- 挨个比较元素 return c1 - c2;
- 如果循环之后发现字符都一样 直接使用
return len1 - len2;
- 返回0表示两个字符串相等
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
- 重写了 public String toString()
public String toString() {
return this;
}
- concat()拼接
- contains(),判断包含
- indexOf:找寻指定元素第一次出现的位置
charAt() codePointAt() indexOf() lastIndexOf() substring() spilt() trim() getBytes() concat() tocharArray() matches()
toUpperCase() toLowerCase() startsWith() endsWith() isEmpty()
(略)查看API
4.2 StringBuffer StringBuilder
- java.lang 实现接口Serializable CharSequence Appendable 没有compareTo() 多了1一个append
- 特性 可变字符串
- 构建方式:无参构造 有参数构造
//1.无参构造 默认构建一个默认长度为16个空间的对象 char[]
StringBuilder builder1=new StringBuilder();
//2.利用给定的元素 构建一个没有字符的字符串缓冲区和指定的初始容量。 自定义长度空间对象 char[]
StringBuilder builder2=new StringBuilder(20);
//3.利用带参数的构造方法 默认数组长度字符串长度+16个 char[]
StringBuilder builder3=new StringBuilder("abc");
//4.
- append() 在频繁的拼接字符串时可以用它
- capacity() 字符串底层char[]的容量
- length() 字符串有效元素个数(长度)
- String subString() 返回值String
- StringBuilder delete() 删除 不用接受返回就可以看到效果
4.3==String StringBuffer StringBuilder==
- String不可变字符串:有一个 comparable接口 长度内容不可变 有 concat()toUppeCase() comparaTo()
- StringBuffer StringBuilder:有一个Appendable接口 可变字符串 没有final修饰 底层可以进行数组扩容 有一些String没有的方法 append() insert() delete() reverse();
- StringBuffer StringBuilder区别:方法使用差不多
StringBuffer:(synchronized修饰 同步的。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。 )线程安全 线程同步 安全性比较高 执行效率相对较低
StringBuilder:线程非同步 安全性较低 执行效率较高
4.4 正则表达式
带有一定规范的表达式 匹配字符串格式
- 字符串数据格式校验 boolean= str.matches(“regex”)
- 字符串的拆分 替换replece split
- 字符串查找 Pattern模式 Matcher匹配器
自己查看API java.util.regex Pattern
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
//matches("写格式")
boolean res=str.matches("a[abc]");
System.out.println(res);
/*
[abc]:abc中其中一个
[^abc]:不能是abc其中一个
[a-zA-Z]:表示a~z A~Z范围内
[a-z&&[^bc]] :a-z中一个 但是不能是b c
. :表示任意一个字符
\d:[0-9]
\D:[^0-9]
\s:留白 一个空格 回车 换行
\S :非留白
\w:word单词 [0-9A-Za-z]
\W:非单词
描述固定字符的出现次数
*/