day11-常用类

常用类

工具类设计

通常使用XxxUtil、XxxUtils、XxxTool、XxxTools来命名

通常的工具类全部使用public static修饰

通常工具类的构造器都是私有化的

工具类的两种设计方式

  1. 公共静态方法(所有的方法都用static修饰)

    public class ArrayUtil{
        private ArrayUtil{}
        public static void sort(int[] arr){
            //...
        }
        public static void binarySearch(int[] arr,int key){
            //...
        }
    }
    
  2. 单例设计模式(方法不用static修饰)

    public class ArrayUtil{
        private ArrayUtil{}
        private static ArrayUtil instance = new ArrayUtil();
        public void sort(int[] arr){
            //...
        }
        public void binarySearch(int[] arr,int key){
            //...
        }
    }
    

基础类型包装类

基础数据类型包装类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

装箱:基础数据类型转包装类型

拆箱:包装类型转基础数据类型

在Java1.5中提供了自动装箱与自动拆箱的功能(实际上)

转换:

String->基础类型:Integer.parseInt("")

String->包装类型:Integer.valueOf("")

包装类型->String:Integer.toString()

包装类型->基础类型:Integer.intValue()

基础类型->String:“”+数据

基础类型->包装类型:Integer.valueOf(数据)

包装类型与基础数据类型的区别

基础数据类型没有null

包装类型有null

缓存设计

Byte、Short、Integer、Long:缓存的范围[-128,127]

Character:缓存的范围[0,127]

因为该封装类型是使用final修饰的,所以数据会存放在方法区,方法区的数据是不会被gc清理的所以再取的时候会取方法区获取

==与equals的区别

可以比较基础数据类型,引用类型里比较的是内存地址

equals不能比较基础数据类型,应用类型里equals要看对象里是否覆盖了equals方法如果覆盖了那么就根据当前对象里的equals方法进行比较,如果没有那么就调用父类的equlas方法比较对象与对象之间的内存地址

BigDecimal

用于表示更加精确的小数,比float、double都要精确

构造方法使用String为参数的不要使用Doubled的因为会让BigDecimal失去精度

public BigDecimal(String val)

public BigDecimal(Double val)

方法

方法作用
public BigDecimal add(BigDecimal augend)增加操作
public BigDecimal subtract(BigDecimal subtrahend)减少操作
public BigDecimal multiply(BigDecimal multiplicand)乘法操作
public BigDecimal divide(BigDecimal divisor,int scale,RoundingMode roundingMode)除法操作(divisor除数;scale位数;RoundingMode小数保留模式)

Math

方法作用
public static double abs(double a)返回绝对值
public static int max(int a,int b)返回最大值
public static int min(int a,int b)返回最小值
public static long round(double a)四舍五入
public static double pow(double a,double b)计算一个数的次幂
public static double log(double a)返回对数
public static double sqrt(double a)返回平方根

String

String有两种创建方式

String str1 = “ABCD”;
String str2 = new String("ABCD");

内存图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DWjO2ETQ-1581423876278)(pic\3.png)]

为什么String的元素会放在方法区呢?

因为String是用final修饰的所以他每次都会存放到常用池中,因为用final修饰所以每次改变后都是新的地址(因为每次都要开辟空间)

字符串的比较:

equals比较内容,==比较地址

常用方法:

方法作用
public int length()获取字符串长度
public char charAt(int index)获取字符串指定字符
public int indexOf(String str)找出字符串出现的索引位置没有找到返回-1
public boolean equals(Object anObject)比较内容是否相等
public boolean equalsIgnoreCase(String anotherString)忽略大小写比较内容是否相等
public String toUpperCase()把字符中的小写字母转大写
public String toLowerCase()把字符中的大写字母转小写
public String substring(int beginIndex)截取字符串从第beginIndex开始截取
public String substring(int beginIndex,int endIndex)截取字符串从第beginIndex开始截取截取到endIndex
public boolean contains(CharSequence s)查找字符串中是否有该字符
public char[] toCharArray()把数组转换成字符数组
public String[] split(String regex)根据正则表达式进行字符串切割
public String trim()去除字符串前后的空格
public String replace(CharSequence target,CharSequence replacement)将字符串中的target内容替换成replacement内容

StringBuilder/StringBuffer

