String
字符串的介绍
String类表示字符串, 字符串就是由一串字符组成的数据。
字符串本质就是一个字符数组, 内部就是在使用一个字符数组保存数据。
扩展:
在JDK8以及之前的版本,字符串是在用char[]保存数据.
在JDK9以及之后的版本,字符串是在用byte[]保存数组.
我们直接使用双引号写出来的字符串,都是字符串对象. 比如:“hello”, “你好”
字符串具有不变性, 他们的值在创建后不能更改。
字符串是可以被共享的
//s1和s2共用一个"abc"常量
String str1 = "abc";
String str2 = "abc";
String所在的包是java.lang包,java.lang包下的东西都是非常常用的.
所以java有一个优化,java.lang包下的东西使用时不需要导包.
字符串的构造方法
字符串的构造方法:
String() 创建一个空的字符串对象
String(String original) 根据字符串来创建一个字符串对象
String(char[] value) 通过字符数组来创建字符串对象
String(char[] value, int offset, int count) 将字符数组的一部分来构造新的字符串对象
String(byte[] bytes) 通过字节数组来构造新的字符串对象
String(byte[] bytes, int offset, int length) 通过字节数组一部分来构造新的字符串对象
字符串new的方式创建对象和直接赋值的方式创建对象的区别:
字符串是常量,会保存到常量池中.
只有使用双引号直接写出来的字符串才是常量.
扩展:
JDK6以及之前的版本,常量池在方法区;
JDK7的时候,常量池在堆内存;
JDK8的时候,常量池在元空间[方法区];
字符串常量是可以复用的,当我们使用到一个字符串常量时,会先看一下常量池有没有这个常量.
如果有,就直接使用常量池中的;如果没有,就创建一个该字符串常量放到常量池中.
字符串的判断方法
字符串的判断方法:
public boolean equals (Object anObject) :将此字符串与指定对象进行比较。
public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进行比较,忽略大小写。
public boolean contains (CharSequence s) :判断参数字符串在当前字符串中是否存在(区分大小写)。存在,返回true,否则,返回false。
public boolean endsWith(String suffix) :测试此字符串是否以指定的后缀结尾(区分大小写)。
public boolean startsWith(String prefix) :测试此字符串是否以指定的前缀开始(区分大小写)
字符串的获取方法
字符串的获取方法:
public int length () :返回此字符串的长度。
public String concat (String str) :将指定的字符串连接到该字符串的末尾。
public char charAt (int index) :返回指定索引处的 char值。
public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引。
public int lastIndexOf(String str) :返回指定子字符串最后一次出现的字符串中的索引。 如果不包含,则返回-1。
public String substring (int beginIndex) :返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
public String substring (int beginIndex, int endIndex) :返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
字符串的转换方法
字符串的转换方法:
public char[] toCharArray () :将此字符串转换为新的字符数组。
public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组。
public String toLowerCase() :使用默认语言环境的规则将此 String所有字符转换为小写。
public String toUpperCase() :将此 String所有字符转换为大写,使用默认语言环境的规则。
public String replace (CharSequence target, CharSequence replacement) :将与target匹配的字符串使用replacement字符串替换
字符串的分割方法
字符串的分割方法:
public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组。
public String trim() :去掉当前字符串的前后空格,并返回一个新字符串,原字符串不变。
StringBuilder
字符串拼接的效率问题以及为什么会有StringBuilder
字符串具有不变性,所以每次使用字符串拼接,都会创建新的字符串,这样既耗时又浪费空间。
于是就有了StringBuilder, StringBuilder我们可以看成可变的字符串, StringBuilder是可以改变的,如果使用StringBuilder拼接是不会额外产生新的内容的,这样性能就高了。
StringBuilder的介绍以及和String的区别
StringBuilder是可变的字符序列, 我们可以把StringBuilder看成可变的字符串。
StringBuilder的本质和String是一样的,都是由一串字符组成的数组, 内部都是在使用字符数组保存数据。
StringBuilder和String的区别:
StringBuilder: 可变的。
String: 不可变的。
StringBuilder的构造方法
StringBuilder的构造方法:
StringBuilder(): 空参数的构造方法。使用该构造方法创建的StringBuilder里面没有任何内容。
StringBuilder(String str): 传递一个字符串。根据字符串的内容创建一个StringBuilder对象。
StringBuilder中常见的方法
StringBuilder的常见方法:
StringBuilder append(任何类型): 拼接(追加)任何类型的数据。返回值为调用者对象本身。
StringBuilder reverse(): 对StringBuilder的内容反转。返回值为调用者对象本身。
String toString(): 将StringBuilder转成一个String。
String和StringBuilder的相互转换
StringBuilder -> String
调用StringBuilder中的toString方法即可
String toString(): 将StringBuilder转成一个String。
String -> StringBuilder
使用StringBuilder的带参数的构造方法创建一个StringBuilder对象。
StringBuilder(String str): 参数要传递一个字符串。 会根据字符串的内容创建一个StringBuilder对象。
Object类
介绍
Object是所有类的父类,所有类都直接或者间接的继承自Object。
如果一个类我们没有使用extends关键字继承其他类,那么这个类会继承Object类。
toString方法
在Object中,有一个方法叫做toString,这个方法可以将对象转成字符串。
String toString():返回对象的字符串表示形式。
当通过一个对象调用toString方法时,会先看一下自己有没有这个方法,如果自己没有,就会向上找父类,一直到Object。Object中的toString方法,是将对象转成了地址值的字符串。
当我们直接输出一个对象名时,内部会调用这个对象的toString方法,也就是这个对象调用toString方法的结果是什么,那么直接输出对象名输出的结果就是什么。
调用toString方法看到的是对象的地址值一般来说意义不大,我们更多情况想要看到的其实是对象的内容(属性)
如果想要调用toString方法得到对象的属性,那么需要对toString方法进行重写。
equals方法
在Object中,有一个方法叫做equals,可以比较两个对象是否相同。
boolean equals(Object obj):比较两个对象是否相同。
当通过一个对象调用equals方法时,会先看一下自己有没有这个方法,如果没有,就会向上找父类,一直到Object。
而Object中的equals方法,是在使用==比较对象的地址值。
一般来说,根据地址值比较两个对象是否相同没有什么意义,更多情况我们是希望通过对象的属性比较两个对象是否相同。
如果两个对象的属性完全相同,那么我们可以把它们看成是相同的对象。
如果想要根据对象的属性比较对象是否相同,那么可以重写equals方法。
Date类
介绍
在Java中,有一个类叫做java.util.Date,这个类一般叫做日期类
虽然这个类叫做日期类,但是这个类表示的是特定的时间瞬间,精确到毫秒。
构造方法
构造方法:
Date():使用空参构造方法创建的Date对象表示的是当前操作系统(计算机)的时间
Date(long date): 参数要传递long类型的毫秒值,表示从1970年1月1日 0时0分0秒开始过了多少毫秒。
中国是东八区,时间比标准时间要快8个小时,所以时间是从1970年1月1日 8时0分0秒开始
其他方法
long getTime():获取Date对象对应的毫秒值。
void setTime(long time):参数是毫秒值,表示从1970年1月1日开始过了多少毫秒
DateFormat
介绍
如果我们希望将Date对象转成我们喜欢的格式然后进行输出,可以使用DateFormat进行格式化操作.
格式化操作指的是将Date对象转成指定格式的字符串.
DateFormat是一个抽象类,如果要用,需要使用子类.最常用的子类是SimpleDateFormat.
SimpleDateFormat的构造方法:
public SimpleDateFormat(String pattern) :用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
参数pattern是一个字符串,代表日期时间的自定义格式.
模式就是转换的格式:
例如最终要转换的格式: 2000年10月24日 14时12分23秒
自定义格式: yyyy年MM月dd日 HH时mm分ss秒
其实就是用英文字母替换掉最终要转换的格式中的数字
SimpleDateFormat的其他方法:
public String format(Date date) :将Date对象格式化为字符串。
public Date parse(String source) :将字符串解析为Date对象
Date转String
Date -> String: 格式化。 使用SimpleDateFormat中的format方法完成。
Date对象转字符串的步骤:
- 创建SimpleDateFormat,并在构造方法中指定模式。
- 调用SimpleDateFormat的format方法,将Date对象转成字符串。
- 输出结果。
String转Date
String -> Date: 解析。 使用SimpleDateFormat中的parse方法完成。
字符串转Date对象的步骤:
- 定义字符串表示时间。
- 创建SimpleDateFormat对象,指定模式。
- 通过SimpleDateFormat对象调用parse方法, 将字符串转成Date对象
- 输出结果。
注意: - 在调用parse方法后,会有一个红线,原因是因为这个方法需要处理异常(过两天讲解)
解决方式,将光标移动到红线上,然后按alt + 回车,选择第一个 - 在创建SimpleDateFormat对象时,如果指定的模式和字符串的格式不一致,那么会报错
Calender
介绍及获取
Calendar叫做日历类
虽然Calendar叫做日历类,但是他和Date类一样,可以表示特定的时间瞬间,精确到毫秒。
Calendar是一个抽象类,如果要用,需要使用子类。
由于时间地区的敏感性,Calendar子类对象不能由我们自己去创建,要通过Calendar的静态方法getInstance获取
static Calendar getInstance():获取一个日历对象(Calendar子类对象)
小结:
我们之间创建对象都是自己new,现在获取日历对象需要调用Calendar的静态方法getInstance获取。
其他方法
int get(int field): 获取指定字段的值。参数filed表示获取哪个字段的值。
void set(int field, int value):给指定日历字段设置值。
void add(int field, int amount):对指定字段的值进行计算。
Math类
Math是Java中的一个数学工具类,里面有很多用于数学运算的方法。
常见方法:
public static int abs(int a):求绝对值。
public static double ceil(double a):向上取整。
public static double floor(double a):向下取整。
public static long round(double a):四舍五入
public static double pow(double a, double b):获取a的b次幂
System类
System可以看成系统类,里面定义了大量的静态方法
常见方法:
static long currentTimeMillis():获取当前系统时间
static void exit(int status):终止JAVA虚拟机。
BigInteger
一些特别大的数字不能用long进行存储,并且也不能进行计算。于是就有了BigInteger
BigInteger可以表示非常大【无限大】的数字。
构造方法:
BigInteger(String val):根据字符串的内容(内容必须是数字)创建一个BigInteger对象。
其他方法:
BigInteger add(BigInteger val):加法运算
BigInteger subtract(BigInteger val):减法运算
BigInteger multiply(BigInteger val):乘法运算
BigInteger divide(BigInteger val):除法运算
BigDecimal
在Java中,小数是不精确的,如果使用小数进行运算,有可能出现精度问题(比如:1.3加1.6结果是2.9000000000000004)
如果要对小数进行运算并且要保证运算精度,那么可以使用BigDecimal
我们可以将BigDecimal这个类看成小数,它可以表示精确的小数。
BigDecimal构造方法:
BigDecimal(double val):根据一个double小数创建BigDecimal对象。(不推荐,因为会损失精度)
BigDecimal(String val):根据一个字符串创建BigDecimal对象。(推荐)
BigDecimal的常见方法:
BigDecimal add(BigDecimal augend):进行加法运算。
BigDecimal subtract(BigDecimal subtrahend):进行减法运算
BigDecimal multiply(BigDecimal multiplicand): 进行乘法运算
BigDecimal divide(BigDecimal divisor):进行除法运算的方法,如果除不尽,那么会报错。
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode):除法运算
参数divisor:表示要相除的小数
参数scale:保留几位小数。
参数roundingMode:表示保留模式。 该参数位置我们可以传递BigDecimal中的静态常量,ROUND_HALF_UP表示四舍五入
Arrays工具类
在Java中,有一个类叫做Arrays,这个类是操作数组的工具类。
static void sort(数组):对数组中的内容进行排序。
static String toString(数组):将数组中的内容转成字符串并返回。
包装类
包装类的介绍
基本类型 | 包装类 |
---|---|
int | Integer |
char | Character |
short | Short |
byte | Byte |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
基本类型和对应的包装类使用方式基本一致。
基本类型就是一些简单的数据,只能进行运算或直接使用,不能调用方法,功能比较简单。
包装类是引用类型,可以创建对象,包装类不仅仅可以表示数据,也可以调用方法完成一些功能,功能强大。
包装类的功能比对应的基本类型要强大。
自动拆装箱
在JDK5的时候,多了一个新的特性,叫做自动拆装箱。
拆箱: 包装类类型转成对应的基本类型。
装箱: 基本类型转成对应的包装类类型。
有了自动拆装箱后,基本类型以及包装类类型可以自动转换。
手动拆装箱
在JDK5之前,如果基本类型和对应的包装类进行转换,需要使用手动拆装箱。
手动装箱(int -> Integer)
static Integer valueOf(int i):接受一个int类型的数据,返回Integer类型的结果。
手动拆箱(Integer -> int)
int intValue():将Integer对象转成int数字并返回
Integer中的其他方法
public Integer(int value):构造方法,根据一个int数字创建Integer对象(已过时)
public Integer(String s):构造方法, 根据一个String创建Integer对象(已过时)
public static Integer valueOf(int i):静态方法, 根据一个int数字获取Integer对象。
public static Integer valueOf(String s):静态方法, 根据一个String获取Integer对象。
字符串和基本类型相互转换
基本类型 -> 字符串
1. 直接在这个基本类型的数据后面加上"" (推荐)
2. 使用String的静态方法valueOf实现.
static String valueOf(int i):将int数字转成字符串,并将字符串返回
字符串 -> 基本类型
我们可以使用基本类型对应包装类的静态方法parseXXX完成。
如果要将字符串转成int类型,那么就是Integer中的静态方法parseInt完成。
如果要将字符串转成double类型,那么就使用Double中的静态方法parseDouble完成。
如果要讲字符串转成long类型,那么就使用Long中的静态方法parseLong完成。