JavaSE学习笔记(十二.包装类(Wrapper))

1.包装类: 针对八种基本数据类型相应的引用类型相应

2.有了类的特点,就可以调用类中的方法

包装类和基本数据的转换

1.jdk5前的手动装箱和拆箱方式, 装箱:基本类型->包装类型,反之,拆箱

2.jdk5以后(含jdk5)的自动装箱和拆箱方式

3.自动装箱底层调用的是valueOf,比如Integer.valueOf( )

包装类常用方法(以Integer和Character类的常用方法为例)

String类

String类的理解和创建对象

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

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

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

4.String类较常用的构造器(其它看手册):

5.String 类实现了

接口 Serializable [String 可以串行化:可以在网络上传输]

接口Comparable[String对象可以比较大小]

6.String是一个 final 类,不能被其它类继承

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

8.注意value是一个final类型,一旦赋值,就无法修改(地址)value不能指向新的地址,但是单个字符内容可以改变。

两种创建String对象的区别

方式一:直接赋值 String s = "hsp";

方法二:调用构造器 String s2 = new String("hsp")

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

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

字符串的特性

1.String是一个final类,代表不可变的字符序列

2.字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的。

String类的常见方法

说明

String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder和StringBuffer来增强String功能,并提高效率。

**注释:**

2.toUpperCase转换成大写

3.toLowerCase转换成小写

4.conncat拼接字符串

5.

6. split:在对字符串进行分割时,如果有特殊字符,需要加入转义符 " \ "

7. compareTo:

8.format:

%s: 表示后面由字符串来替换

%d: 表示是整数来替换

%.2f: 表示使用小数来替换,替换后,只会保留小数点两位,并且保留四舍五入的处理

%c: 使用char类型来替换

StringBuffer类

java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删

很多方法与String相同,但StringBuffer是可变长度的。

StringBuffer是一个容器

StringBuffer VS String

1.String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低

2.StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高

StringBuffer的构造器

1.StringBuffer() :构造一个其中不带字符的字符缓冲区,其初始容量为16个字符

2.StringBuffer(CharSequence seq) :public java.lang.StringBuilder(CharSequence seq)构造一个字符串缓冲区,它包含与指定的CharSequence相同的字符

3.StringBuffer(int capacity)//capacity[容量] : 构造一个不带字符,但具有指定初始容量的字符串缓冲区。即对 char[]大小进行指定

4.StringBuffer(String str) : 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容

String 和 StringBuffer 的相互转换

StringBuffer常用方法

增:append

删: delete 例如 s.delete(0, 14),前闭后开删除0到13的字符

改:replace 例如 s.replace(9, 11, jack), 用jack替换索引9到11的字符,同样遵循前闭后开

查:indexOf 例如 s.indexOf(" 1 "), 查找1这个子串在字符串第一次出现的索引,找不到就返回1

插: insert 例如 s.insert(9 , "jack"), 在索引为9的位置插入"jack",原来索引为9的内容自动后移

长度:length() 例如 s.length()

StringBuilder类

基本介绍

1.一个可变字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全)。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,简易优先采用该类,因为在大多数实现中,他比StringBuffer要快。

2.在 StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接收任意类型的数据。

StringBuilder常用方法

StringBuilder 和 StringBuffer 均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样

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.StringBuffer:可变字符序列,效率最高,线程不安全

5.String使用注意说明:

string = "a";创建一个字符串

s += "b";实际上原来的"a"字符已经丢弃了,现在又产生了一个字符串s + "b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象留存在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能 => 结论:如果我们对String做大量修改,不要使用String

String,StringBuffer,StringBuilder的效率测试

效率:StringBuilder > StringBuffer >String

String,StringBuffer,StringBuilder的选择

使用原则,结论:

1.如果字符串存在大量的修改操作,一般使用StringBuffer 或 StringBuilder

2.如果字符串存在大量的修改操作,并在单线程的情况,使用 StringBuilder

3.如果字符串存在大量的修改操作,并在多线程的情况,使用 StringBuffer

4.如果我们字符串很少修改,被多个对象引用,使用String, 比如配置信息等

Math类

基本介绍

Math类包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数

方法一览(均为静态方法)

1.abs 绝对值:int abs = Math.abs(-9);

2.pow 求幂:double pow = Math.pow(2, 4);//2的四次方

3.ceil 向上取整,返回 >= 该参数的最小整数(转成double): double ceil = Math.ceil(-3.001);

4.floor 向下取整,返回 <= 该参数的最大整数(转成double):double floor = Math.ceil(-4.999);

