第七次Java作业

一、包装类
1. 什么是包装类
以前定义变量,经常使用基本数据类型,对于基本数据类型,它就是一个数。加点属性,加点方法,加点构造器,对基本数据类型对应进行了封装产生了一个新的类,这种类叫包装类(改造基本数据类型的的类)。

int, byte...-->基本数据类型

包装类 -->引 用数据类型

                                                  2. 基本数据类型对应的包装类 

3db4d677f6af467faa9db1fa2f77b1b1.png

 3.为什么要把基本数据类型封装为包装类

Java语言,面向对象的语言,最擅长的操作各种各样的类

以前学习装数据的---> 数组,int[] String[] double[] Student[]

以后学习装数据的---> 集合,有一个特点,只能装引用数据类型的数据

4. 有了包装类以后用基本数据类型吗?

并不是。 

5. Integer学习(其他包装类学习同理)

打开Java api文档,搜索Integer开始学习9ce156486da34502bf033139e0a407b1.png

 从属与java.lang包(属于这个包意味着直接使用,不用导入包)

类的继承关系

java.lang.Object

​ java.lang.Number

​ java.lang.Integer

实现接口 

被final修饰,那么这个类不能有子类,不能被继承

包装类是对基本数据类型的封装:对int类型封装产生了Integer。

类的历史

字段摘要 Field Summary

构造方法摘要,可以在idea上点进去看1d7de79f4deb4af394f3016b849f700c.png

6c7a67828c224776b95a64d8245d48af.png 

包装类特有机制,拆箱装箱(底层使用了方法完成,velueOf() 和 intValue() )可以自行断点查看5fd76103266c4d81a9e8cad4b7046bf1.png 

 常用方法,主要查看JavaAPI文档自学,下面列举主要几个方法,可以在idea点进方法查看底层

1.comperTo() 在数字上比较两个Integer对象。

2.Integer i = 2;

Integer i1 = 3;

Integer i2 = 3;

System.out.println(i.compareTo(i1));//-1

System.out.println(i1.compareTo(i));//1

System.out.println(i1.compareTo(i2));//0

equals()将对象和指定对象进行比较b3b46fb7263b422097994a75a79b7602.png

1. intValue()以 int 类型返回该Integer的值

2.parseInt()将字符串转成 int 类型

3.toString()返回一个表示该Integer的字符串

二、日期相关类

1. util.Date (方法很多自己试,API里有)

Date d = new Date();

System.out.println(d);

System.out.println(d.toGMTString());//有横线花掉的是过失、过期、废弃方法

System.out.println(d.toLocaleString());

System.out.println(d.getTime());
System.out.println(System.currentTimeMillis());//效果一样,但是用第二个,因为是静态方法,快!第一个因为要创建对象,所以不够第二个效率高
//currentTimeMillis()是本地方法,没有方法体,因为方法体的实现不是通过Java写的
//这俩方法的作用,测试算法速度

2. sql.Date
3. SimpleDateFormat​​​​​​
从前台过来的日期数据一般都是有格式的String,需要转换成util.Date类型

1.String-->sql.Date

2.sql.Date-->util.Date

3.局限性:日期必须是规定格式!

4.引入新类DateFormat

4. Calendar
Calendar是一个抽象类,不能直接创建对象,使用子类实现

可以使用静态方法Calendar.getInstance()创建。

常用方法:get(),set()

如何从String转换为Calendar

练习:给出一个日期,打印出那一月正确的日历,且在给定日期标星号,如下图。
ae699c71c2264e9aa48e28449422536b.png

c5d03b5e69454339831f94388d418532.png 

fddf59837e0e4f68bb891a7d09e5c4f2.png 

LocalDate、LocalTime、LocalDateTime

缺陷:

可变性和不可变性不合理(不应该有set方法,不应该可以改日历,一个日历对象仅仅永远只能是一个时间,不可变)

偏移性:getYear(),是从1900开始的,有偏移性

