目录
String类
//1) 直接赋值字符串字面量
String s1 = "hello"; //String是一个类名,也是一个数据类型, s1是对象名,其实就是一个变量名, 双引号引起来的"hello"是String字符串对象, 把"hello"对象的引用赋值给s1
//2) String(byte[])构造方法创建字符串对象. 计算机中不管是CPU,内存,还是硬盘上所有的数据都是0或者1,在屏幕上看到的是字符,图片,视频, 是通过专门的软件把内存中的01序列转换为对应的数据, 如IDEA文本编辑器可以把计算机中的01序列转换为字符, 在文本编辑器输入的字符也同样会转换为01序列保存到内存中. 计算机中的8个01序列组成一个byte字节, 调用String(byte[])构造方法可以把byte[]字节数组中的存储的01序列转换为字符串
//3) String(char[])构造方法可以把字符数组转换为字符串
char charAt(int index) 返回字符串中索引值为index的字符
int length() 返回字符串的长度,即字符串中字符的数量
//String类底层是定义了字符数组存储字符串中的每个字符: char value[], charAt(index)实际返回的 value[index]数组元素, length()方法实际返回的value.length
//使用这两个方法遍历字符串的每个字符
for (int i = 0; i < txt.length(); i++) {
System.out.print( txt.charAt(i) + " ");
}
System.out.println();
int compareTo(String anotherString) 比较当前字符串与参数字符串的大小,如果当前字符串大返回正数, 相等返回0,参数字符串大返回负数
int compareToIgnoreCase(String str) 忽略大小写后再比较大小
Java把当前对象与另外一个对象比较大小的功能抽象为Comparable接口, 查看Comparable接口的定义
public interface Comparable<T> {
public int compareTo(T o);
}
说明:
Comparable接口名后面的<T>称为泛型, 泛型就是把数据类型作为参数传递,即在一个类实现Comparable接口时需要给T参数传递一个数据类型, 这个数据类型就是compareTo()方法的参数类型
当一个类实现Comparable接口时,一般给T参数传递当前类型,即同一个类型的两个对象比较大小
String类实现了Comaprable接口,给T参数传递了String类型,String类中重写了Comparable接口的抽象方法compareTo(String), 在该方法中,逐个比较字符串中的每个字符,遇到第一个不相等的字符码值相减
双引号中的字符串字面量存储在字符串常量池中,JDK7之前字符串常量池存储在方法区中,据说JDK7之后字符串常量池存储在堆中,只是逻辑划分不必深究
String字符串对象是不可变的,String提供的方法toLowercase(),trim(),replaceAll()等操作字符串的方法都是返回一个新的字符串,原字符串不变,String字符串对象不可变是指创建了String对象之后,该对象的字符序列无法更改
使用+连接字符串时系统会创建一个新的字符串对象,如果频繁进行字符串连接会频繁创建新对象,增加JVM负担
boolean contains(CharSequence s) 判断当前字符串是否包含s串
boolean equals(Object anObject) String类重写了equals()方法,用于判断两个字符串是否一样
boolean equalsIgnoreCase(String anotherString) 忽略大小写再判断两个字符串是否一样
boolean endsWith(String suffix) 判断字符串是否以suffix结尾
boolean startsWith(String prefix) 判断字符串是否以prefix开始
byte[] getBytes() 返回字符串在当前默认编码下对应的字节数组
byte[] getBytes(String charsetName) 返回字符串在指定的charsetName编码下对应的字节数组(需要注意的是该方法有受检异常需要预处理, 调用该方法有语法错误, 当前Alt + Enter在弹出的快捷菜单中选择: add exception to method signature抛出处理, 就会在当前方法声明位置通过throws声明抛出该异常)
字符编码就是字符与整数(码值, 一组01序列)之间的一个对应关系, 把字符串转换为01字节序列称为编码, 把一组01序列转换为字符称为解码
int indexOf(int ch) 返回字符ch在当前字符串中第一次出现的索引值
int indexOf(String str) 返回字符串str在当前字符串中第一次出现的索引值
int lastIndexOf(int ch) 返回字符ch在当前字符串中最后一次出现的索引值
int lastIndexOf(String str) 返回字符串str在当前字符串中最后一次出现的索引值,//在实际应用中,能用字符串时就尽量不用字符
String substring(int beginIndex) 返回当前字符串从beginIndex开始的字符串
String substring(int beginIndex, int endIndex) 返回当前字符串[beginIndex, endIndex) 范围内的字符串
注意:
indexOf(int ch)返回字符ch在当前字符串中第一次出现的索引值,方法的形参定义为int类型,在调用方法时,传递char字符类型隐含着自动类型转换, char可以自动转换为int类型; 如果实参传递int类型则会把int这4个字节中的最后两个字节作为参数传递
//有文件路径, 在Windows操作系统中,文件分隔符默认为反斜杠\, 在字符串中遇到 反斜杠就认为是转义字符的开始, 所以在字符串中需要使用两个反斜杠\\转义为一个反斜杠\; Linux操作系统中文件分隔符默认为斜杠/, 实际上在Windows系统中使用斜杠/也认
char[] toCharArray() 把字符串转换为字符数组
static String valueOf(char[] data) 把字符数组转换为字符串
String toLowerCase() 把字符串中的大写字母转换为小写字母返回一个新串
String toUpperCase() 把字符串中的小写转换为大写,返回一个新串
String trim() 去掉字符串前后的空白符, 返回一个新串
注意:
原来的字符串不变
Integer.parseInt(yearStr)//把字符串转换为整数
static String valueOf(int i) 可以把其他的数据类型转换为字符串
/**
* 与正则表达式相关的一组方法:
* boolean matches(String regex) 判断当前字符串是否匹配指定的正则表达式
* String replaceAll(String regex, String replacement) 把当前字符串中符合regex正则表达式的字符串使用replacement替换,返回新串
* String[] split(String regex) 把当前字符串使用符合Regex正则 表达式的字符串进行分割, 分割后的子串组成一个数组
*
* 正则表达式就是一个模式串,用于验证字符串是否匹配指定的模式, 正则表达式的构成:
* [abc] 表示匹配a,或者b,或者c中的一个
* . 任意字符
* \d 数字
* \w 单词字符[a-zA-Z0-9_]
* X{n} 表示匹配X表达式n次
* X{n,} 表示匹配X表达式至少n次
* X{n,m} 表示匹配X表达式至少n次,最多m次
* 在早期应用中,经常使用正则表达式验证用户名长度,验证密码是否符合规则,验证手机号, email邮箱格式
*
*/
在遇到错误/异常,或者程序运行结果与期望值不一样时,可以对程序进行debug调试. 先分析代码,在怀疑可能出现问题的语句前面添加断点breakpoint,再进行Debug调试,在debug期间,可以查看程序运行过程,可以查看在程序运行过程中各个变量的取值
在问题的一行代码前面单击添加断点,然后Debug调试,程序运行到断点处就中断了, 在IDEA开发环境中会弹出Debug视图. Debug视图包含Debugger选项卡和Console选项卡 , Console是控制台选项卡,可以查看程序的输出,及进行程序的键盘输入, 在Debugger选项卡中,可以查看方法栈的调用, 还可以查看当前各个变量的取值
在Dubug视图上还有一组按钮可以查看程序执行过程
Step over 执行到下一条语句
Step into 进入方法内部
force step into 强制进入
step out 从方法体中返回
StringBuilder类
当需要频繁进行字符串连接时,使用StringBuilder/StringBuffer可变字符串,这个字符串对象的字符序列是可以修改的,区别在于StringBuffer是线程安全的,StringBuilder不是线程安全的,但是StringBuilder执行效率高
创建StringBuilder对象
append() 字符串连接
delete() 删除
insert() 插入
setCharAt() 修改指定位置的字符
reverse() 逆序
Math类
random() 返回[0,1)范围内的随机小数
max 两个数的最大值
min 两个数的最小值
pow 次方
cbrt 立方根
sqrt 平方根
ceil 大于等于参数的最小整数
floor 小于等于参数的最大整数
Random类
专门用于生成随机数
nextDouble()生成随机小数
nextInt( limit) 返回[0, limit)范围内的随机整数
BigInteger、BigDecimal类
当要求数据精度比较高时,可以使用这两个类
add() 相加
subtract() 相减
multiply() 相乘
divide() 相除
//小数相除, 可能会遇到除不断的情况,会抛出java.lang.ArithmeticException算术异常
//小数相除,通常要指定保留少数的位数,及尾数的处理方式
// d1.divide(d2, 保留小数的位数, RoundingMode尾数的处理方式), 第三个参数RoundingMode是一个枚举类型
//枚举就是一组常量的组合, 在使用这些常量时,按枚举类名名.常量值的形式
DecimalFormat类
可以对数字进行格式化
*常用 的格式符有:
* # 任意数字
* 0 任意数字, 不足的位数会补0
* , 千分位
* . 小数点
创建DecimalForamt对象在构造方法中指定模式串,调用format()可以对数字格式化
Date类
创建Date对象返回当前日期
System.currentTimeMillis() 返回当前时间距离1970-1-1 00:00:00 经过的毫秒数, 1970年是Java参数Unix操作系统的一个基准时间
getTime() 方法可以返回日期对应的毫秒 数
打印DAte对象时,会调用Date对象的toString()方法,在Date类中重写了toString()方法按: 星期 月 日 HH:mm:ss 时区 年 的格式返回的, 可以把Date对象转换为指定格式的字符串, 使用java.text.SimpleDateFormat类, 在创建SimpleDateFormat对象时通过构造方法指定模式串, 常用 的格式符有: y年, M月, d日, H小时, m分钟, s秒, S毫秒,调用SimpleDateFormat对象的format(Date)方法把Date对象转换为字符串
//调用SimpleDateFormat对象的parse(String)方法可以把字符串转换为Date对象,在调用方法时, 需要对该方法受检异常进行预处理,当前选择Add exception to method signature抛出处理, 当运行程序后, SimpleDateFormat对象的格式字符串与实际的字符串不匹配就会抛出异常
Date日期类不是线程安全的,在多线程环境中可能会出现问题,JDK8中新增了一组线程安全的日期类LocalDateTime类
LocalDateTime类
创建 LocalDateTime对象返回当前时间, LocalDateTime构造方法是private修饰私有的, 可以调用 LocalDateTime类的静态方法now()返回一个 LocalDateTime对象
使用java.time.format.DatetimeFormatter类可以对LocalDateTime对象进行格式化
调用 LocalDateTime 对象的实例方法 format(DateTimeFormatter)可以转换为字符串
调用LocalDateTime静态方法parse(String, DateTimeForammter)可以把字符串转换为LocalDateTime对象
包装类
为了编程方便,Java为每个基本类型提供了一个对应的包装类
Byte、Short、Integer、Long、Float、Double、Charater、Boolean
创建包装类对象,调用包装类构造方法,所有包装类都可以根据基本类型创建包装类对象,除了Character的其他包装类还可以根据String字符串创建包装类对象
1)从Number类中继承了一组方法,可以把包装类对象转换为基本类型
byte byteValue()
double doubleValue()
int intValue()
所有的包装类底层都有一个value属性,保存包装类对象对应的基本类型的数据, 在调用从Number父类继承的这一组方法时, 实际就是把value属性值进行了强制类型转换为目标类型的数据返回
2)static int compare(int x, int y) 包装类提供了静态方法compare可以比较两个基本类型数据的大小,如果第一个数大返回正数, 第二个数大返回负数,相等返回0
3)int compareTo(Integer anotherInteger) 比较当前包装类对象与 参数包装类对象的大小
所有的包装类都实现了Comparable接口,重写了compareTo()抽象方法,就具有了比较大小的功能, 在比较时,实际比较的是包装类的value属性值的大小
4)static int parseInt(String s) 可以把字符串转换为基本类型的数据
5)static Integer valueOf(int i) 把基本类型转换为包装类对象
static Integer valueOf(String s) 把字符串转换为包装类对象
从JDK9开始,建议采用这种方式创建包装类对象
装箱:把基本类型转换为包装类对象
拆箱:把包装类对象转换为基本类型
Java可以自动装箱与自动拆箱
享元模式:
Integer i1 = 69;
Integer i2 = 69;
System.out.println( i1 == i2 ); //true
/*
Java认为-128~127范围内的整数使用最频繁 ,所以这个范围内整数自动装箱后,会把包装类对象存储在共享池中,采用享元模式
程序根据整数69创建Intege对象,把该Integer对象存储到共享池中,把该对象的引用赋值给i1
向下执行, 直接把共享池中Integer对象的引用赋值给i2,现在i1与i2都引用了共享池中同一个Integer对象
*/