5.round 四舍五入

6.sqrt 求开方:double sqrt = Math.sqrt(9.0);

7.radom 求随机数(返回的是0 ~ 1之间的一个随机小数, 0 <= x < 1)

练习,返回一个a ~ b之间的数:(int)(a) <= x <= (int)(a + Math.random() * (b - a) + 1)

8.max 求两个数的最大值

9.min 求两个数的最小值

Arrays类

Arrays里面包含了一些列静态方法,用于管理或操作数组(比如排序和搜索)

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

2.sort排序(自然排序和定制排序)自己写一个ArraysSortCustom.java

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

①使用 binarySearch 二叉查找

②要求该数组是有序的,如果该数组是无序的,不能使用binarySearch

③不存在该元素,返回 return -(low + 1);//key not found

4.copyOf数组元素的复制:Integer[] newArr = Arrays.copyOf(arr, arr.length);

从arr数组中,拷贝 arr.length个元素,到newArr数组中,(arr.length为负数则会抛出异常)

5.fill 数组元素的填充:

Integer[] num = new Integer[]{9, 3, 2};

Arrays.fill(num, 99);

用99去填充 num数组,可以理解为替换原来的元素

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

boolean equals = Arrays.equals(arr1, arr2);

7.asList 将一组值转换成list

System类

System类常见方法和案例

1.exit 退出当前程序:exit(0) 表示程序退出,0表示一个状态(正常状态) System.exit(0);

2.arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组:

搞清楚5个参数的含义

src the source array.// 源数组

srcPos starting position in the source array;// 从源数组哪个索引位置开始拷贝

dest the destination array;// 目标数组,即把源数组的数据拷贝到哪个数组

destPos starting position in the destination data;// 把源数组的数据拷贝到目标数组的哪个索引

length the number of array elements to be copied

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

4.gc:运行垃圾回收机制

BigInteger 和 BigDecimal类


BigInteger:

1.当我们编程中,需要处理很大的整数,long 不够用,可以使用BigInteger的类来搞定

2.在对BigInteger 进行加减乘除的时候后,需要使用对应的方法,不能直接进行+ - * /

3.创建一个需要操作的 BigInteger 然后调用相应的方法即可

BigDecimal

1.当我们需要保存一个精度很高的数时,double 不够用,可以使用BigDecimal

2.在对BigDecimal 进行加减乘除的时候后,需要使用对应的方法,不能直接进行+ - * /

3.创建一个需要操作的 BigDecimal 然后调用相应的方法即可

4.在调用 divide 方法时,如果结果为无线循环小数会抛异常.但是我们指定精度即可.BigDecimal.ROUND_CEILING,如此一来最终结果就会保留 分子 精度。

BigInteger 和 BigDecimal常见方法

1.add 加

2.subtract 减

3.multiply 乘

4.divide 除

日期类[知道怎么查,怎么用即可,不用背每个方法]

第一代日期类

1.Date:精确到毫秒,代表特定的瞬间

2.SimpleDateFormat:格式和解析日期的类 SimpleDateFormat格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本),解析(文本 - > 日期) 和规范化

1.第二代日期类,主要就是Calendar类(日历)

public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable< Calendar >

2.Calendar 类是一个抽象类,它为特定瞬间与一组注入YEAR,MONTH,DAY_OF_MONTH,HOUR等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

第三代日期类

前两代日期类的不足分析

JDK1.0中包含了一个java.util.Date类但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用。而Calendar也存在问题:

1.可变性:像日期和时间这样的类应该是不可变的

2.偏移性:Date中的年份是从1900开始的,而月份都是从0开始.

3.格式化:格式化支队Date有用,Calendar则不行

4.此外,他们也不是线程安全;不能处理闰秒等(每隔两天,多出一秒)

第三代日期类常见方法

1.LocalDate(日期,年月日),Local Time(时间,时分秒),LocalDateTime(日期时间,年月日时分秒) JDK8加入

Local Date 只包含日期,可以获取日期字段

Local Time只包含时间,可以获取时间字段

LocalDateTime包含日期+时间,可以获取日期和时间字段

DateTimeFormatter格式日期类

类似于SimpleDateFormat

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(格式);

String str = dtf.format(日期对象);

Instant 时间戳

类似于Date提供了一系列和Date类似的转换的方式

Instant --> Date:

Date date = Dare.from(instant);

Date --> Instant

Instant instant = date.toInstant();

//学习资源采用b站韩顺平30天学Java

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Benaso

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值