基础阶段(三)_常用类知识点小结


前言

把常用算法封装到一个类中,这样之后想用常用的算法时,就不用自己写算法,直接调用类中的方法就OK,不懂就查API,多翻翻,但用IDEA会有提示,方法名都差不多见名知意,不用刻意记方法(像字典一样多谁记得住),用多就记住了

一>工具类的设计

把一些通用的方法分类存入类中,这些类就叫工具类

自己写工具类:
第一种:私有化构造器;方法用public static修饰

第二种:私有化构造器;在类的内部创建对象(保证应用在某个类中只有一个实例),再由对象去调用方法(单例模式)

单例模式又分三种:饿汉模式,懒汉模式;枚举
饿汉模式(JVM加载类就创建了对象)

public class Demo_01 {
//私有化构造器
    private Demo_01(){}
    //创建对象
    private static Demo_01 instance = new Demo_01();
    //通过方法取得对象
    public static Demo_01 getInstance(){
        return instance;
    }
    //下面就哗啦啦写自己的方法,用的时候就Demo_01.getInstance.xx
}

懒汉模式(用的时候才创建对象,这样可以节省点heap空间)

public class Demo_01 {
    private Demo_01(){}
    private static Demo_01 instance = null;
    public static Demo_01 getInstrance(){
        if (null == instance){
            return new Demo_01();
        }
        return instance;
    }
    //下面就哗啦啦写自己的方法
}

枚举
这个在设置枚举值的时候就创建对象了,也就是枚举值本身,也私有化了构造器了

二>包装类

因为八大基本数据类型已经不能适用业务场景(如int id = 0不知道表示id是0还是不存在这个id);然后就封装一些类即持有数据又封装了好多方法给我们用,这些类就叫包装类.如Integer,Character,…

Integer:就提供对int类型数据的处理
常用于int跟String的转换

//String 变 int
int a = Integer.parseInt("123");
int b = Integer.valueof("123);
//int 变 String
String string = Integer.toString(123);

其他的类都差不多这样子,查阅JDK的API就好了0.0
还有自动装箱自动拆箱的骚操作:就是int跟Integer的转变,可以直接赋值(其实就是语法糖)

Integer num  =  17;        //装箱操作
int a = num;        //拆箱操作

注意Integer缓存区对自动装箱后的判断,缓存范围[-127,128]

三 >Bigdicimal

一位浮点数的加减乘除运算会有计算机计算误差,然后就出现BigDecimal工具类了,这个需要使用构造构造对象才能用
(可以试下输出0.01+0.09就不等于0.1啦)

BigDecimal num1 = new BigDecimal(0.09);
BigDecimal num2 = new BigDecimal(0.01);
System.out.print(num1.add(num2));

四 >String类

JAVA程序的字面,都是以String的形式存在,String是以字符数组的形式存在常量池,而且常量池的值都是唯一的,再搞个相同的String时会指向已有的常量,不过new 一个对象就不一样了,在heap中创建对象是指向对象地址的,每个对象地址都不同,以下代码测试:
内存图不会就增加理解难度

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

之后就String的一些方法了,基本想对String怎么操作在API的方法都有吧,空字符表示用"“表示,不存在用null;
toCharArray()将此字符串转换为一个新的字符数组;
spilt(”")字符串分隔;
字符串陷阱:思考"A" + “B” + “C” 创建了几个字符串?

五>Stringbuffe和Stringbuilder

Stringbuffe和Stringbuilder一样的,区别就是线程安全问题上,Stringbuffe线程安全,因为里面封装的方法都用synchronized修饰给方法上同步锁了;分析一下线程状态图就知道单线程用Stringbuilder快一丢丢;
因为String装的字符串像数组一样是不能够改它的长度的,然后StringBuffer 就登场了;
它可以看成一个包装类,包装了一个字符数组,并提供了对该字符数组进行增(append/insert)、删(delete)、改(replace)、查(length/capacity)的方法。StringBuffer其实也是一个"容器",可以自动拓容.

六>Math

就简单的数学方法
Math.ceil(数值);向上取整
Math.floor(数值);向下取整
Math.max/min(数值,数值);求最值
Math.random()返回[0,1)的随机数
返回[m,n]区间的随机整数
(int)(Math.random()*(n-m+1)) + m;//这个还挺实用的
其中又定义一个Random类,用来操作随机数的

之后又封装Random类来操作随机数
其中nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。

补充一个UUID类
randomUUID() : 产生一个随机的唯一标识符,格式:678f9568-8967-4637-a48e-f0eae30faf43

七>date SimpleDateFormat Calendar

这三个都是对日期进行操作的类
date主要是创建date对象,gettime()获取时间戳;

SimpleDateFormat设置时间格式用的,用对象调用方法;

applyPattern(pattern)应用pattern样式;
format()Date进行格式化,把date类型转换为String类型,一般之前先设置样式再格式化;
parse()对String进行解析成date;

Calendar用来对日期做相(add)减,获取(get),重新设置(set)日期时间功能。
getInstance() 使用默认时区和语言环境获得一个日历对象。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值