常用类库

String

概述

String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。
字符串是不变的,它们的值在创建后无法更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,所以可以共享它们。
Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串。

String的两种赋值方式

在使用String的时候有两种赋值方式:
一种为通过字面值直接赋值,String text = “Hello”
另一种通过关键字new调用String的构造方法赋值:String str = new String(“hello”)

String的比较

案例1:

public class Test {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = new String("hello");
        String str3 = str2;
        System.out.println(str1==str2);//false
        System.out.println(str1==str3);//false
        System.out.println(str2==str3);//true
    }
}

这些字符串的内容都是一样的,结果却是false,这是因为==符号比较的是地址,本来直接通过字面值直接赋值的话,的确是会共享一个地址,但是str2调用了String的构造方法创造了一个新的对象,所以导致两者的地址不同了。平常在进行字符串的比较时,使用的更多的还是equals

案例2:

public class Test {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "world";
        String str3 = "helloworld";
        System.out.println(str3=="hello"+"world");//true
        System.out.println(str3==str1+str2);//false
    }
}

两种相加方式看似相同,实则不同,前面的是先进行的字符串拼接,再进行的比较,“hello”+“world"相当于是先拼接成了"helloworld"再进行的比较,由于常量池中已经有了"helloworld”,所以共享了地址,于是就是true了;后面的str1+str2,由于是变量的相加,于是先开辟了新的空间,在进行的比较,所以就导致了地址的不同。

字符串常量池

1、方法区,又称永久代(Permanent Generation) ,常称为PermGen,位于非堆空间,又称非堆区(Non-Heapspace)。

方法区是被所有线程共享。
所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。
简单说,所有定义的方法的信息都保存在该区域,此区属于共享区间。
这些区域存储的是:静态变量+常量+类信息(构造方法/接口定义) +运行时常量池。

但是,实例变量存在堆内存中,和方法区无关。

以上,只是逻辑上的定义。在HotSpot中,方法区仅仅只是逻辑上的独立,实际上还是包含在Java堆中,也是就说,方式区在物理上属于Java堆区中的一部分,而永久区(Permanent Generation) 就是方法区的实现。

2、堆(heap)
一个JVM实例只存在一个堆内存, 堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行。

堆在逻辑上分为三部分(Perm) :

新生代(Young Generation, 常称为YoungGen)
老年代(o1d Generation, 常称为01dGen、Tenur ingGen)
永久代(Permanent Generation, 常称为PermGen)

2.1、新生区(New/Young Generation)
新生代(Young Generation) ,常称为YoungGen,位于堆空间;

新生区又分为Eden区和Survior (幸存区)。
Eden :新创建的对象
Survior 0、 1:经过垃圾回收,但是垃圾回收次数小于15次的对象

2.2、养老代(old Generation)
老年代(old Generation) ,常称为oldGen,位于堆空间;

old :垃圾回收次数超过15次,依然存活的对象

2.3、永久区(Permanent Generation)
永久代(Permanent Generation) ,常称为PermGen, 位于非堆空间。

永久区是一个常驻内存区域,用于存放JDK自身所携带的Class,Interface的元数据,也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM 才会释放此区域所占用的内存。

2.3.1、方法区的实现的演变:
Jdk1.7之前: hotspot虚拟机对方法区的实现为永久代;
Jdk1.8及之后: hotspot移除了永久代用元空间(Metaspace),
2.3.2、运行时常量池存和字符串常量池的变化
JDK1.7之前:
运行时常量池(包含字符串常量池)存放在方法区,此时hotspot虚拟机对方法区的实现为永久代。

JDK1.7 :
字符串常量池被从方法区拿到了堆中;
运行时常量池剩下的东西还在方法区,也就是hotspot中的永久代。

JDK1.8 :
hotspot移除了永久代,用元空间(Metaspace)取而代之。这时候,
字符串常量池还在堆,
运行时常量池还在方法区,只不过方法区的实现从永久代变成元空间(Metaspace)。

String类常用方法

方法解释说明
char charAt​(int index)返回指定索引处的 char值
boolean equals​(Object anObject)将此字符串与指定的对象进行比较
boolean equalsIgnoreCase​(String anotherString)将此 String与另一个 String比较,忽略了大小写
int indexOf​(String str)返回指定子字符串第一次出现的字符串中的索引
int lastIndexOf​(String str)返回指定子字符串最后一次出现的字符串中的索引
int length()返回此字符串的长度
String replace​(char oldChar, char newChar)返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar
boolean startsWith​(String prefix)测试此字符串是否以指定的前缀开头
boolean endsWith​(String suffix)测试此字符串是否以指定的后缀结尾
String substring​(int beginIndex)返回一个字符串,该字符串是此字符串的子字符串
String[] split​(String regex)将此字符串拆分为给定 regular expression的匹配项
String toLowerCase()将此字符串与指定的对象进行比较
String toUpperCase()使用默认语言环境的规则将此 String所有字符转换为大写
String trim()返回一个字符串,其值为此字符串,删除了所有前导和尾随空格,其中space被定义为其代码点小于或等于 ‘U+0020’ (空格字符)的任何字符
static String valueOf​(char c)返回 char参数的字符串表示形式
char[] toCharArray()将此字符串转换为新的字符数组

Objects工具类

概述

此类包含static实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序包括null或null方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及检查索引或子范围值是否超出范围。

