API (Application Programming Interface) :应用程序编程接口
Java API :指的就是 JDK 中提供的各种功能的 Java类
这些类将底层的实现封装了起来,不需要关心这些类是如何实现的,只需要学习这些类如何使用即可
一、包装类
基本数据类型不能置为null, 不能调用方法(因为在常量池中) //泛型就不能用基本数据类型
因此引入包括类 使其成为一个类,变成引用数据类型
1.分类
基本数据类型和包装类的对应
byte -------Byte
short -------Short
int -------Integer
long -------Long
float -------Float
double -------Double
char -------Character
boolean ------Boolean
2.拆箱装箱
- 装箱:把基本数据类型包装到类中
- 拆箱: 在包装类中取出基本类型的数据
JDK1.5开始基本数据类和包装类之间可以自动转换
3.Character之外的通用方法
Integer i=89;
1:toString() 字符串表示
i.toString()
2:compareTo() 比较
i.compareTo(88);
//得到最大值 Double类型使用时 大于返回1 小于返回-1
3:equals 相等
i.equals(89);//true
4:valueOf() 静态方法 解析成什么类型
Integer.valueOf("9") //解析成int类型 除了char都可以用
底层:int number =Integer.parseInt("9")
5.基本类型转String类型
加""包裹
5.Stringl类型转基本类型
除了Character之外所有包装类都有(byte short int long float double boolean)
static xxx ParseXxx(String) 将String类型转换为xxx类型
4.Character常用方法
方法 | 说明 |
---|---|
isDigit() | 确定字符是否为 0 至 9 之间的数字 |
isLetter() | 确定字符是否为字母 |
isLowerCase() | 确定字符是否为小写形式 |
isUpperCase() | 确定字符是否为大写形式 |
isSpace() | 确定字符是否为空格或换行符(此方法已过时) |
isSpaceChar() | 确定字符是否为空格 |
二、Object类
java.lang.Object
java语言中类层次结构的根类 超类
是所有类的父类,所有类都直接或者间接的继承自该类
1.常用方法
1. int hashCode()
返回该对象的哈希 码值 生成地址的定长的散列
2. String toString() 返回该对象的字符串形式、打印对象的信息
//所有类都继承了object类,建议重写toString方法
//不重写的自定义类型返回的是地址值
3. boolean equals(Object obj) 判断是否同一、比较地址值
1.基本数据类型比较的是值
2.引用数据类型比较的是地址值
3.String重写了hashCode() 和equals()方法,equals()判断的是byte[]数组的值
4. protected类型 finalize() throws Throwable
定义回收当前对象时所需完成的资源释放工作
//手动清空对象时 (对象置成空之后一定时间不用会被回收)
Student stu =new Student;
stu =null;
System.gc ();手动调用垃圾回收机制的方法
2.举例 Student重写equals()
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null||getClass()!=obj.getClass()) {
//getClass()!=obj.getClass()用java反射技术判断obj是否是Student类型
//等价于obj instanceof Student
return false;
}
if (obj instanceof Student) {
Student st = (Student) obj;
boolean b = this.name.equals(st.name);
return b;
}
return false;
}
3.Objects工具类
JDK7开始,添加了一个工具类Objects 提供了一些方法来操作对象
- 这些方法是null-save(空指针安全)或者null-tolerant(空指针容忍),不会抛出空指针异常
- 用于计算对象的hashcode、返回对象的字符串形式、比较两个对象
- 其equals底层自己判断null的情况,增加了健壮性的判断
static <T> TrequireNonNull(T obj){
if(obj==null)
throw new NullPointerException();
return obj;
}
4.Comparator和Compable的区别
Comparable :实现类自己(this)和参数比较,自己需要实现Comparable接口重写compareTo()方法
Comparator :相当于找一个第三方的裁判比较两个
三、System类
java.lang.System
- 作用:获取与系统相关的信息 和操作
1.常用方法
1.static exit(0);//退出虚拟机的状态
2.static long currentTimeMillis();//获得系统的毫秒值
3.static arraycopy(Object src1 ,int index1, Object src2 ,int index2, int length )
源数组 copy起始位置 目标数组 copy到的起始位置 copy长度
将数组中指定的数据拷贝到另一个数组
4. System.in 标准输入,表示键盘
System.out 标准输出,表示显示器
四、Runtime类
- Runtime 执行外部可运行文件 可直接访问运行时资源
- 单例模式
- getRuntime() 获得实例
常用方法
exec()执行外部命令
Runtime time =Runtime.getRuntime();
time.exec("D:\PanDownload\eclipse\eclipse.exe");//打开eclipse
五、时期时间类
1.Date类
java.util.Date
表示特定的瞬间,毫秒值
- 构造方法
1.public Date()
分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
2.public Date(long date)
分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
//传递毫秒值 把毫秒转化为Date
- 常用的成员方法
1.long getTime() 把日期转为毫秒值
long System.currentTimeMillis();//获得系统的毫秒值
2.boolean after()
boolean before() 判断在指定时间之前 之后
//boolean b =date.after(date1);
2.DateFormat抽象类
java.text.DateFormat
是时间/日期格式化子类的抽象类
完成日期和文本之间的转换,也就是可以在Date对象和String之间进行来回转换
- 概念
格式化:Date对象转换为String对象
解析:String对象转成Date对象
//格式化 日期转文本
解析 文本转日期 - 成员方法
1.String format(Date date)
按照指定的模式把Date日期格式化为符合模式的字符串
2. Date parse(String str)
把符合模式的字符串解析为Date日期
- 使用
DateFormat是一个抽象类,无法直接创建对象使用,可以使用DateFormat的子类
java.text.SimpleDateFormat extends DateFormat
1.使用方法
1. SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat
2.参数 String pattern:传递指定的模式
区分大小写
y-----年
M-----月
d-----日
H-----时(24小时模式) h-----时(12小时模式)
m-----分
s-----秒
写对应的模式,会把模式替换为对应的日期时间
"yyyy-MM-dd HH:mm:ss"
"yyyy年MM月dd日 HH:mm:ss"
2.步骤举例
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
//格式化:从 Date 到 String
Date d = new Date();
// SimpleDateFormat sdf = new SimpleDateFormat();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
System.out.println("--------");
//从 String 到 Date
String ss = "2048-08-09 11:11:11";
//ParseException
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(ss);
System.out.println(dd);
}
3.注意事项
public Date parse(String str) throws ParseException //parse方法声明了解析异常
如果字符串构造方法的模式不一样,那么程序就会抛出此异常
要么继续throws声明抛出 要么try...catch(){
} 处理
4.制作日期转换工具类
工具类
public class DateUtils {
private DateUtils() {
}
/*
把日期转为指定格式的字符串
返回值类型:String
参数:Date date, String format
*/
public static String dateToString(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
String s = sdf.format(date);
return s;
}
/*
把字符串解析为指定格式的日期
返回值类型:Date
参数:String s, String format
*/
public static Date stringToDate(String s, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse(s);
return d;
}
}
测试类
public class DateDemo {
public static void main(String[] args) throws ParseException {
//创建日期对象
Date d = new Date();
String s1 = DateUtils.dateToString(d, "yyyy年MM月dd日 HH:mm:ss");
System.out.println(s1);
String s2 = DateUtils.dateToString(d, "yyyy年MM月dd日");
System.out.println(s2);
String s3 = DateUtils.dateToString(d, "HH:mm:ss");
System.out.println(s3);
System.out.println("--------");
String s = "2048-08-09 12:12:12";
Date dd = DateUtils.stringToDate(s, "yyyy-MM-dd HH:mm:ss");
System.out.println(dd);
}
}
3.Canlendar抽象类
java.util.Calendar
日历类
Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
- 获取当前日历
Calendar 提供了一个类方法 getInstance 用于获取这种类型的一般有用的对象。
该方法返回一个Calendar 对象,默认时区和语言环境获得一个日历。
Calendar rightNow = Calendar.getInstance();
- 常用方法
Calendar c = Calendar.getInstance();//得到当前电脑的日历
c.set(Calendar.YEAR ,2019)
c.set( Canlendar.MONTH ,11 )
c.set(Canlendar.DATE ,1) //2019年12月
c.set( Canlendar.DATE _OF_WEEK ,Canlendar.MONDAY )
1:int get(int field) 得到给定日历字段的值
void set(int field,int value) 设置给定日历字段的值
//由于Calendar时抽象类 所以成员变量都是公有的静态常量
int year = c.get(Calendar.YEAR ) ;//得到年
int month = c.get(Canlendar.MONTH )+1 ; //得到月 外国月份0-11
int date = c.get(Canlendar.DATE );//得到日
c.get(Canlendar.DATE _OF_WEEK);//得到当前天是星期几
2. Date getTime() 转成Date类型
Date time =c.getTime();
3. GregorianCalendar 子类的方法
boolean isLeapYear(int year) 判断闰年
GregorianCalendar gc =new GregorianCalendar();
boolean b= gc.isLeapYear(2038)
4. abstract void add(int field, int amount)
根据日历的规则,将指定的时间量添加或减去给定的日历字段
参数 int field 传递指定日历字段(YEAR ,MONTH...)
int amount 要设置的值,正数增加,负数减少
c.add(Calendar.YEAR,2);
c.add(Calendar.MONTH,-2) ;