格式化,格式化只能对Date格式化,而不能对Calendar格式化

基于这些缺陷,创造了第三批Api。但是前面两批都有人用

1) LocalDate

2) LocalTime

3) LocalDateTime (最常用)

get方法

with方法(不可变体现)

加减方法

toString() (无偏移性体现)

4) Demo

三、Math类

1. API文档中学习

1.基本概述2f2a3ad560d8498e8fd8cb7dbc55e3bf.png

f9e75477314f49dda0c30859c633b774.png 

bb53c10005b5458c8997d2f62d481fea.png 

ab5ed8e96f7b442d9f52573f1f763b79.png 

四、Random类
1. 自行在API文档中初步了解Random类
2. 不管是无参数构造Random,还是Math类的random方法,最后底层都是到Random类的有参构造中。
3. Demo
五、String类

API文档中自行先把概述了解
1. String类的本质
将字符串起来,就是字符串,是不可变类
所有的字符串都是一个实例化出来的对象,例如"abc","你好世界","helloworld"等。
字符串内容不可变,类比LocalDateTime类的不可变性。
String底层是一个char类型的数组
2. String的常用方法
String()空参构造器,给出一个空的value。

String(String original),将original的value和hash给到正构造的String对象。

String(char value[]),将value数组中的值复制到正构造的String对象的属性value中。

length(),字符串底层数组长度。

isEmpty(),字符串底层数组是否为空。

charAt(int index),字符串中底层数组相对应下标的对应值。

equals(Object object),比较两个字符串是否值相等,已被重写。fcab6b2531c04f768fb60a6697bda028.png

 compareTo(String anotherString),对比两个字符串,实现了一个Comparable接口,需要重写compareTo方法,已被重写。cfa88fd1b29742348e1bbad41ad35668.png 

d1ae034af9ac477e9e34efc7bbefe56d.png 

  3. String内存分析

String在常量池中放置了一个变量,如果后续有结果相同的变量那就不会在增加一个变量,比如String s = "abc";后续如果再来了一个String s1 = "ab"+"c",常量池中也只会有一个"abc",不会有两个。但是注意使用String(String original)构造的String对象则不同。723563f4430b43f3ac4a75296951327b.png

 上面的字符串会进行编译优化,合并成完整的字符串,可使用反编译工具查看class文件如下:9aea3f087a15495ab5babec67dacdcc2.png 

5a7cd1772e9548d2a33511a016a1d854.png 

3994707669e346d5a49297b111a65e65.png 

244531270afe4bde9fbbd68b09797b33.png 

6f148790b52f4b77b57daca5a520d19d.png 

 进行反汇编命令后得到反汇编代码,我们观察:b4f12af1ab914ad5b9ebbb62881c82f7.png 

  在观察中知道用了两次append,所以在使用变量a和"def"进行拼接的时候,不会进行编译优化,不会直接变成"abcdef",而是会使用StringBuilder类中的方法进行追加。8037ea1b2a694b3ea93d63b8c8d78315.png

 2e8336c321f0462abc1fd91ae466c8d5.png

4fa5a2dd749844f98106bc4b466b616f.png 

  5.解释可变和不可变e94a16cf4d5b4bc3b863e1c470a9ad7e.png 

235dd51b023c43ae9695acb96296a951.png 

 6. StringBuffer概述

基本方法和StringBuilder基本一样,包括追加和构造基本一样。

synchronized,按下不表,多线程部分重点。

7. String,StringBuilder,StringBuffer的区别与联系

String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁。

StringBuffer类则代表一个字符序列可变的字符串,可以通过append、insert、reverse、setChartAt、setLength等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String

JDK1.5新增了一个StringBuilder类,与StringBuffer相似,构造方法和方法基本相同。

不同是StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高。通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder

StringBuilder:JDK1.5开始效率高线程不安全

StringBuffer:JDK1.0开始效率低瞭线程安全。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值