StringBuilder与StringBuffer可变字符串,而String是不可变字符串(final修饰)

String、StringBuilder、StringBuffer的区别:

StringBuilder没有使用sychronized修饰,所以线程不安全,性能高

StringBuffer方法使用了sychronized修饰,所以线程安全,但是性能低

String的性能最低,因为他存放在方法区之中,而StringBuilder和StringBuffer是存放在堆中,经常使用String对系统长久来说是不好的,使用StringBuilder和StringBuffer系统长久来说比较好,因为java例有gc的存在可以清走不使用的对象

StringBuilder和StringBuffer在对象创立的时候可以给定长度,若不给定长度系统会默认给16的长度,若长度超过范围内StringBuilder和StringBuffer会以原本长度*2+2的模式进行逐步增长(不可超过int最大值)

常用方法

方法作用
public StringBuilder reverse()内容反转
public StringBuilder insert(int offset,String str)插入内容从offset开始插入str内容
public StringBuilder delete(int start,int end)删除内容从start开始删除到end
public StringBuilder append(String str)内容追加

Date

new Date();//获取当前的时间
new Date(120,1,7)//从1900年1月1日开始计算 得出结果位2020年2月7日 月份是从0开始的

常用方法

方法作用
public String toLocaleString()本地区域时间风格
public long getTime()获取1970年1月1日到现在多少毫秒

SimpleDateFormat

SimpleDateFormat是日期格式化类

方法作用
public void applyPattern(String pattern)写入格式
public Date parse(String source)throws ParseException根据类型解析出Date类数据,若转换失败抛出转换异常
public final String format(Date date)把日期进行格式化返回输出

日期格式化的格式

指定格式
yyyy
MM
dd
HH
mm
ss
毫秒SSS

Random

随机数类(可以通过种子进行指定特指值,所以他是一个伪随机数),Math类的random也是通过Random类获得的,若不指定种子数系统会根据当时时间进行生成

正常用法

Random r = new Random;
int i = r.nextInt(100);//生成0->100的随机数

UUID

uuid是真真正正的随机数,他是通过电脑的网卡,当地的时间使用算法随机生成,生成的数字是唯一的,不存在重复的,缺点是生成的字符比较长(32位)

UUID.randomUUID();//获取32位随机字符串

UUID也可以当成验证码来生成

UUID.randomUUID().toString.subString(0,4);

Calendar

Calendar是日历类(该类使用了单例设计模式),可以对日期进行加减操作,获取类对象需要使用getInstance来获取

Calendar c = Calendar.getInstance();
//时间的获取操作
c.get(Calendar.YEAR);//获取年
c.get(Calendar.MONTH+1);//获取月
c.get(Calendar.DAT_OF_MONTH);//获取日
c.get(Calendar.HOUR_OF_DAY);//获取时
c.get(Calendar.MINUTE);//获取分
c.get(Calendar.SECOND);//获取秒
//时间的添加删除操作
c.add(Calendar.YEAR,100);
//时间的设置操作
c.set(Calendar.YEAR,1999);//设置年
c.set(Calendar.MONTH,9);//设置月
c.set(Calendar.DAT_OF_MONTH,2);//设置日
c.set(Calendar.HOUR_OF_DAY,10);//设置时
c.set(Calendar.MINUTE,10);//设置分
c.set(Calendar.SECOND,10);//设置秒
c.setTime(new Date);

正则表达式

可以判断字符串是否更具规则输入

规范描述规范描述
\\表示反斜线(\)字符\t表示制表符
\n表示换行[abc]字符a、b、c
[^abc]除了abc以外的任何字符[a-zA-Z0-9]表示由字母、数字组成
\d表示数字\D表示非数字
\w表示字母,数字,下斜线\W表示非字母、数字、下斜线
\s表示所有空白字符\S表示所有非空白字符
^行开头$行的结尾
.匹配除行之外的任何字符
规范描述规范描述
X必须出现一次X?可以出现0次或1次
X*必须出现0次、1次或多次X+可以出现1次或n次
X{n}必须出现n次X{n,}必须出现n次以上
X{n,m}必须出现n~m次
规范描述规范描述
XYX规范后跟着Y规范X|YX规范或Y规范
(X)做为一个捕获组规范

使用String.matches(regex)进行判断是否符合标准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值