API
是什么?
简单理解就是别人提前写好的程序(代码);我们只需要学习具体有哪些代码(类和方法),然后直接利用这些代码完成我们的需求即可;
API文档是什么
是专门针对API代码进行解释说明的一个使用参考手册;
Object类
是什么?
是所有类的超类;这里面写的所有方法,任意一个子类对象都可以调用;
toString()方法
Object为所有的孩子提供的一个专门用于转字符串的方法,如果子类不满意,可以重写!重写的时候可以利用快捷键直接生成! alt + insert
equals()方法
Object为所有的孩子提供了一个专门比较两个对象是否"相等"的方法,比较的规则是"比较两个对象的地址值";如果子类不满意,可以重写!重写的时候可以利用快捷键直接生成!
具体实例
public class Student {
private String name;
private int age;
public Student ( String name, int age) {
this . name = name;
this . age = age;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public int getAge ( ) {
return age;
}
public void setAge ( int age) {
this . age = age;
}
@Override
public String toString ( ) {
return "Student{" +
"name='" + name + '' ' +
", age=" + age +
'}' ;
}
@Override
public boolean equals ( Object o) {
if ( this == o) {
return true ;
}
if ( ! ( o instanceof Student ) ) {
return false ;
}
Student student = ( Student) o;
if ( age != student. age) {
return false ;
}
return name != null ? name. equals ( student. name) : student. name == null;
}
}
public class Test {
public static void main ( String[ ] args) {
Student s1 = new Student ( "小明" , 21 ) ;
Student s2 = new Student ( "小李" , 20 ) ;
Student s3 = new Student ( "小李" , 20 ) ;
System. out. println ( s1) ;
System. out. println ( s2) ;
System. out. println ( s3) ;
System. out. println ( s2 == s3) ;
System. out. println ( s2. equals ( s3) ) ;
}
}
包装类型
是什么?
java专门针对8个基本数据类型,写的8个对应的包装类,对应关系分别是:
int ---> Integer;
char --> Character;
剩下的6个都是首字母大写;
byte--->Byte short--->Short long--->Long float--->Float double--->Double boolean--->Boolean
有什么用
这些类中提供了一些方法,可以帮我们完成字符串和基本数据类型的相互转换,且包装类中也帮我们记录了这个类型的最大值和最小值;
自动装箱和自动拆箱
将包装类型的数据转基本数据类型的过程叫做拆箱,这个过程在jdk5之后就可以自动完成了,因此叫做自动拆箱; 包装--->基本
将基本数据类型转成包装类型的数据的过程叫做装箱,这个过程在jdk5之后就可以自动完成了,因此叫做自动装箱; 基本--->包装
字符串和基本数据类型的相互转换
通用套路,都是用包装类的静态方法,parseXxx 没有parseChar,如果要转字符,只能利用字符串的 charAt(索引)这个方法,根据索引,获取某个位置的字符;
public class MyInt {
public static void main ( String[ ] args) {
Integer a = 11 ;
a+= 3 ;
System. out. println ( a) ;
int b = a;
System. out. println ( Integer. MAX_VALUE) ;
System. out. println ( Integer. MIN_VALUE) ;
String s = b+ "" ;
System. out. println ( s + 1 ) ;
int i = Integer. parseInt ( s) ;
System. out. println ( i + 1 ) ;
String s2 = "6.6" ;
System. out. println ( Double. parseDouble ( s2) + 1.1 ) ;
}
}
StringBuilder
是什么
是java编写的一个专门用于提升字符串拼接效率的类;
如何使用
需要利用构造方法创建对象,然后利用对象,调用方法即可完成具体的功能;
构造方法
1. StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
2. StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。
成员方法
1.append(任意类型的数据) 将指定的任意数据追加到此字符序列;
2.reverse() 将此字符序列进行反转;
3.length() 返回长度(字符数);
4.String toString() 返回此序列中数据的字符串表示形式;
public class MyStringBuilder {
public static void main ( String[ ] args) {
StringBuilder sb = new StringBuilder ( ) ;
sb. append ( 22 ) ;
sb. append ( 'a' ) ;
sb. append ( 6.6 ) ;
sb. append ( "你好" ) ;
System. out. println ( sb) ;
sb. reverse ( ) ;
System. out. println ( sb) ;
System. out. println ( sb. length ( ) ) ;
}
}
运行结果:
22 a6. 6 你好
好你6.6 a22
8
String和StringBuilder的相互转换
1. 当需要进行字符串拼接,反转的操作的时候,需要将String转成StringBuilder完成;
2. 当需要进行字符串内容的比较的时候,需要将StringBuilder转成String;
链式编程
链式编程,就是使用方法返回的对象继续调用方法,这就是链式编程!
前提:
方法必须返回对象!!!
public class MyStringBuilder2 {
public static void main ( String[ ] args) {
StringBuilder sb = new StringBuilder ( ) ;
StringBuilder s1 = sb. append ( "11" ) ;
StringBuilder s2 = sb. append ( "22" ) ;
System. out. println ( sb == s1) ;
System. out. println ( s1 == s2) ;
System. out. println ( s2) ;
System. out. println ( sb. append ( 33 ) . reverse ( ) . append ( 66 ) . toString ( ) ) ;
}
}
运行结果:
true
true
1122
33221166
public class MyTest {
public static void main ( String[ ] args) {
Scanner sc = new Scanner ( System. in) ;
System. out. println ( "请输入字符串:" ) ;
String s = sc. next ( ) ;
StringBuilder sb = new StringBuilder ( s) ;
sb. reverse ( ) ;
if ( s. equals ( sb. toString ( ) ) ) {
System. out. println ( s+ "是一个对称字符串" ) ;
} else {
System. out. println ( s+ "不是一个对称字符串" ) ;
}
}
}
System类
是什么
是java提前写好的一个专门表示系统的工具类;里面都是静态方法,可以直接使用类名调用;
有什么作用
System.currentTimeMillis() 可以获取当前系统时间的毫秒值形式;
可以用于测试程序的性能;(在代码执行之前获取一个时间节点,代码执行之后,再获取一个时间节点,使用两个时间节点的差就是程序运行时间)
public class MySys {
public static void main ( String[ ] args) {
System. out. println ( System. currentTimeMillis ( ) ) ;
System. out. println ( System. currentTimeMillis ( ) ) ;
System. out. println ( System. currentTimeMillis ( ) ) ;
System. out. println ( System. currentTimeMillis ( ) ) ;
System. out. println ( System. currentTimeMillis ( ) ) ;
}
}
Data
是什么
是java编写的用于描述时间瞬间的类;任意一个Date类型的对象,都是一个时间瞬间对象;
利用带毫秒值的构造方法或空参数的构造方法可以直接创建对象;
常用方法
1. getTime() 获取当前时间对象对应的毫秒值;
2. toLocaleString() 转本地日期格式字符串;
public class MyDate {
public static void main ( String[ ] args) {
Date d = new Date ( ) ;
System. out. println ( d) ;
String s = d. toLocaleString ( ) ;
System. out. println ( s) ;
System. out. println ( d. getTime ( ) ) ;
System. out. println ( System. currentTimeMillis ( ) ) ;
Date d2 = new Date ( 0 ) ;
System. out. println ( d2. toLocaleString ( ) ) ;
}
}
SimpleDateFormat类
是什么
是一个专门负责将字符串和Date类型的对象进行相互转换的工具类,且该工具类创建对象的时候,需要指定一个格式,如果不指定,将按照默认格式进行转换;
如何指定具体的格式呢
y ----> 年份信息,写1个和写4个效果一样,但是如果写两个,就仅显示年份的后两位;
M ----> 月份信息,写1个按实际月份显示;如果写两个,就强制显示两位,如果不够两位,自动在前面补0;
d ----> 一月中的第几天,写1个按实际信息显示;如果写两个,就强制显示两位,如果不够两位,自动在前面补0;
H ----> 24小时计时法的方式显示小时;写1个按实际信息显示;如果写两个,就强制显示两位,如果不够两位,自动在前面补0;
m ----> 分钟;写1个按实际信息显示;如果写两个,就强制显示两位,如果不够两位,自动在前面补0;
s ----> 秒钟;写1个按实际信息显示;如果写两个,就强制显示两位,如果不够两位,自动在前面补0;
E ----> 星期
常见的组合:
yyyy-MM-dd HH:mm:ss
如何创建工具对象
SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
常用方法
格式化(format)
从日期到字符串,这个过程称为格式化;对应的方法是: format(日期对象)
解析(parse)
从字符串到日期对象,这个过程称为解析;对应的方法是: parse(字符串);
public class MySDF {
public static void main ( String[ ] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat ( "y年M月d日 HH点mm分ss秒 E" ) ;
Date d = new Date ( ) ;
String s = sdf. format ( d) ;
System. out. println ( s) ;
Date parse = sdf. parse ( s) ;
System. out. println ( parse) ;
}
运行结果:
2023 年3 月18 日 19 点24 分08 秒 周六
Sat Mar 18 19 : 24 : 08 CST 2023
简单练习
public class Test02 {
public static void main ( String[ ] args) throws ParseException {
String jia = "2023-01-01 00:02:00" ;
String pi = "2023-01-01 00:13:00" ;
String start = "2023-01-01 00:00:00" ;
String end = "2023-01-01 00:10:00" ;
SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy-MM-dd HH:mm:ss" ) ;
long jt = sdf. parse ( jia) . getTime ( ) ;
long pt = sdf. parse ( pi) . getTime ( ) ;
long st = sdf. parse ( start) . getTime ( ) ;
long et = sdf. parse ( end) . getTime ( ) ;
System. out. println ( jt>= st&& jt<= et? "小贾参与秒杀成功!" : "小贾参与秒杀失败!" ) ;
System. out. println ( pt>= st&& pt<= et? "小皮参与秒杀成功!" : "小皮参与秒杀失败!" ) ;
}
}
JDK8新增的日期类
为什么要新增日期类
因为JDK7以前表示日期时间没有问题,但是对日期时间进行"推移"运算的时候,很不方便,所以新增了JDK8的日期对象,专门解决了这一类的需求,且将日期的精度进一步提升到纳秒级别了;
新增的日期类有:
LocalTime 仅包含时分秒,不包含年月日的信息;
LocalDate 仅包含年月日,不包含时分秒的信息;
LocalDateTime 既包含年月日又包含时分秒信息;
上面三个类的使用方式一模一样,仅仅是包含的信息不同而已!
如何使用
所有的对象的获取都直接使用静态方法!!!
常用方法
static LocalDateTime now() 从默认时区中的系统时钟获取当前日期时间。
static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute) 以指定的年月日时分创建日期对象
getxxx() 获取对应的信息,可以获取年,月,日,小时,分钟...
withXxx(数据) 修改信息;
plusXxx(数据) 推移时间;
案例代码
public class MyLocal {
public static void main ( String[ ] args) {
LocalDateTime now = LocalDateTime. now ( ) ;
System. out. println ( now) ;
LocalDateTime of = LocalDateTime. of ( 2000 , 11 , 11 , 11 , 11 ) ;
System. out. println ( of) ;
LocalDateTime of2 = of. withYear ( 1998 ) ;
System. out. println ( of) ;
System. out. println ( of2) ;
LocalDateTime of3 = of2. plusDays ( 7 ) ;
System. out. println ( of3) ;
System. out. println ( of3. isAfter ( of2) ) ;
System. out. println ( of3. getDayOfWeek ( ) ) ;
}
}
DateTimeFormater类
是什么
是一个专门为JDK8的日期提供格式化和解析的工具类;
获取方式
static DateTimeFormatter ofPattern(String pattern) 使用指定的模式创建格式化程序。
常见方法
解析是静态方法,可以直接使用日期类调用,传递要解析的字符串和格式化工具对象即可;
static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)
格式化是成员方法,直接使用日期对象调用这个方法,传递一个格式化工具对象,即可得到一个字符串;
String format(DateTimeFormatter formatter)
public class MyFormater {
public static void main ( String[ ] args) {
LocalDate now = LocalDate. now ( ) ;
DateTimeFormatter format = DateTimeFormatter. ofPattern ( "yyyy年MM月dd日" ) ;
String s = now. format ( format) ;
System. out. println ( s) ;
LocalDate d = LocalDate. parse ( "1998年02月03日" , format) ;
System. out. println ( d) ;
}
}
Period类
是java在JDK8的时候,专门针对日期间隔编写的一个类;(粗粒度的时间段对象,只能精确到天)
有什么用
直接利用静态方法 between传递两个 LocalDate对象即可获取一个日期间隔对象;
static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)
常用方法
getxxx方法获取信息;
public class MyPeriod {
public static void main ( String[ ] args) {
LocalDate d1 = LocalDate. of ( 1998 , 2 , 3 ) ;
LocalDate d2 = LocalDate. of ( 2001 , 4 , 13 ) ;
Period p = Period. between ( d1, d2) ;
System. out. println ( p. getYears ( ) ) ;
System. out. println ( p. getMonths ( ) ) ;
System. out. println ( p. getDays ( ) ) ;
System. out. println ( p. toTotalMonths ( ) ) ;
}
}
Duration类
是什么
是一个细粒度的日期间隔对象,可以使用静态方法between传递两个带毫秒值的日期对象就可以获取日期间隔对象了;
常用方法
getxxx方法获取信息;
toDays(); 获取两个日期间隔的总天数
public class MyDur {
public static void main ( String[ ] args) {
LocalDateTime t1 = LocalDateTime. of ( 1988 , 11 , 11 , 11 , 11 , 11 ) ;
LocalDateTime now = LocalDateTime. now ( ) ;
Duration d = Duration. between ( t1, now) ;
long l = d. toDays ( ) ;
System. out. println ( l) ;
}
}