“请和我门外的花坐一会,它们很温暖,我注视它们很多很多日子了。”
接触较少的 Java 知识点
前言
新学期的 Java 课,随着作业的推进会发现很多不懂的地方,比如保留小数后几位之类的需求
所以特地回过头来整理一下,不然每次都要再搜,怪麻烦的…
这里按顺序列一下所提及的知识点,比较粗略的认识没什么逻辑,以后有必要就单独列出探讨:
- 日期时间的表示方法:Date、SimpleDateFormat 和 Calendar 类
- final 关键字
- Object 类
- 接口
- 类型转换
- 抽象类
Date、SimpleDateFormat 和 Calendar 类
Date 对象表示时间
利用无参构造函数创造的 Date 类表示当前时间前
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
}
//运行结果
Tue Sep 24 09:17:59 CST 2019
(CST 代表 China Standard Time (中国标准时间,也就是北京时间,东八区))
由于这种形式不利于理解,所以需要用 SimpleDateFormat 按指定的格式进行显示,如 2014-06-11 09:22:30
SimpleDateFormat 转换
可以将日期转换为指定格式的文本,也可将文本转换为日期
format() 方法将 Date 转化为 String
public static void main(String[] args) {
Date date = new Date();
System.out.println("Date类: " + date);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //和被转化对象格式对应
String present = simpleDateFormat.format(date);
System.out.println("SimpleDateFormat类: " + present);
}
//运行结果
Date类: Tue Sep 24 10:37:33 CST 2019
SimpleDateFormat类: 2019-09-24 10:37:33
yyyy-MM-dd HH:mm:ss” 为预定义字符串, yyyy 表示四位年, MM 表示两位月份, dd 表示两位日期, HH 表示小时(使用 24 小时制), mm 表示分钟, ss 表示秒
这样就指定了转换的目标格式,最后调用 format() 方法将时间转换为指定的格式的字符串
parse() 方法将 String 转化为 Date
public class Main{
public static void main(String[] args) {
String present = "2019年09月24日 10:51:13";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //和被转化对象格式对应
try{
Date date = simpleDateFormat.parse(present);
System.out.println("Date类: " + date);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//运行结果
Date类: Tue Sep 24 10:51:13 CST 2019
“yyyy 年 MM 月 dd 日 HH:mm:ss” 指定了字符串的日期格式,调用 parse() 方法将文本转换为日期
调用 SimpleDateFormat 对象的 parse() 方法时可能会出现转换异常,即 ParseException ,因此需要进行异常处理
Calender 类
java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间
调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("现在: " + year + "-" + month + "-" + day);
}
//运行结果
现在: 2019-8-24
用同样的方法可以获取时、分、秒
getTime() 方法和 getTimeInMillis()方法
Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换
还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位。返回 long 型的整数,表示从 1790-1-1 00:00:00 到当前时间的毫秒数
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
Long time = calendar.getTimeInMillis();
System.out.println("Date: " + date);
System.out.println("毫秒: " + time);
}
//运行结果
Date: Tue Sep 24 11:10:22 CST 2019
毫秒: 1569294622566
final 关键字
final 关键字,可以修饰类、方法、属性、变量
修饰不同对象的作用
- 修饰类:该类不允许被继承
- 修饰方法:该方法不允许被重写
- 修饰属性:该属性不会被隐式初始化。即若该属性在定义时没有初始化,则在构造方法中一定要初始化;若在构造方法中初始化,则定义时不能被初始化
- 修饰变量:该变量只能赋值一次,即成为常量
Object 类
在 Java 中,Object 类是所有类的父类,如果一个类没有明确 extends 另外一个类,那么这个类默认继承 Object 类。
Object 类中的方法适用于所有子类
常用的方法
toString()
在 Object 类中定义 toString()方法返回对象地址字符串(哈希 code 码)
可以通过重写表示出对象属性
equals()
比较对象的引用是否指向同一块内存地址
可以通过重写比较两个对象的值是否一致
接口
- 用关键字 interface 定义接口
- 接口通常是被用来继承、实现的,建议用 public 而非 protect、private
- 接口会自动添加 abstract 关键字,即使没有显式写出,也会被自动加上
- 接口中的属性是常量,需要 public static final 修饰符,即使没有显式写出,也会被自动加上
- 接口中的方法是抽象方法,需要 public abstract 修饰符,即使没有显式写出,也会被自动加上
[修饰符] (abstract) interface 接口名[extends 父接口1,父接口2...]{
零到多个常量定义;
零到多个抽象方法定义;
}
接口的使用
- 一个类可以继承多个接口,用 implement 关键字
- 接口对象指向实现接口的对象
- 匿名内部类实现接口
[修饰符] class 类名 extends 父类 implements 接口1,接口2...{
//如果继承抽象类,要实现其中抽象方法
//如果继承接口,要实现其中抽象方法
}
//匿名内部类实现接口
Interface inter = new Interface(){
@Override
public void method(){
···
}
};
inter.method();
new Interface(){
@Override
public void method(){
···
}
};
inter.method();
引用类型转换
- 向上类型转换:隐式、自动进行转换。从小类型到大类型(子类赋值父类)
- 向下类型转换:强制类型转换。大类型到小类型的转换(父类赋值子类)
instanceof 运算符
解决引用对象的类型,避免类型转换的安全性问题
if (animal instanceof Dog) //判断animal这个对象是否能转换成Dog类
抽象类
- 用关键字 abstract 定义抽象方法和抽象类
- 抽象类不一定具有抽象方法,具有抽象方法的一定是抽象类
- 抽象方法只有声明,不用实现
- 子类继承抽象类后一定要重写(Override)抽象类中的抽象方法