**扯淡:**大家好,欢迎大家观看这篇文章,我是一个java的初学者。准备在22年2月7号之后找工作了,现在做一个70天大冲刺笔记。从java高级特性到微服务架构的整体笔记(也算是我走的路线了)。从今天开始要做个自律啦(希望大家喜欢)欢迎大家一起讨论学习,我是初学者瑟瑟发抖
这里我所有的笔记都是来源于网上视频:尚硅谷,黑马等这两个地址视频非常牛逼
硅谷
https://www.bilibili.com/read/cv5216534?spm_id_from=333.999.0.0
黑马
https://www.bilibili.com/read/cv9965357?spm_id_from=333.999.0.0
这一个,来源于,硅谷的30天java中的高级部分
硅谷,黑马的笔记有需要可以向我要哦
你们的评论和点赞是我最大的支持,慢慢的我也是从白嫖档走过来的。希望多多评论
常用类
java是面向对象的编程语言,万事万物皆对象,对象的创建又离不开类
类中定义了属性,方法。每一个类都可以解决不同的问题。
在java.util包中包含了好多类下面就一起来了解一下。
String类
刚学java的数据类型的时候,指出String就不是基本数据类型,而是一个引用数据类型一个类
String类:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作 为此类的实例实现。
String是一个final类,代表不可变的字符序列。不可以被继承
字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
String对象的字符内容是存储在一个字符数组value[]中的。而且也是final修饰,表示赋值之后就不可改变
String实现了Serializable接口,支持序列化:表示可以传输
String实现Comparable接口,表示可以比较大小
String源码
字面量赋值
String明明是引用类型,却可以像基本数据类型一样的赋值
这种赋值称之为字面量赋值
String的不可变性
因为String是一个final的char[],final修饰的是常量。
所以我的String值存放在(方法区的字符串常量池中)
字符串常量池特性
通过字面量方式赋值,此时字符串值声明在字符串常量池中
字符串常量池不会存储相同的内容
public class StringClassTest {
public static void main(String[] args) {
String a = "123";
String b = "123";
System.out.println("ab都是字面量123:"+(a== b));
String c = new String("123");
String d = new String("123");
System.out.println("cd都是new(123)出来:"+(c==d));
// 当d有重新进行指向的时候
d="123";
System.out.println("a==d:"+(a==d));
System.out.println("a==c:"+(a==c));
System.out.println("c==d:"+(c==d));
}
}
无论怎么改变String的值,它都是重新创建一个String的值。
因为是常量,设定为就是不可改动的
String创建new对象的演示
==号比较的地址,上面示例发现字面量方式进行比较是true
new的方式,创建对象方式进行比较就是false
String:new出部分在堆中
String的变量引用还是在栈中
String的值在常量池中。
变量地址执行堆中实例在执行常量池中的值
String的赋值
示例
- 使用字面量的方式创建对象,引用指向字符串常量池
- 使用new()或带着变量参与,引用指向堆中。
intern()方法
该方法的返回值,指向实在字符串常量池中
package ClassTest;
public class internTest {
public static void main(String[] args) {
String str1 = "qwe";
String str3 = new String("qwe");
System.out.println("str1==str3:"+(str1==str3));
String intern = str3.intern();
System.out.println("str1==intern:"+(str1==intern));
}
}
String的常用方法
String是我们经常使用到的数据类型,所以一定要了解基本的方法
方法 | 描述 |
---|---|
int length() | 返回字符串的长度: return value.length |
char charAt(int index) | 返回某索引处的字符return value[index] |
boolean isEmpty() | 判断是否是空字符串:return value.length == 0 |
String toLowerCase() | 使用默认语言环境,将 String 中的所有字符转换为小写 |
String toUpperCase() | 使用默认语言环境,将 String 中的所有字符转换为大写 |
String trim() | 返回字符串的副本,忽略前导空白和尾部空白 |
boolean equals(Object obj) | 比较字符串的内容是否相同 |
boolean equalsIgnoreCase(String anotherString) | 与equals方法类似,忽略大 小写 |
String concat(String str) | 将指定字符串连接到此字符串的结尾。 等价于用“+” |
int compareTo(String anotherString) | 比较两个字符串的大小 |
String substring(int beginIndex) | 返回一个新的字符串,它是此字符串的从 beginIndex开始截取到最后的一个子字符串。 |
String substring(int beginIndex, int endIndex) | 返回一个新字符串,它是此字 符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。 |
boolean contains(CharSequence s) | 当且仅当此字符串包含指定的 char 值序列 时,返回 true |
int indexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引 |
int indexOf(String str, int fromIndex) | 返回指定子字符串在此字符串中第一次出 现处的索引,从指定的索引开始 |
int lastIndexOf(String str) | 返回指定子字符串在此字符串中最右边出现处的索引 |
int lastIndexOf(String str, int fromIndex) | 返回指定子字符串在此字符串中最后 一次出现处的索引,从指定的索引开始反向搜索 注:indexOf和lastIndexOf方法如果未找到都是返回-1 |
String replace(char oldChar, char newChar) | 返回一个新的字符串,它是 通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
String replace(CharSequence target, CharSequence replacement) | 使 用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串 |
String replaceAll(String regex, String replacement) : | 使 用 给 定 的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
String replaceFirst(String regex, String replacement) | 使 用 给 定 的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 |
boolean matches(String regex) | 告知此字符串是否匹配给定的正则表达式 |
String[] split(String regex) | 根据给定正则表达式的匹配拆分此字符串。 |
String[] split(String regex, int limit) | 根据匹配给定的正则表达式来拆分此 字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。 |
这些方法很多,有一个印象,用的时候能知道存在这个方法,具体操作可以在找一下文档。也是可以的
上面的示例就不敲了,大家可以自己手动体验一下。limit表达式,之后再javaweb会进行了解扩展
String和其他数据类型转换
String转换为基本数据类型
通过基本数据类型对应的包装类的方法进行转换
@Test
public void StringofInt(){
String str1 = "123";
int i = Integer.parseInt(str1);
System.out.println(i);
}
基本数据类型转换为String
通过String的静态方法valueof();
@Test
public void basicopString() {
int qwe = 123;
String s = String.valueOf(qwe);
System.out.println("打印s的字符串长度:"+s.length());
}
String与char[]
String的底层value就是一个char[],下面介绍String与Char[]互相转换
@Test
public void CharAndString() {
// char[]转换为String,因为String底层本身就是char[]
// 所以直接使用构造进行赋值即可
char[] chararr = new char[]{
'q', 'w', 'e'};
String str = new String(chararr);
System.out.println("char[]转换String:"+str);
// 调用String的函数即可进行转换
char[] chars = str.toCharArray();
System.out.println(chars[0]);
}
String与Byte[]之间的转换
这里再IO流中会经常使用到,因为io存在字节流和字符流等
String转换为Byte[]
这里使用的是getBytes(),该方法可以指定字符编码。默认是UTF-8
gbk:表示转中文的。出来的比utf-8要早
@Test
public void ByteString() throws Exception {
String str="hello中国";
byte[] bytes = str.getBytes();
// 带参的getBytes竟然存在checked异常
byte[] gbks = str.getBytes("gbk");
// 使用Arrays可以帮助我们方便的遍历数组
System.out.println(Arrays.toString(bytes));
System.out.println(Arrays.toString(gbks));
}
不同的字符集表示不同的解码规则
计算机的数据很多都是转换为字节进行传输。
Byte[]转String
Byte[]同样放入String的构造参数中进行转换。String构造参数存在多种方式直接放入,指定字符编码,等
如果指定的字符编码不匹配,可能也会出现乱码。默认还是utf-8
StringBuffer和StringBuilder
String属于不可变的字符串,下面还包含两个String的扩展。
可变字符序列:StringBuffer,StringBuilder
三者区别
String
不可变字符串序列
出现于JDK1.0
底层是final修饰的char数组
StringBuffer
可变字符串序列
出现于JDK1.0
线程安全,执行效率受影响
底层是char数组。但是这个char数组的长度是可以自增的
StringBuilder
可变字符串序列
出现JDK1.5
线程不安全,效率提高了,(对于buffer和builder之间的使用,看看需不需要线程安全)
底层还是char数组,长度可变
StringBuffer和Builder的字符串方法不像String很多都是带上返回值的,因为String是改变的重新创建变量接收的
StringBuffer
StringBuffer和StringBuilder都存在一个共同的父类,很多的功能都来源于父类
父类展示
可以看到value没有使用final修饰
还包含一个count,用来记录char的长度,可以用来返回字符串长度
StringBuffer构造器
StringBuffer的常用方法
方法 | 描述 |
---|---|
StringBuffer append(xxx) | 提供了很多的append()方法,用于进行字符串拼接 |
StringBuffer delete(int start,int end) | 删除指定位置的内容 |
StringBuffer replace(int start, int end, String str) | 把[start,end)位置替换为str |
StringBuffer insert(int offset, xxx) | 在指定位置插入xxx |
StringBuffer reverse() | 把当前字符序列逆转 |
StringBuffer的扩充
如果StringBuffer的char[]长度不够,可以进行扩充
再StringBuffer的很多地方发现调用了父类的append(str)
这里看到父类有调用了方法ensureCapacityInternal()
再调用newCapacity,出现一个新的char[]容量
最终的扩容规则
因为StringBuffer和StringBuilder都继承此类,所以这个父类一定要有所了解
这个父类:
一个非final修饰的char[],用来记录字符串有多少的count
上面的扩容规则。
String,StringBuffer,StringBuilder三者执行效率对比
@Test
public void ThreeMatch(){
long startTime = 0L;
long endTime = 0L;
String text = "";
StringBuffer buffer = new StringBuffer("");
StringBuilder builder = new StringBuilder("");
//开始对比
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
buffer.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer的执行时间:" + (endTime - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
builder.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder的执行时间:" + (endTime - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
text = text + i;
}
endTime = System.currentTimeMillis();
System.out.println("String的执行时间:" + (endTime - startTime));
}
可以看到明显的效率对比
日期时间常用类
System
System类提供的public static long currentTimeMillis()用来返回当前时 间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
@Test
public void SyestmTime(){
long l = System.currentTimeMillis();
// 1970年1月1日0时0分0秒之间以毫秒为单位的时间戳
System.out.println("时间戳:"+l);
}
Date类
date类再Java中两个包都存在util包,sql包,下面下说util工具包
Util包示例
@Test
public void DateUtil(){
Date date = new Date();
// 因为date的toString进行了重写
System.out.println("无参Date对象返回当前时间:"+date.toString());
System.out.println("打印时间戳:"+date.getTime());
//还可以通过构造函数,带入毫秒数返回date对象
}
@Deprecated注解
因为JDK版本的Date好多方法都已经过时了可以看到@Deprecated注解
也可以用,只是不建议使用
sql包下的Date
sql包对应的是数据库中的类型属于util中的子类所以可以进行sql自动类型转换util
相互转换
@Test
public void DateUtil(){
Date date = new Date();
// 因为util的作为SQL的父类不能转换为子类
// 使用毫秒数将Util的转换为sql的
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
System.out.println("打印SQL包date对象"+sqlDate);
// 因为多态:父类引用可以指向子类的实例(可以直接转换)
Date date1 = sqlDate;
System.out.println("打印Util包的date对象"+date1);
}
SimpleDateFormat
Date类的API不易于国际,java.text.SimpleDateFormat 类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
这个类可以将Date类存放的时间,通过自己指定的格式以字符串输出,还可以将字符串转换为Date类
示例
@Test
public void SimpleDateFormatTest() throws Exception {
// 创建一个日期格式类
SimpleDateFormat sdf = new SimpleDateFormat();
//创建一个Date类日期
Date date = new Date();
System.out.println("打印日期格式:"+date);
// 该方法将日期格式转换
String format = sdf.format(date);
System.out.println("默认规则转换:"+format);
// 该方法将字符串转换为Date类,存在checked异常(因为这里的转换需要根据创建的日期格式类的规则)
// checked异常表示可能出现异常,需要处理一下
Date parse = sdf.parse(format);
System.out.println("字符串转换回来"+parse);
}
上面的代码确实发现进行了转换,再构造时候可以指定转换格式
那么如何定义格式呢
格式规范
下表列出了可被合并以构造自定义模式的模式。这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。
格式模式 说明
d 月中的某一天。一位数的日期没有前导零。
dd 月中的某一天。一位数的日期有一个前导零。
ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。
dddd 周中某天的完整名称,在 DayNames 中定义。
M 月份数字。一位数的月份没有前导零。
MM 月份数字。一位数的月份有一个前导零。
MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。
MMMM 月份的完整名称,在 MonthNames 中定义。
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。
yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。
yyyy 包括纪元的四位数的年份。
gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。
h 12 小时制的小时。一位数的小时数没有前导零。
hh 12 小时制的小时。一位数的小时数有前导零。
H 24 小时制的小时。一位数的小时数没有前导零。
HH 24 小时制的小时。一位数的小时数有前导零。
m 分钟。一位数的分钟数没有前导零。
mm 分钟。一位数的分钟数有一个前导零。
s 秒。一位数的秒数没有前导零。
ss 秒。一位数的秒数有一个前导零。
f 秒的小数精度为一位。其余数字被截断。
ff 秒的小数精度为两位。其余数字被截断。
fff 秒的小数精度为三位。其余数字被截断。
ffff 秒的小数精度为四位。其余数字被截断。
fffff 秒的小数精度为五位。其余数字被截断。
ffffff 秒的小数精度为六位。其余数字被截断。
fffffff 秒的小数精度为七位。其余数字被截断。
t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。
tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。
z 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。
zz 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。
zzz 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。
: 在 TimeSeparator 中定义的默认时间分隔符。
/ 在 DateSeparator 中定义的默认日期分隔符。
% c 其中 c 是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。
\ c 其中 c 是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“\”。只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如,
DateTime.ToString( “d”) 返回 DateTime 值;“d”是标准短日期模式。
DateTime.ToString( “%d”) 返回月中的某天;“%d”是自定义模式。
DateTime.ToString( "d ") 返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。
示例
@Test
public void SimpleDatePattern(){
Date date = new Date();
// 创建一种日期格式
SimpleDateFormat sdf = new SimpleDateFormat("y年M月d日");
String format = sdf.format(date);
System.out.println(format);
// 创建第二种日期格式
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MMMM月dddd日");
String format1 = sdf1.format(date);
System.out.println(format1);
// 上面创建了两种不能的格式,如果说此时字符串转换为Date格式
// 也是需要遵循上面的格式编写的(类推)
}
常见方法
方法 | 描述 |
---|---|
public String format(Date date): | 方法格式化时间对象date |
public Date parse(String source): | 从给定字符串的开始解析文本,以生成 一个日期。 |
Calendar日历类
该类是一个抽象类,所以我们只能通过它的子类来进行实例化,或者调用静态方法也有一个也可以获取该类对象
创建类实例
- 使用Calendar.getInstance()方法
- 调用它的子类GregorianCalendar的构造器。
public static Calendar getInstance()
{
return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
}
根据源码发现底层就是调用子类的构造
Calendar类常用方法
方法 | 描述 |
---|---|
get(int field) | 根据输入的属性来获取不同的值,比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、 MINUTE、SECOND |
@Test
public void CalendarTest(){
// 其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance(); // 子类对象
rightNow.getTimeInMillis();
// 获取年
int year = rightNow.get(Calendar.YEAR);
// 获取月
int month = rightNow.get(Calendar.MONTH);
// 获取日
int date = rightNow.get(Calendar.DATE);
//获取几点, 其中Calendar.HOUR代表12小时制, Calendar.HOUR_OF_DAY代表24小时制
int hour = rightNow.get(Calendar.HOUR);
//获取上午下午
int moa=rightNow.get(Calendar.AM_PM);
System.out.println(moa == 1 ? "下午" : "上午");
//上面传入的属性都是属于枚举类型
// 枚举类型的值都是int类型的,下面会进行详细的介绍的
}
注意
这些属性得到的值
- 月份从0开始 :一月=0,二月=1
- 每周第几天:周日=1,周一=2
其他常用方法
Calendar calendar = Calendar.getInstance();
// 从一个 Calendar 对象中获取 Date 对象
Date date1 = calendar.getTime();
// 使用给定的 Date 设置此 Calendar 的时间
date1 = new Date(234234235235L);
calendar.setTime(date1);
calendar.set(Calendar.DAY_OF_MONTH, 8);
System.out.println("当前时间日设置为8后,时间是:" + calendar.getTime());
calendar.add(Calendar.HOUR, 2);
System.out.println("当前时间加2小时后,时间是:" + calendar.getTime());
calendar.add(Calendar.MONTH, -2);
System.out.println("当前日期减2个月后,时间是:" + calendar.getTime());
注意:
如果通过set改变了一些属性的值,那个get的到的其他属性值也会收到影响
@Test
public void CalendarTest() throws Exception {
// 其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance(); // 子类对象
// 一周中的第几天我这里是周1
int a = rightNow.get(Calendar.DAY_OF_WEEK);
System.out.println(a);
// 设置今天是这个月第3天 (2021-11-03)
rightNow.set(Calendar.DATE,3);
// 随着改动成为属性值都不发生变化
int b = rightNow.get(Calendar.DAY_OF_WEEK);
System.out.println(b);
}
JDK8的新时间API
为什么出现新的时间API
新API介绍
第三次引入的API是成功的,并且Java 8中引入的java.time API 已经纠正了 过去的缺陷,将来很长一段时间内它都会为我们服务。
Java 8 吸收了 Joda-Time 的精华,以一个新的开始为 Java 创建优秀的 API。
新的 java.time 中包含了所有关于
本地日期(LocalDate)、本地时间 (LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime) 和持续时间(Duration)的类。
历史悠久的 Date 类新增了 toInstant() 方法, 用于把 Date 转换成新的表示形式。这些新增的本地化时间日期 API 大大简 化了日期时间和本地化的管理。
- java.time – 包含值对象的基础包
- java.time.chrono – 提供对不同的日历系统的访问
- java.time.format – 格式化和解析时间和日期
- java.time.temporal – 包括底层框架和扩展特性
- java.time.zone – 包含时区支持的类
除了使用起来更加简单和灵活,主要是传统的时期处理类Date、Calendar不是多线程安全的,而LocalDate 线程安全的,所以不用担心并发问题。
localDate,localTime,localDateTime三个常用类
LocalDate、LocalTime、LocalDateTime 类是其中较重要的几个类,
它们的实例 是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。
它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区 相关的信息。
- LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
- LocalTime表示一个时间,而不是日期。
- LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
三个类常用的方法
三个类现在和String一样是不可变的类,本身值不能改变,只能创建出显得对象,不像之前Date,calendar可以进行自身改变
创建对象
方法 | 描述 |
---|---|
now() / * now(ZoneId zone) | 静态方法,根据当前时间创建对象/指定时区的对象 |
of() | 静态方法,根据指定日期/时间创建对象 |
从对象中获取信息
方法 | 描述 |
---|---|
getDayOfMonth()/getDayOfYear() | 获得月份天数(1-31) /获得年份天数(1-366) |
getDayOfWeek() | 获得星期几(返回一个 DayOfWeek 枚举值) |
getMonth() | 获得月份, 返回一个 Month 枚举值 |
getMonthValue() / getYear() | 获得月份(1-12) /获得年份 |
getHour()/getMinute()/getSecond() | 获得当前对象对应的小时、分钟、秒 |
通过修改数据获取新的对象
方法 | 描述 |
---|---|
withDayOfMonth()/withDayOfYear()/ withMonth()/withYear() | 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象 |
plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours() | 向当前对象添加几天、几周、几个月、几年、几小时 |
minusMonths() / minusWeeks()/ minusDays()/minusYears()/minusHours() | 从当前对象减去几月、几周、几天、几年、几小时 |
下面基本上都是API的调用,这里我就先摸摸鱼啦
public class internTest {
public static void main(String[] args) throws Exception {
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
Month month = localDateTime.getMonth();
System.out.println(month);
}
}
这边我不知道的IDEA怎么了,放上去都报红色,还能跑哈哈,不知道你们会不会遇到
解决
DateTimeFormat日期时间格式
这个类类似于前面的SimpleDateFormat
三种格式化
- 预定义的标准格式。如: ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
- 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
- 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
自定义是使用最多的创建形式
public class internTest {
public static void main(String[] args) throws Exception {
// 创建一个本地日期时间
LocalDateTime now = LocalDateTime.now();
// 方式一创建
DateTimeFormatter One = DateTimeFormatter.ISO_DATE;
String format = One.format(now);
System.out.println("方式一:"+format);
// 方式二创建对象
DateTimeFormatter Two = ofLocalizedDateTime(FormatStyle.LONG);
String format1 = Two.format(now);
System.out.println("方式二:"+format1);
// 方式三自定义格式
DateTimeFormatter Three = DateTimeFormatter.ofPattern("y年");
String format2 = Three.format(now);
System.out.println("方式三:"+format2);
}
}
常用的方法
方法 | 描述 |
---|---|
ofPattern(String pattern) | 静态方法 , 返 回 一 个 指 定 字 符 串 格 式 的 DateTimeFormatter |
format(TemporalAccessor t) | 格式化一个日期、时间,返回字符串 |
parse(CharSequence text) | 将指定格式的字符序列解析为一个日期、时间 |
下面对于时间相关,硅谷提供了还有好多教程。大家之后可以自行了解一下,我真的感觉这好多啊
比较器
这个比较器我暂时跳过一段,感兴趣看硅谷的视频哈哈
System(系统类)
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。 该类位于java.lang包。
由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实 例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便 的进行调用。
成员变量 System类内部包含in、out和err三个成员变量,
分别代表标准输入流 (键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
常用方法
方法 | 描述 |
---|---|
void gc() | 该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则 取决于系统中垃圾回收算法的实现以及系统执行时的情况。 |
native long currentTimeMillis() | 该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时 间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。 |
void exit(int status) | 该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表 异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。 |
String getProperty(String key): | 该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见 的属性名以及属性的作用如下表所示: |
String javaVersion = System.getProperty("java.version");
System.out.println("java的version:" + javaVersion);
String javaHome = System.getProperty("java.home");
System.out.println("java的home:" + javaHome);
String osName = System.getProperty("os.name");
System.out.println("os的name:" + osName);
String osVersion = System.getProperty("os.version");
System.out.println("os的version:" + osVersion);
String userName = System.getProperty("user.name");
System.out.println("user的name:" + userName);
String userHome = System.getProperty("user.home");
System.out.println("user的home:" + userHome);
String userDir = System.getProperty("user.dir");
System.out.println("user的dir:" + userDir);
Math算数类
java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回 值类型一般为double型。
静态方法:直接使用类进行调用
方法 | 描述 |
---|---|
long round(double a) | double型数据a转换为long型(四舍五入) |
random() | 返回0.0到1.0的随机数 |
max(double a,double b) | 两个数比较 |
min(double a,double b) | |
pow(double a,doble b) | a的b次幂 |
谢谢大家的观看,如果真的看到这里。我觉的也不可能。
终于写完这第三篇了,我本来是一个特别堕落的人,现在为了更好的自己,真的是一点点的让自己做这些事情。这70天我会慢慢的进步的,加油。有人看到这句话,可以三连一下吗,
你的鼓励是我最大的动力