Java小白学习之---常用类

在这里插入图片描述

一、包装类

1. 包装类分类

  1. 针对八种基本数据类型相应的引用类型 一 包装类
  2. 有了类的特点,就可以调用类中的方法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2. 装箱 和 拆箱

演示 包装类基本数据类型的相互转换,这里以int 和 Integer演示

  1. jdk5 前的 手动 装箱和拆箱方式,装箱: 基本类型->包装类型, 反之,拆箱
  2. idk5 以后(含idk5)的 自动 装箱和拆箱方式
  3. 自动装箱底层调用的是valueOf方法,比如Integer.valueOf()
  4. 其它包装类的用法类似在这里插入图片描述

测试题小结:三元运算符是一个整体, : 前后都需要执行 ,经过拆箱后,int 自动类型提升为double
在这里插入图片描述

3.包装类型String类型的相互转换

(案例演示,以Integer和String转换为例)
在这里插入图片描述

4. Integer类Character类的常用方法

(用的时候再查,太多了)在这里插入图片描述

5.Integer类面试题

  1. Integer创造机制
    在这里插入图片描述

  2. 在这里插入图片描述

二、String类

1. String类的理解

  1. String 对象用于保存字符串,也就是一组字符序列

  2. 字符串常量对象是用双引号括起的字符序列。
    (例如:"你好”、“12.97”、"boy"等)

  3. 字符串的字符使用Unicode字符编码一个字符(不区分字母还是汉字)占两个字节

  4. String类(有很多构造器)较常用构造器如下:
    String s1 = new String(); //
    Strings2 = new String(String original);
    Strings3 = new String(charll a);
    Strings4 = new String(charll a,int startlndex,int count)
    Strigs5= new String(byte[ ] b)

  5. String 类实现了
    接口 Serializable【string 可以串行化:可以在网络传输】
    接口 Comparable【string 对象可以比较大小】
    在这里插入图片描述

  6. String 有属性 private final char value []; 用于存放字符串内容

  7. 一定要注意: value 是一个final类型,不可以修改
    (这里final修饰的是引用类型的数组value,对于引用类型来说 ,final修饰的是地址,所以地址不可以改变的,因为改变里面的值不会影响地址,所以可以更改里面的)

2.创建String对象 的 两种方式

(1) 方式一:直接赋值 String s=“hsp”

方式一:先从常量池查看是否有"hsp"数据空间,如果有,直接指向;如果。1.没有则重新创建,然后指向。s最终指向的是常量池的空间地址

(2) 方式二:调用构造器 String s2 = new String("hsp”);

方式二:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间如果常量池没有"hsp",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址
内存分布图

3.String测试题

1.理解b.intern() --> 返回常量池的地址在这里插入图片描述
2.p1.name==“hspedu”,因为 hspedu 是常量所以返回的是中的地址在这里插入图片描述
3. String对象特征

  1. 字符串内容不可变在这里插入图片描述
  2. 编译器会优化,如果创建两个对象(hello和helloabc),hello就没人用了
    在这里插入图片描述
  3. c=a+b!!!!!!
    在这里插入图片描述
    如图
    在这里插入图片描述
    小结在这里插入图片描述4.重要!!!change栈执行完 会销毁,输出ex.str 和ex.ch 是通过main方法在这里插入图片描述

4.String类 的 常用方法

在这里插入图片描述
在这里插入图片描述

三、StringBuffer 类

1.基本介绍

  1. java.StringBuffer代表可变的字待序列,可以对字符串内容进行增删
  2. 很多方法与String相同,但StringBuffer是可变长度
  3. StringBuffer是一个容器,
    在这里插入图片描述

2.StringBuffer 类细节

  1. StringBuffer 的直接父类 是 AbstractstringBuilder
  2. StringBuffer 实现了 Serializable,即stringBuffer的对象可以串行化
  3. 在父类中 AbstractstringBuilder 有属性 char[] value,不是final11该value 数组存放字符串内容,引出存放在中的
  4. StringBuffer 是一个 final类不能被继承
  5. 因为StringBuffer 字符内容是存在 char[] value,所有在变化(增加/删除不用每次都更换地址(即不是每次创建新对象),所以效率高于 String

3. String Vs stringBuffer

  1. String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低!/private final char valuel];
  2. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高
  3. //char[ ] value; // 这个放在

4. StringBuffer构造器 使用

3个常用构造器在这里插入图片描述

5.String和StringBuffer相互转换

在这里插入图片描述

6.StringBuffer常见方法

  1. append
  2. delete(start,end)
  3. replace(start,end,string) //将start----end 间的内容替换掉,不含end
  4. indexOf //查找子串在字符串第1次出现的索引,如果找不到返回-1
  5. insert
  6. 获取长度 length
    在这里插入图片描述

四、StringBuilder类

1.基本介绍

  1. 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步(StringBuilder 不是线程安全)。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类因为在大多数实现中,它比 StringBuffer 要快
  2. 在 StringBuilder 上的主要操作是 appendinsert 方法,可重载这些方法以接受任意类型的数据。

2.StringBuilder常用方法

StringBuilder 和 StringBuffer 均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样,看老师演示.[参考StringBuffer].
在这里插入图片描述

3.使用细节

  1. StringBuilder 继承 AbstractStringBuilder 类
  2. 实现了 Serializable,说明StringBuilder对象是可以串行化
    (对象可以网络传输,可以保存到文件)
  3. StringBuilder 是final类不能被继承
  4. StringBuilder 对象字符序列仍然是存放在其父类 AbstractstringBuilder的 char[ ] value;因此,字符序列是堆中
  5. StringBuilder 的方法,没有做互斥的处理,即没有synchronized 关键字,因此在单线程的情况下使用StringBuilder

五、 String、StringBuffer 和StringBuilder的比较

  1. StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样
  2. String: 可变字符序列,效率低,但是复用率高
  3. StringBuffer:可变字符序列、==效率较高(增删)、线程安全, ==看源码
  4. StringBuilder:可变字符序列、效率最高、线程不安全
  5. String使用注意说明:
    string s=“a”;//创建了一个字符串s+=“b”😕/实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+“b”(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能
    结论:如果我们对String 做大量修改,不要使用String
    在这里插入图片描述

六、String、StringBuffer 和StringBuilder的选择

使用的原则,结论:

  1. 如果字符串存在大量的修改操作,一般使用 StringBuffer 或StringBuilder
  2. 如果字符串存在大量的修改操作,并在线程的情况,使用 StringBuilder
  3. 如果字符串存在大量的修改操作,并在线程的情况,使用 StringBuffer
  4. 如果我们字符串很少修改,被多个对象引用,使用String,(比如配置信息等)
    【StringBuilder 的方法使用和 StringBuffer 一样】
    【效率:StringBuilder >StringBuffer > String】

七、Math 类

1.Math类常见方法

  1. abs 绝对值
  2. pow 求幂
  3. ceil 向上取整
  4. floor 向下取整
  5. round 四舍五入
  6. sqrt 求开方
  7. random 求随机数
    //思考:请写出获取 a-b之间的一个随机整数,a,b均为整数?2-7
  8. max 求两个数的最大值
  9. min 求两个数的最小值
    在这里插入图片描述

八、Arrays 类

Arrays 类 常见方法

1. toString 返回数组的字符串形式

Arrays.toString(arr)

2. sort 排序(自然排序 和 定制排序)

Integer arr[]= {1,-1,7,0,89};

3. binarySearch 通过二分搜索法进行查找,要求必须排好序

int index = Arrays.binarySearch(arr, 3);
(若数组中不存在该元素,就返回return -(low+1);)

4. copyOf 数组元素的复制

Integer[] new Arr = Arrays.copyOf(arr, arr.length);
4.1 从 arr 数组中,拷贝 arr.length个元素到 newArr数组中
4.2 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
4.3 如果拷贝长度**<0 抛出异常** NegativeArraySizeException
4.4 该方法的底层使用的是 System.arraycopy()

5. fi 数组元素的填充

Integer[l num = new Integer[]{9,3,2};
Arrays.fill(num, 99);

6. equals 比较两个数组元素内容是否完全一致

boolean equals = Arrays.equals(arr, arr2)

7. asList 将一组值,转换成list

List asList = Arrays.asList(2,3,4,5,6,1);
System.out.println(“asList=” + asList);

  1. asList方法,会将(2,3,4,5,6,1)数据转成一个List集合
  2. 返回的 asList 编译类型 List(接口)
  3. asList 运行类型 java.util.Arrays#ArrayList,
    是Arrays类的静态内部类 private static class ArrayList extends AbstractListimplements RandomAccess,java.io.Serializable

九、System 类

System类 常见方法

  1. exit 退出当前程序
    在这里插入图片描述

  2. arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组
    int[l src={1,2,3};
    int[l dest = new int[3];
    System.arraycopy(src, 0, dest, 0, 3};
    在这里插入图片描述

  3. currentTimeMillens:返回当前时间距离1970-1-1 的毫秒数

  4. gc: 运行垃圾回收机制 System.gc();

十、BigInteger和BigDecimal介绍

1.应用场景:

  1. Biglnteger适合保存比较大的整型(long不够用时)
  2. BigDecimal适合保存精度更高的浮点型(小数)

2.常见方法

(进行 + - / *,需要使用对应的方法不能直接 + - / *)

  1. add 加
  2. subtract减
  3. multiply乘
  4. divide除
    在这里插入图片描述
    (数字需要" "包裹)

十一、日期类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值