常用方法

方法解释说明
static boolean equals​(Object a, Object b)返回 true如果参数相等,其他false
static int hashCode​(Object o)返回对象o的哈希码
static boolean isNull​(Object obj)返回 true如果提供的参考是 null ,否则返回 false
static boolean nonNull​(Object obj)返回 true如果提供的参考是非 null否则返回 false
static T requireNonNull​(T obj)检查指定的对象引用是否不是 null
static String toString​(Object o)返回调用的结果 toString对于非 null参数, "null"为 null的说法

Math工具类

概述

类Math包含用于执行基本数字运算的方法,例如基本指数,对数,平方根和三角函数。

常用方法

方法解释说明
static double abs​(double a)返回 double值的绝对值
static double ceil​(double a)返回大于或等于参数且等于数学整数的最小值(最接近负无穷大) double
static double floor​(double a)返回小于或等于参数且等于数学整数的最大值(最接近正无穷大) double
static double max​(double a, double b)返回两个 double值中较大的 double
static double min​(double a, double b)返回两个 double值中较小的 double
static double pow​(double a, double b)返回第一个参数的值,该值是第二个参数的幂
static double random()返回带有正号的 double值,大于或等于 0.0且小于 1.0
static long round​(double a)返回与参数最接近的 long ,并将关系四舍五入为正无穷大
static double random()返回第一个参数的值,该值是第二个参数的幂
static double random()返回第一个参数的值,该值是第二个参数的幂

Arrays工具类

概述

该类包含用于操作数组的各种方法(例如排序和搜索)。 此类还包含一个静态工厂,允许将数组视为列表。
如果指定的数组引用为null,则此类中的方法都抛出NullPointerException ,除非另有说明。

常用方法

方法解释说明
static int binarySearch​(byte[] a, byte key)使用二进制搜索算法在指定的字节数组中搜索指定的值
static int compare​(char[] a, char[] b)返char字典顺序比较两个 char阵列
static byte[] copyOf​(byte[] original, int newLength)使用零复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度
static boolean equals​(char[] a, char[] a2)如果两个指定的字符数组彼此 相等 ,则返回 true
static void fill​(char[] a, char val)将指定的char值分配给指定的chars数组的每个元素
static int mismatch​(char[] a, char[] b)查找并返回两个 char数组之间第一个不匹配的索引,否则如果未找到不匹配则返回-1
static void sort​(char[] a)将指定的数组按升序排序
static IntStream stream​(int[] array)返回以指定数组作为源的顺序IntStream
static String toString​(char[] a)返回指定数组内容的字符串表示形式

Date工具类

概述

Date类表示特定的时刻,精度为毫秒。

常用方法

方法解释说明
boolean after​(Date when)测试此日期是否在指定日期之后
boolean before​(Date when)测试此日期是否在指定日期之前
Object clone()返回此对象的副本
int compareTo​(Date anotherDate)比较两个日期
boolean equals​(Object obj)比较两个相等的日期
long getTime()返回自此 Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数
int hashCode()返回此对象的哈希码值
void setTime​(long time)将此 Date对象设置为表示格林尼治标准时间1970年1月1日00:00:00之后的 time毫秒的时间点
String toString()将此 Date对象转换为 String

DateFormat工具类

概述

DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化和分析日期或时间。 日期/时间格式化子类(例如SimpleDateFormat )允许格式化(即,日期→文本),解析(文本“日期”)和规范化。 日期表示为Date对象或自1970年1月1日00:00:00 GMT以来的毫秒数。

转换格式

在这里插入图片描述

常用方法

方法解释说明
String format​(Date date)将Date格式化为日期时间字符串
Calendar getCalendar()获取与此日期/时间格式化程序关联的日历
Date parse​(String source)从给定字符串的开头解析文本以生成日期
SimpleDateFormat​(String pattern)构造一个 SimpleDateFormat使用给定的模式和默认的默认日期格式符号 FORMAT区域设置
Object clone()创建此 SimpleDateFormat的副本
boolean equals​(Object obj)比较给定对象与此 SimpleDateFormat是否相等
int hashCode()返回此对象的哈希码值

Calendar工具类

概述

所述Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。 瞬间可以用毫秒值表示,该值是1970年1月1日格林威治标准时间1970年1月1日00:00:00,000(格里高利)的Epoch的偏移量。

常用方法

方法解释说明
abstract void add​(int field, int amount)根据日历的规则,将指定的时间量添加或减去给定的日历字段
int get​(int field)返回给定日历字段的值
Date getTime()返回一个 Date对象,表示此 Calendar的时间值(距离 Epoch的毫秒偏移量)
void set​(int field, int value)将给定的日历字段设置为给定值
void setTime​(Date date)使用给定的 Date设置此日历的时间
String toString()返回此日历的字符串表示形式
int hashCode()返回此对象的哈希码值

System工具类

概述

System类包含几个有用的类字段和方法。 它无法实例化。 System类提供的设施包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法

常用方法

方法解释说明
static void arraycopy​(Object src, int srcPos, Object dest, int destPos, int length)将指定源数组中的数组从指定位置开始复制到目标数组的指定位置
static long currentTimeMillis()以毫秒为单位返回当前时间
static void exit​(int status)终止当前运行的Java虚拟机
static void gc()运行垃圾收集器
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值