小白学Java笔记:常用类

目录

String类

StringBuilder类

Math类

Random类

BigInteger、BigDecimal类

DecimalFormat类

Date类

LocalDateTime类

包装类


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对象
 */

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值