java.util.Date
类 表示特定的瞬间,精确到毫秒。
public Date()
:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date(long date)
:分配Date对象并初始化此对象,以表示自从标准基准时间(即1970年1月1日00:00:00 GMT)以来的指定毫秒数。由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。public static void main(String[] args) {
//空参构造方法
Date d = new Date();
//输出当前系统日期
System.out.println(d);//Sun Jun 14 15:26:15 CST 2020
System.out.println(d.toLocaleString());//2020-6-14 15:27:33
//从时间原点向后3000毫秒的时间,时间原点:1970-1-1 0:0:0 (中国 东八区)
Date d1 = new Date(3000);
System.out.println(d1.toLocaleString());//1970-1-1 8:00:03
}
在使用println
方法时,会自动调用Date
类中的toString
方法。Date
类对Object
类中的toString
方法进行了覆盖重写,所以结果为指定格式的字符串。
java.text.DateFormat
是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。常用的格式规则为:
标识字母(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
DateFormat类的常用方法有:
public String format(Date date)
:将Date对象格式化为字符串。public Date parse(String source)
:将字符串解析为Date对象。public class Demo02 {
public static void main(String[] args) throws ParseException {
Date d = new Date();
//将字符串变成日期格式
String str = "2020年06月14日 15:35:00";
Date parse = sdf.parse(str);
System.out.println(parse);//Sun Jun 14 15:35:00 CST 2020
//将日期格式变成字符串
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年M月dd日 HH:mm:ss");
String str1 = sdf1.format(d);
System.out.println(str1);//2020年6月15日 11:13:42
}
}
java.util.Calendar
是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
public static Calendar getInstance()
:使用默认时区和语言环境获得一个日历
public int get(int field)
:返回给定日历字段的值。
public void set(int field, int value)
:将给定的日历字段设置为给定值。
public abstract void add(int field, int amount)
:根据日历的规则,为给定的日历字段添加或减去指定的时间量。
public Date getTime()
:返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
Calendar类中提供很多成员常量,代表给定的日历字段:
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周日为1 |
public class Demo03 {
public static void main(String[] args) {
//获取日历类对象
Calendar c = Calendar.getInstance();
//get方法
int year1 = c.get(Calendar.YEAR);
System.out.println(year1);//2020
int month = c.get(Calendar.MONTH)+1;
System.out.println(month);//6
//getTime方法
Date time = c.getTime();
System.out.println(time);//Sun Jun 14 15:50:06 CST 2020
//set方法
c.set(Calendar.YEAR,2022);
int year2 = c.get(Calendar.YEAR);
System.out.println(year2);//2022
//add方法
c.add(Calendar.YEAR,2);
int year3 = c.get(Calendar.YEAR);
System.out.println(year3);//2024
}
}
public class Demo03 {
public static void main(String[] args) {
//系统现在年份
System.out.println(Year.now());//2020
//指定年份
System.out.println(Year.of(2022));//2022
//指定月份
System.out.println(Month.JUNE);//JUNE
//系统年月日
System.out.println(LocalDate.now());//2020-06-15
//系统现在的年月日、时间
System.out.println(LocalDateTime.now());//2020-06-15T20:59:17.019
//存储一个年月日
LocalDate birthday = LocalDate.of(1999,4,8);
System.out.println(birthday);//1999-04-08
//存储一个年月日和时间
LocalDateTime time = LocalDateTime.of(2020,6,15,21,05,33);
System.out.println(time);//2020-06-15T21:05:33
}
}
public class Demo04 {
public static void main(String[] args) {
//日期转换器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//格式化日期字符串
LocalDateTime now = LocalDateTime.now();
System.out.println(now);//2020-06-15T21:14:28.266
String nowStr = now.format(formatter);//放入格式器
System.out.println(nowStr);//2020-06-15 21:14:28
String dateStr= "2020-06-15 21:13:25";
//转成日期
LocalDateTime date= LocalDateTime.parse(dateStr, formatter);//放入格式器
//获取日
System.out.println(date.getDayOfMonth());//15
}
}
public class Demo05 {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate birthDate = LocalDate.of(1999, 4, 8);
//时期间隔 年月日
Period p = Period.between(birthDate, today);
System.out.println(p.getYears()+"年"+p.getMonths()+"月"+p.getDays()+"日");//21年2月7日
LocalDate startDate = LocalDate.of(1996, 4, 6);
LocalDate endDate = LocalDate.of(2000, 12,16);
//期量单位 间隔
long between = ChronoUnit.YEARS.between(startDate, endDate);
System.out.println("两年之间的差: " + between); //4 不满一年不计算在内
between =ChronoUnit.MONTHS.between(startDate, endDate);
System.out.println("两月之间的差: " + between); //56 不满一月不计算在内
}
}
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,常用的方法有:
public static long currentTimeMillis()
:返回以毫秒为单位的当前时间。public class Demo04 {
public static void main(String[] args) {
//打印当前系统毫秒值时间
long l = System.currentTimeMillis();
System.out.println(l);//1592121855933
}
}
查阅java.lang.StringBuilder
的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
public StringBuilder()
:构造一个空的StringBuilder容器。public StringBuilder(String str)
:构造一个StringBuilder容器,并将字符串添加进去。public StringBuilder append(...)
:添加任意类型数据的字符串形式,并返回当前对象自身。public class MyStringBuilder {
public static void main(String[] args) {
//创建一个StringBuilder
StringBuilder sb1 = new StringBuilder("abc");
//追加、拼接
sb1.append("def").append("ghi");
System.out.println(sb1);//abcdefghi
//删除
sb1.delete(2,4);
System.out.println(sb1);//abefghi
//反转
sb1.reverse();
System.out.println(sb1);//ihgfeba
//插入
sb1.insert(2,"df");
System.out.println(sb1);//ihdfgfeba
}
}
public String toString()
:将当前StringBuilder对象转换为String对象。
public class Demo02 {
public static void main(String[] args) {
//String --> StringBuilder
String str = "你好!";
System.out.println(str);//你好!
StringBuilder sb = new StringBuilder(str);
sb.append("女孩!");
System.out.println(sb);//你好!女孩!
//StringBuilder --> String
String str1 = sb.toString();
System.out.println(str1);//你好!女孩!
}
}
JAVA并不是纯面向对象的语言。Java2语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象 的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中。例如使用Map对象 要操作put()方法时,需要传入的参数是对象而不是基本数据类型。为了解决这个不足,在设计类时为每个基本数据 类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。包装类均位于java.lang包
基本数据类型 | 包装类 |
---|---|
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
public class Demo01 {
public static void main(String[] args) {
//基本类型-->包装类,创建一个包装类对象,使用包装类中的valueOf方法
Integer aw = Integer.valueOf(20);
System.out.println(aw);//20
//包装类-->基本类型
int a = aw.intValue();
System.out.println(a);//20
// 基本类型和引用类型之间的转换 自动转换(自动装箱、自动拆箱)
//自动装箱,相当于Integer i1 = Integer.valueOf(100);
Integer i1 = 100;
//自动拆箱,等号右边:将i1对象转成基本数值(自动拆箱) i.intValue() + 5;
i1 = i1 + 5;
//加法运算完成后,再次装箱,把基本数值转成对象
// 引用类型的增强
System.out.println(Integer.MAX_VALUE);//2147483647
System.out.println(Integer.MIN_VALUE);//-2147483648
System.out.println(Integer.max(100, 1000));//1000
System.out.println(Integer.max(Integer.valueOf(10), Integer.valueOf("1000")));//1000
// 以后在需要Integer的地方我们可以直接写数字 在需要基本类型的地方,也可以直接使用Integer
Integer i1 = 1000; //自动装箱
Integer i2 = 1000;
System.out.println(i1==i2);//false
System.out.println(i1.equals(i2));//true
int it1 = 1000;
int it2 = 1000;
System.out.println(it1==it2);//true
System.out.println(Integer.valueOf("100",8));//64
}
}
java.lang.Math
类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单
public class Demo005Math {
public static void main(String[] args) {
//向上取整
System.out.println(Math.ceil(3.2));//4
//向下取整
System.out.println(Math.floor(3.2));//3
//绝对值
System.out.println(Math.abs(-1));//1
//取大值
System.out.println(Math.max(1, 10));//10
//取小值
System.out.println(Math.min(1, 10));//1
//2的3次方
System.out.println(Math.pow(2, 3));//8
//9的平方根
System.out.println(Math.sqrt(9));//3
//sin(0)的值
System.out.println(Math.sin(0));//0
}
}
java.io.File
类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
public File(String pathname)
:通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。public File(File parent, String child)
:从父抽象路径名和子路径名字符串创建新的 File实例。 //创建一个File对象,可以用相对路径,也可以用绝对路径
File file = new File("gp.txt");
File file1 = new File("D:\\mysoft_s\\JetBrains\\ws\\day05\\gp1.txt");
System.out.println(file);//gp.txt
System.out.println(file1);//D:\mysoft_s\JetBrains\ws\day05\gp1.txt
// 父路径+相对路径
file = new File("code/day00", "a/a.txt");
System.out.println(file.getAbsolutePath());
public String getAbsolutePath()
:返回此File的绝对路径名字符串。public String getPath()
:将此File转换为路径名字符串。public String getName()
:返回由此File表示的文件或目录的名称。public long length()
:返回由此File表示的文件的长度。 System.out.println(file.getAbsolutePath());//D:\mysoft_s\JetBrains\ws\day05\gp.txt
System.out.println(file.getPath());//gp.txt
System.out.println(file1.getName());//out
System.out.println(file1.length());//0
public boolean exists()
:此File表示的文件或目录是否实际存在。public boolean isDirectory()
:此File表示的是否为目录。public boolean isFile()
:此File表示的是否为文件。 System.out.println(file.exists());//true
System.out.println(file1.isDirectory());//true
System.out.println(file1.isFile());//false
public boolean createNewFile()
:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。public boolean delete()
:删除由此File表示的文件或目录。public boolean mkdir()
:创建由此File表示的目录。public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。 File file = new File("gp.txt");
// 创建一个新文件
file.createNewFile();
System.out.println(file.exists());//true
public String[] list()
:返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles()
:返回一个File数组,表示该File目录中的所有的子文件或目录。
// 获取目录中的子目录
File[] fs = out.listFiles();
/*
场景:文件上传
在当前环境中的 update文件中存放上传的文件
模拟通过键盘录入文件名的形式作为文件上传
*/
public class Demo07 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您创建的文件名:");
String fileName = sc.nextLine();
File f1 = new File("update");
if(!(f1.exists())){
f1.mkdirs();
}
File f2 = new File(f1,fileName);
f2.createNewFile();
System.out.println(f2.exists());//true
}
}
// 打印一个目录下所有的内容的名称
public class Demo08 {
public static void main(String[] args) {
File file = new File("out");
dirPrint(file);
}
private static void dirPrint(File file) {
System.out.println(file.getName());
if(file.isDirectory()){
File[] listFile = file.listFiles();
for(File f : listFile){
dirPrint(f);
}
}
}
}
异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
处理方式:抛,抓
Java异常处理的五个关键字:try、catch、finally、throw、throws
try -> 检测
catch -> 捕获
finally -> 最终操作
throws -> 向外抛出异常
throw -> 声明异常|出现异常 告诉自己的方法知道出异常了