^23b675
Objcet类
是所有类的父类Objcet类
在java.lang
包下Object类
只有无参构造器
常用方法有:
1. `equals()`
2. `hashCode()`
3. `wait()`
4. `clone()`
5. `finalize()`
6. `notify()`
java的每个[[3-Java SE 入门#^93d336|基本数据类型]]都有包装类。
- 集合只能存储包装类型,不能存储基本数据类型
- 基本数据类型不符合Java面向对象思想
基本数据类型对于的包装类型: ^03713e
byte - Byte 继承于Number -继承于Object
short - Short 继承于Number -继承于Object
int - Integer 继承于Number -继承于Object
long - Long 继承于Number -继承于Object
float - Float 继承于Number -继承于Object
double - Double 继承于Number -继承于Object
char - Character 继承于Object
boolean - Boolean 继承于Object
- 所在包
java.lang
- 继承结构
Integer -Number - Object
- 类修饰符
final
- 实现的接口:
Serializable
: 支持序列化和反序列化Comparable<Integer>
: 比较器。使用集合时排序用 - 构造器: 没有无参构造
Integer(int value)
Integer(String s)
- 字段:
MAX_VALUE
,MIN_VALUE
,TYPE
,SIZE
^4b0ae1
-
装箱 :
valueOf()
Integer i1 = Integer.valueOf(10);
由基本数据类型转为包裹类型
-
拆箱:
intValue()
int i2 = new Integer(10).intValue();
由包裹类型转为基本数据类型
compare(int x,int y)
equals(Object obj)
parseInt(String s)
toString()
Math类的直接父类是Object
Math类包含执行基本数字运算的方法,如指数,对数,平方根和三角函数
-
构造器是私有的,不实现任何接口
-
Math
下的字段和方法都是静态的。因此可以使用静态导入。import static java.lang.Math.*
静态导入后,使用其方法和字段值就不需要
Math.PI
了 可以直接PI
-
Math
无法做数值特别精细的计算
abs(int a)
返回值为int
绝对值random()
返回值[0,1) 区间内的随机数sqrt(double a)
返回平方根floor()
向下取整ceil()
向上取整round()
四舍五入
Random是java.util包下的类
Random类的直接父类是Object类
该类的实例用于生成伪随机数的流
Math.random()
的底层实现也是使用了Random
类
为Random
类的随机数指定范围: nextInt(扩大倍数)
例如:获取10以内的随机整数 `new Random().nextInt(10)`
以上写法等价于 `Math.random()*10`
String类的直接父类是Object类
String类存在于java.lang包下
String类是final修饰的,不可被继承
字符串底层通过char
类型数组进行内容存储 >> JDK 8
JDK 8 之后,字符串底层通过byte
类型数组来存储内容 private final byte[] value;
并且该数组是final
类型,就意味着一旦被初始化,值就不可更改。
-
compareTo(String anotherString)
按照字典顺序比较两个字符串
- 如果两个字符串长度相同,内容也相同,返回0
- 如果字符串长度相同,内容不同,则返回第一个不同的字符的ASCII码差值(前一个减去后一个)
- 如果字符串长度不同,内容相同,返回长度的差值
- 如果长度不同,内容也不同,则返回第一个不同的字符的ASCII码差值(前一个减去后一个)
-
concat(String str)
将指定的字符串连接到该字符串的末尾
得到的是一个新的匿名字符串.
-
isEmpty()
判断字符串对象是否为空
当且仅当字符串对象的
length()
为0时返回false
-
substring(int beginIndex,int endIndex)
截取字符串 范围是
[beginIndex, endIndex)
-
split(String regex,int limit)
将此字符串拆分为给定的regex表达
-
toLowerCase()
将字符串转为全小写
-
toUpperCase()
将字符串转为全大写
-
equalsIgnoreCase(String anotherString)
忽略大小写比较字符串
-
trim()
返回字符串,并删除任何前导和尾随空格
字符串分为两大类:不可变字符串(String)和可变字符串(StringBuffer和StringBuilder)
直接父类是Object类
实现了Serialiazable , Appendable , CharSequence接口
JDK8之前通过char[]
存储单个元素
JDK8之后通过byte[]
存储单个元素
StringBuilder
通过无参构造设置初始空间大小是16byte
count
标记元素个数
append(String str)
拼接内容delete(int start,int end)
删除区间在[start,end)
中的元素insert(int offset,char c)
在offset下标索引中插入char类型的参数creverse()
将该字符序列反序输出replace(int start, int end, String str)
用指定的str替换索引位置处的字符内容 区间是[start,end)
charAt(int index)
返回索引位置的内容setCharAt(int index, char ch)
将指定下标索引出的字符替换为ch
StringBuffer
类和StringBuilder
相似,构造方法和方法基本相同。
不同的是:
`StringBuffer`是线程安全的,但是效率偏低。`StringBuilder`是线程不安全的,但是效率偏高。
通常情况下创建一个可变字符串,优先考虑使用`StringBuilder`
在 Java 中,
StringBuffer
是可变的字符串,通过调用方法来修改其内容,而不是创建新的对象。当你使用append
方法修改StringBuffer
时,它会直接在原始对象上进行更改,而不是创建一个新的对象。
StringBuffer
: JDK1.0开始 效率低 线程安全
StringBuilder
: JDK1.5开始 效率高 线程不安全
是java.util包下的类
直接父类是Object类
默认时间格式是:
Tue Aug 08 14:58:30 CST 2023
时间类主要用于存储时间
获取系统当前时间推荐使用: System.currentTimeMillis()
此方法通常用于衡量一些算法的耗时
该类的直接父类是java.util.Date
- 该类对象通过传入一个毫秒时间来构造:
Date(long date)
- 打印对象输出的结果只有年月日,没有时分秒。而
java.util.Date
打印出来有年月日,时分秒 - 字符串转时间:
valueOf(String s )
- 如何将
String
类型转换为java.util.Date
类型?- 将
String
转换为java.sql.Date
- 将
java.sql.Date
转换为java.util.Date
SimpleDateFormat
类可将String
类型直接转换为java.util.Date
简化了流程
- 将
日历类 ,用来处理/计算时间。如获取某个时间的特定部分,对特定部分做加减操作
-
Calendar是一个抽象类。提供了一个静态方法
getInstance()
来获取实例Calendar calendar = Calendar.getInstance();
-
Date
与Calendar
之间相互转换Calendar
转为Date
:c.getTime();
Date
转为Calendar
:c.setTime(date)
-
操作时间
获取某个部分:
get(int i)
获取年:`get(Calendar.YEAR)` 获取月:`get(Calendar.MONTH)` ...
-
void add(int field,int amount)
为给定日历的字段添加或减去指定的偏移量
例如:
//当前系统时间为2023/8/8
c.add(Calendar.YEAR,10); //年份偏移量 +10
c.add(Calendar.MONTH, -2); //月份偏移量 -2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(c.getTime()));
----------------------------
输出结果: 2033-06-08
-
void set(int field,int value)
给指定的字段设定值
例如:
calendar.set(Calendar.YEAR,2000)
Calendar中的静态字段值:
ERA
(时代):
BC
(Before Christ,公元前)AD
(Anno Domini,公元)
YEAR
(年):
- 表示年份,如2023、2024等。
MONTH
(月):
- 月份,范围从0(一月)到11(十二月)。
WEEK_OF_YEAR
(年中周数):
- 表示一年中的周数,范围从1到53。
WEEK_OF_MONTH
(月中周数):
- 表示一个月中的周数,范围从1到6。
DATE
(日):
- 表示一个月中的日期,范围从1到31。
DAY_OF_MONTH
(月中天数):
- 表示一个月中的天数,范围从1到31。
DAY_OF_WEEK
(星期几):
- 表示一周中的某天,范围从1(星期日)到7(星期六)。
DAY_OF_WEEK_IN_MONTH
(月中第几周的星期几):
- 表示一个月中的第几周的星期几。
AM_PM
(上午/下午):
- 表示上午(0)或下午(1)。
HOUR
(时):
- 12小时制的小时数,范围从0到11。
HOUR_OF_DAY
(天中的小时数):
- 24小时制的小时数,范围从0到23。
MINUTE
(分):
- 分钟数,范围从0到59。
SECOND
(秒):
- 秒数,范围从0到59。
MILLISECOND
(毫秒):
- 毫秒数,范围从0到999。
- 创建本地当前时间:
now()
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
- 设置日期时间 :
of()
LocalDate localDate1 = LocalDate.of(2023, 9, 9);
LocalTime localTime1 = LocalTime.of(15, 23,45);
LocalDateTime localDateTime1 = LocalDateTime.of(2023, 8, 9, 8, 5, 45);
- 获得属性方法 :
getXXX()
System.out.println(localDate.getYear());
System.out.println(localDate.getMonth());
System.out.println(localDate.getMonthValue());
System.out.println(localDate.getDayOfMonth());
System.out.println(localDate.getDayOfWeek());
- 对时间某一部分设置,增加或减少 :
withMonths()
plusMonths()
minusMonths()
//localDate 是当前时间的对象
LocalDate localDate2 = localDate.withMonth(12);
LocalDate localDate3 = localDate.plusMonths(1);
LocalDate localDate4 = localDate.minusMonths(5);
=============================
以上代码打印结果是:
2023-12-09
2023-09-09
2023-03-09
String
和时间类型转换-
String
转为时间parse(String str)
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy/MM~~dd HH:mm@ss");
System.out.println(dtf2.parse("2028/10~~01 15:31@28"));
-
时间转为
String
format(LocalDateTime lc)
//在JDK8以上的版本,该语句可能会报错
DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
System.out.println(dtf.format(LocalDateTime.now()));
-