目录
String类(绝对重点)
String类表示字符串,被final修饰,不能有子类,Java程序中的所有字符串文字(例如"abc")都实现为此类的实例。 字符串是不变的; 它们的值在创建后无法更改。
StringBuffer和StringBuilder支持可变字符串;因为String对象是不可变的,所以可以共享它们。即两个String对象,只要内容相同,则地址相同,除非用new 关键字创建一个String对象,那么即使内容相同,地址也不同。
常用构造方法
String(byte[] bytes)
通过使用平台的默认字符集解码指定的字节数组构造新的 String 。
String(char[] value)
分配新的 String ,使其表示当前包含在字符数组参数中的字符序列。
String(byte[] bytes, Charset charset)
构造一个新的String由指定用指定的字节的数组解码charset 。
字符串常量池
方法区(Method Area),又称永久代(Permanent Generation),常称为PermGen,又称非堆区(Non-Heap space)
方法区被所有线程共享,所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。简单来说,所有定义的方法的信息都保存在该区域,此区属于共享区间,这些区域存储的是:静态变量+常量+类信息(构造方法/接口定义)+运行时常量池
但是,实例变量存在堆内存中,和方法区无关。以上只是逻辑上的定义,在Hotspot中,方法区仅仅只是逻辑上的独立,实际上还是包含在Java堆中,也就是说,方法区在物理上属于Java堆区中的一部分,而永久区就是方法区的实现。
堆在逻辑上分为三部分(Perm):
新生代(Young Generation),常称为YoungGen
老年代(Old Generation),常称为OldGen、TenuringGen
永久代(Permanent Generation),常称为PermGen
StringBuffer和StringBuilder
StringBuilder 是线程不安全的实现,StringBuffer是线程安全的实现
通常用于字符串的拼接,例如:
StringBuilder sb = new StringBuilder();
sb.append("1");
sb.append("2");
sb.append("3");
String text = sb.toString();
注意:有字符串的拼接使用StringBuffer和StringBuilder,不推荐使用+号,这样会导致内存大量浪费。
String方法
SN(序号) | 方法描述 |
---|---|
1 | char charAt(int index) 返回指定索引处的 char 值。 |
2 | int compareTo(Object o) 把这个字符串和另一个对象比较。 |
3 | int compareTo(String anotherString) 按字典顺序比较两个字符串。 |
4 | int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 |
5 | String concat(String str) 将指定字符串连接到此字符串的结尾。 |
6 | boolean contentEquals(StringBuffer sb) 当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真。 |
7 | static String copyValueOf(char[] data) 返回指定数组中表示该字符序列的 String。 |
8 | static String copyValueOf(char[] data, int offset, int count) 返回指定数组中表示该字符序列的 String。 |
9 | boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 |
10 | boolean equals(Object anObject) 将此字符串与指定的对象比较。 |
11 | boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。 |
12 | byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
13 | byte[] getBytes(String charsetName) 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
14 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此字符串复制到目标字符数组。 |
15 | int hashCode() 返回此字符串的哈希码。 |
16 | int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 |
17 | int indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
18 | int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。 |
19 | int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
20 | String intern() 返回字符串对象的规范化表示形式。 |
21 | int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 |
22 | int lastIndexOf(int ch, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。 |
23 | int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。 |
24 | int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。 |
25 | int length() 返回此字符串的长度。 |
26 | boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。 |
27 | boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
28 | boolean regionMatches(int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
29 | String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
30 | String replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
31 | String replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 |
32 | String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。 |
33 | String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。 |
34 | boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始。 |
35 | boolean startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 |
36 | CharSequence subSequence(int beginIndex, int endIndex) 返回一个新的字符序列,它是此序列的一个子序列。 |
37 | String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。 |
38 | String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 |
39 | char[] toCharArray() 将此字符串转换为一个新的字符数组。 |
40 | String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 |
41 | String toLowerCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。 |
42 | String toString() 返回此对象本身(它已经是一个字符串!)。 |
43 | String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 |
44 | String toUpperCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。 |
45 | String trim() 返回字符串的副本,忽略前导空白和尾部空白。 |
46 | static String valueOf(primitive data type x) 返回给定data type类型x参数的字符串表示形式。 |
Objects
此类包含static实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序包括null或null方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及检查索引或子范围值是否超出范围。
常用方法
- equals方法
static boolean equals(Object a, Object b)
如果参数相等返回 true,其他返回 false。因此,如果这两个参数是null , 返回true,如果只有一个参数为null , 返回false。 否则,通过使用第一个参数的equals方法确定相等性。
- isNull方法
static boolean isNull(Object obj)
如果提供的参考是 null返回 true,否则返回 false 。
- nonNull方法
static boolean nonNull(Object obj)
如果提供的参考是非 null返回 true,否则返回 false 。
- requireNonNull方法
static <T> T requireNonNull(T obj)
检查指定的对象引用是不是 null 。此方法主要用于在方法和构造函数中进行参数验证,如果是,则抛出自定义的NullPointerException。
Math
类Math包含用于执行基本数字运算的方法,例如基本指数,对数,平方根和三角函数。Math类封装了很多与数学有关的属性和方法。这个类比较特殊,首先它和String类一样都是用final修饰,所以不能有子类,还有就是它的构造方法是私有的,也就是我们不能通过new的方法在其它类中构造Math对象,那么怎样调用它的方法,由于它的所有的方法都是静态方法,那么可以直接使用类名访问方法。
常用方法
- ceil方法
返回最小的(最接近负无穷大)double 值,该值大于或等于参数,并且等于某个整数。double
- floor方法
返回最大的(最接近正无穷大)double 值,该值小于或等于参数,并且等于某个整数。double
- abs方法
返回值的绝对值。double、float、int、long
- max方法
返回两个值中较大的一个。double、float、int、long
- min方法
返回两个值中较小的一个。double、float、int、long
- round方法(double、float)
返回与参数最接近的值(long、int),并将关系四舍五入为正无穷大。
Date
Date类表示特定的时刻,精度为毫秒。
在JDK 1.1之前, Date类还有两个附加功能。 它允许将日期解释为年,月,日,小时,分钟和秒值。 它还允许格式化和解析日期字符串。 不幸的是,这些功能的API不适合国际化。
从JDK 1.1开始, Calendar类应用于在日期和时间字段之间进行转换,而DateFormat类应用于格式化和解析日期字符串。 不推荐使用Date中的相应方法。
构造方法
- Date()
分配 Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒。
- Date(long date)
分配 Date对象并初始化它以表示自标准基准时间(称为“纪元”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。
常用方法
- getTime()方法
返回自此 Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数(long类型)。
- toString()方法
将此 Date对象转换为以下形式的 String : dow mon dd hh:mm:ss zzz yyyy
dow是星期几( Sun, Mon, Tue, Wed, Thu, Fri, Sat )的。
mon是个月( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec )。
dd是该月的第几天( 01到31 ),以小数点后两位数。
hh是一天中的小时( 00到23 ),以小数点后两位数。
mm是小时内的分钟( 00到59 ),以小数点后两位数。
ss是分钟内的第二个( 00到61 ,两位十进制数字。
zzz是时区(可能反映夏令时)。 标准时区缩写包括方法parse识别的缩写。 如果时区信息不可用,则zzz为空 - 也就是说,它根本不包含任何字符。
yyyy是年份,十四位数。
DateFormat
DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化和分析日期或时间。 日期/时间格式化子类(例如SimpleDateFormat )允许格式化(即,日期→文本),解析(文本“日期”)和规范化。
例如:SimpleDateFormat sdf = new SimpleDateFormat(pattern:"yyyy-MM-dd HH:mm:ss")
y : 年 M : 月 d : 天 H : 时 m : 分 s : 秒
常用方法
- format方法(日期→文本)
将date对象以自定义的格式转换为日期字符串
例如:String text = sdf.format(new Date());
- parse方法(文本→日期)
将自定义的格式日期字符串转换成date对象
例如:Date date = sdf.parse("2020-02-02 00:00:00");
Calendar
java.util.Calendar类是一个日历类
Calendar类是一个抽象类,里边提供了很多操作日历字段的方法,如:YEAR、 MONTH、 DAY OF MONTH、HOUR
Calendar类无法直接创建对象使用,里边有一个静态方法叫getInstance(),getInstance()方法返回了 Calendar类的子类对象
static Calendar getInstance()使用默认时区和语言环境获得一个日历。
常用字段
static int DATE | 字段编号表示get和 set当月的日期。 |
static int DAY_OF_MONTH | 字段编号表示get和 set当月的日期。 |
static int DAY_OF_WEEK | 字段编号表示get和 set表示星期几。 |
static int DAY_OF_WEEK_IN_MONTH | 字段编号表示get和 set当前月份中某一天的序号。 |
static int DAY_OF_YEAR | 字段编号表示get和 set当年的日期编号。 |
static int HOUR | 字段编号表示get和 set上午或下午的小时。 |
static int HOUR_OF_DAY | 字段编号表示get和 set当天的小时。 |
static int MINUTE | 字段编号表示get和 set字段编号表示小时内的分钟。 |
static int MONTH | 字段编号表示get和 set月份。 |
static int SECOND | 字段编号表示get和 set分钟内的第二个。 |
static int WEEK_OF_MONTH | 字段编号get和 set周数。 |
static int WEEK_OF_YEAR | 字段编号表示get和 set当前年份的周数。 |
static int YEAR | 字段编号为 get和 set表示年份。 |
常用方法
- 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对象。
- public final void clear()
// 设置此Calendar未定义的所有日历字段值和时间值(与Epoch的毫秒偏移量)。Calendar实现类可以使用其特定的默认字段值进行日期/时间计算。例如,如果YEAR字段值未定义,则GregorianCalendar使用1970。
- public int getActualMaximum(int field)
// 根据传入的参数代表的意思(年、月、周等)查询当前(年、月、周)拥有的最大值。
Arrays
Arrays 是JDK提供的操作数组的工具类,array类提供了动态创建和访问 Java 数组的方法。Arrays此类包含用来操作数组(比如排序和搜索)的各种方法。
该类包含用于操作数组的各种方法(例如排序和搜索)。 此类还包含一个静态工厂,允许将数组视为列表。
如果指定的数组引用为null,则此类中的方法都抛出NullPointerException ,除非另有说明。
常用方法
- binarySearch方法
binarySearch(byte[] a, byte key)
使用二进制搜索算法在指定的字节数组中搜索指定的值。
binarySearch(byte[] a, int fromIndex, int toIndex, byte key)
使用二进制搜索算法搜索指定值的指定字节数组的范围。
byte、char、double、float、int、long、short、Object、T
- copyOf方法
copyOf(boolean[] original, int newLength)
复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度。
boolean(使用 false )
byte、char、double、float、int、long、short(使用零)
T、U(使用空值)
- equals方法
equals(boolean[] a, boolean[] a2)
如果两个指定的布尔数组彼此相等 ,则返回 true 。
equals(boolean[] a, int aFromIndex, int aToIndex, boolean[] b, int bFromIndex, int bToIndex)
如果两个指定的布尔数组在指定范围内彼此相等 ,则返回true。
boolean、byte、char、double、float、int、long、short、Object、T
- sort方法
sort(byte[] a)
将指定的数组按升序排序。
sort(byte[] a, int fromIndex, int toIndex)
按升序对数组的指定范围进行排序。
byte、char、double、float、int、long、short、Object、T
- toString方法
toString(boolean[] a)
返回指定数组内容的字符串表示形式。
boolean、byte、char、double、float、int、long、short、Object
BigDecimal
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal类创建的是对象,不能使用传统的+、-、*、/等算术运算符直接对其进行数学运算,而必须调用其对应的方法.方法的参数也必须是BigDecimal类型的对象.
BigDecimal b1 = new BigDecimal("20");
BigDecimal b2 = new BigDecimal("30");
b1.add(b2) :加法,求两个BigDecimal类型数据的和。
b1.subtract(b2):减法,求两个BigDecimal类型数据的差。
b1.multiply(b2):乘法,求两个BigDecimal类型数据的积。
b1.remainder(b2):求余数,求b1除以b2的余数。
b1.max(b2) : 最大数,求两个BigDecimal类型数据的最大值
b1.min(b2) : 最小数,求两个BigDecimal类型数据的最小值。
bi.abs():绝对值,求BigDecimal类型数据的绝对值。
b1.negate():相反数,求BigDecimal类型数据的相反数。
这里把除法单独拉出来
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
除法 divide 有三个参数的方法,第一参数表示除数,第二个参数表示小数点后保留位数,第三个参数表示取舍规则。只有在作除法运算或四舍五入时才用到取舍规则。 因为BigDecimal除法可能出现不能整除的情况,比如 4.5/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。所以当我们用三参数的除法方法时,规定了保留几位小数以及你的保留方式,就可以避免异常。
System
System类包含几个有用的类字段和方法。 它无法实例化。 System类提供的设施包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。
常用字段
- static PrintStream err“标准”错误输出流。
- static InputStream in “标准”输入流。
- static PrintStream out “标准”输出流。
常用方法
- static void gc()
运行垃圾收集器。 调用gc方法表明Java虚拟机花费了大量精力来回收未使用的对象,以使其当前占用的内存可用于快速重用。 当控制从方法调用返回时,Java虚拟机已尽最大努力从所有丢弃的对象中回收空间。
- static void exit(int status)
终止当前运行的Java虚拟机。 该参数用作状态代码; 按照惯例,非零状态代码表示异常终止。
此方法调用类Runtime的exit方法。 此方法永远不会正常返回。
- static long currentTimeMillis()
以毫秒为单位返回当前时间。当前时间与UTC时间1970年1月1日午夜之间的差异,以毫秒为单位。
- static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。
参数
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
异常
IndexOutOfBoundsException - 如果复制会导致访问数组边界外的数据。
ArrayStoreException - 如果由于类型不匹配, src阵列中的元素无法存储到 dest阵列中。
NullPointerException - 如果 src或 dest是 null 。