个人学习笔记,部分图片资源来自学习文件。 感谢尚硅谷。
文章首部
目录
一、字符串相关的类
1、String 类
字符串,使用一对 双引号----“ ”,包起来表示
- 1.String 声明为final ,即不能被继承
- 2.String实现了两个接口:
- Serializable接口:表示字符串是支持序列化的
- Comparable接口:表示String可以比较大小
- 3.String内部定义了final char[] value 用于存储字符串数据
- 4.String :代表不可变的字符序列,简称不可变性
体现:以下三种情况要重新指定内存区进行赋值,不能使用原先的value进行赋值:- 当字符串重新赋值时
- 对现有的字符串进行连接操作时
- 当调用String中的replace()修改指定字符或字符串时
- 5.通过字面量的方式(区别于new)给字符串赋值,此时的字符串值声明在字符串常量池中
- 6.字符串常量池中不会存储相同内容的字符串
- 7.拼接 注意点:
- 常量和常量的拼接结果在常量池,且不会存在相同结果的常量
- 拼接时只要其中有一个是变量,结果就在堆空间中
- 拼接的结果如果调用intern(),返回值就在常量池中
- 8.实例化方式:
//方式一:字面量定义 s1的数据java声明在方法区的字符串常量池
String s1 = "java";
//方式二:new + 构造器 s2保存的地址值,是数据在堆空间中开辟空间后对应的地址值
String s2 = new String("java");
2、StringBuffer
java.lang.StringBuffer代表可变的字符序列,不同于String,其对象必须使用构造器生成。
StringBuffer常用方法:
3、StringBuilder
StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且
提供相关功能的方法也一样
4、String、StringBuffer、StringBuilder 的区别
- String(JDK1.0):不可变字符序列
- StringBuffer(JDK1.0):可变字符序列、效率低、线程安全
- StringBuilder(JDK 5.0):可变字符序列、效率高、线程不安全 (如不考虑线程安全,首选)
注意:作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder
会改变其值。
返回目录
二、JDK 8 之前的日期时间API
1、java.lang.System
System类提供的==public static long currentTimeMillis()==用来返回当前时
间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差(时间戳)。–此方法适于计算时间差
2、java.util.Date
- 两个构造器的使用
- Date() : 创建一个对应当前时间的对象
- Date(long date) : 创建指定毫秒数的对象
- 两个方法的使用
- toString() : 显示当前的年、月、日、时、分、秒、时区
- getTime (): 获取当前Date对象对应的毫秒数(时间戳)
3、java.sql.Date(extends java.util.Date)
数据库部分:对应着数据库中的日期类型的变量
4、SimpleDateFormat
//实例化SimpleDateFormat:默认的
SimpleDateFormat sdf = new SimpleDateFormat();
// 格式:日期-Tue May 12 22:13:14 CST 2020 字符串-2020/5/12 下午10:08
//开发中基本不用默认格式,自定义格式类型
//2020-05-12 10:27:58
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String format1 = sdf1.format(date);
//格式化: 日期——> 字符串
System.out.println(format1);//2020-05-12 10:27:58
//解析: 字符串--> 日期
Date date2 = null;
try {
//当解析时,parse()只能识别构造器指定的日期格式
date2 = sdf1.parse("2020-05-12 10:27:58");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date2); //Tue May 12 10:27:58 CST 2020
5、Calendar
java.util.Calendar(日历)类是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
获取Calendar实例的方法
- 调用它的子类GregorianCalendar的构造器
- 使用静态方法-----Calendar.getInstance()–该方法new的对象也属于GregorianCalendar的对象
//常用方法
//get()
//当前天数是一个月中的第几天 13
System.out.println(calerdar.get(Calendar.DAY_OF_MONTH));
//当前天数是一年中的第几天 134
System.out.println(calerdar.get(Calendar.DAY_OF_YEAR));
//当前天数是一个星期中的第几天,从星期日开始算 4
System.out.println(calerdar.get(Calendar.DAY_OF_WEEK));
//set():修改Calendar中的值 22
calerdar.set(Calendar.DAY_OF_MONTH,22);
System.out.println(calerdar.get(Calendar.DAY_OF_MONTH));
//add() 22+3-->25 减天数就加负数
calerdar.add(Calendar.DAY_OF_MONTH,3);
System.out.println(calerdar.get(Calendar.DAY_OF_MONTH));
//getTime() 日历类--->Date对象
Date date3 = calerdar.getTime();
System.out.println(date3);//Mon May 25 09:07:51 CST 2020
//setTime() Date对象--->日历类
Date date4 = new Date();
calerdar.setTime(date4);
System.out.println(calerdar.get(Calendar.DAY_OF_MONTH));
三、JDK 8 中新的日期时间API
java.time --(吸收了Joda.time),弥补了JDK 8 之前的一些缺陷
1、LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime 类是其中较重要的几个类,它们的实例
是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。
- LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期
- LocalTime表示一个时间,而不是日期
- LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一
//获取当前时间---now()
LocalDate localDate = LocalDate.now();
LocalTime localTime= LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
//设定指定的年月日时分,没有偏移量--of()
LocalDateTime localDateTime1 = LocalDateTime.of(2020,5,13,9,40);
System.out.println(localDateTime1);//2020-05-13T09:40
//getXxx():
System.out.println(localDateTime.getDayOfMonth());
System.out.println(localDateTime.getDayOfWeek());
System.out.println(localDateTime.getMonth());
System.out.println(localDateTime.getMonthValue());
System.out.println(localDateTime.getMinute());
//临时改变,体现了不可变性--with()
LocalDate localDate1 = localDate.withDayOfMonth(22);
System.out.println(localDate);
System.out.println(localDate1);
//增加---plus()
LocalDateTime localDateTime2 = localDateTime.plusDays(5);
System.out.println(localDateTime);
System.out.println(localDateTime2);
//减少--minus()
LocalDateTime localDateTime3 = localDateTime.minusDays(3);
System.out.println(localDateTime);
System.out.println(localDateTime3);
2、 瞬时点:Instant
Instant:时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳
类似于java.util.Date类
// Instant
返回UTC时区的标准时间
Instant instant = Instant.now();
System.out.println(instant);
//根据时区时间差进行改变,偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
//获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数
long milli = instant.toEpochMilli();
System.out.println(milli);
//通过指定的毫秒数获得指定的日期--ofEpochMilli()
Instant instant1 = Instant.ofEpochMilli(1589339875695L);
System.out.println(instant1);
3、格式化与解析日期或时间-java.time.format.DateTimeFormatter
类似于SimpleDateFormat类,实例化方式:
- 预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
- 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
- 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
/*
DateTimeFormatter:格式化与解析日期或时间
*/
//实例化方式:
//预定义的标准格式\本地化相关的格式 略
//重点使用自定义格式,较灵活
// 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
String str4 = formatter2.format(LocalDateTime.now());
System.out.println(str4);//2020-05-13 12:22:39
//解析
TemporalAccessor parse1 = formatter2.parse("2020-05-13 12:22:39");
System.out.println(parse1);
//{MinuteOfHour=22, NanoOfSecond=0, HourOfAmPm=0, MilliOfSecond=0, MicroOfSecond=0,
// SecondOfMinute=39},ISO resolved to 2020-05-13
四、Java 比较器
1、自然排序:java.lang.Comparable
Comparable接口的使用举例:
1、像String 、包装类等实现了Comparable接口,重写了compareTo()方法
2、像String 、包装类重写compareTo()后,从小到大排列
3、重写的规则:
如果当前对象this大于形参对象obj,返回正整数
如果当前对象this小于形参对象obj,返回负整数
如果当前对象this等于形参对象obj,返回零
4、对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo()方法在compareTo()中指明排序
//指明对象排序方式: 价格从低到高;再按照产品名称从低到高
@Override
public int compareTo(Object o) {
if (o instanceof Goods){
Goods goods = (Goods)o;
if (this.price > goods.price){
return 1;
}else if (this.price < goods.price){
return -1;
}else {
// return 0;
return this.name.compareTo(goods.name);
}
//方式二
// return Double.compare(this.price,goods.price);
}
throw new RuntimeException("传入的数据类型不一样");
}
2、定制排序:java.util.Comparator
当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,
或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那
么可以考虑使用 Comparator 的对象来排序
Comparator com = new Compare(){
public int compare(Object o1, Object o2){
if(o1 instanceof XXX && O2 instanceof xxx){
}
return 0;//可以实现排序条件的嵌套,再来个if判断
}
}
五、 System类
- System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。
该类位于java.lang包 - 由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实
例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便
的进行调用 - System类内部包含in、out和err三个成员变量,分别代表标准输入流
(键盘输入),标准输出流(显示器)和标准错误输出流(显示器) - 成员方法:
- native long currentTimeMillis():该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数
- void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等
- void gc():该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
- String getProperty(String key):该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:
返回目录
六、 Math类
java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回
值类型一般为double型.
返回目录
七、BigInteger与BigDecimal
1、BigInteger
java.math包的BigInteger可以表示不可变的任意精度的整数。
构造器.
BigInteger(String val):根据字符串构建BigInteger对象
常用方法常用方法.
2、BigDecimal
一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中
要求数字精度比较高,故用到java.math.BigDecimal类
BigDecimal类支持不可变的、任意精度的有符号十进制定点数
构造器
- public BigDecimal(double val)
- public BigDecimal(String val)
常用方法
- public BigDecimal add(BigDecimal augend)
- public BigDecimal subtract(BigDecimal subtrahend)
- public BigDecimal multiply(BigDecimal multiplicand)
- public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
math.BigDecimal==类
BigDecimal类支持不可变的、任意精度的有符号十进制定点数
构造器
- public BigDecimal(double val)
- public BigDecimal(String val)
常用方法
- public BigDecimal add(BigDecimal augend)
- public BigDecimal subtract(BigDecimal subtrahend)
- public BigDecimal multiply(BigDecimal multiplicand)
- public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)