第一次基础复习

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

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

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

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

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

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

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

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

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

并不是。 

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

打开Java api文档,搜索Integer开始学习

91fbea37c55842b4b38c0f8a1e55d904.png

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

类的继承关系

java.lang.Object

​ java.lang.Number

​ java.lang.Integer

实现接口 

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

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

类的历史

字段摘要 Field Summary

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

a5b67d2e229348be9a4aa4e98279bb92.png

 e8c7df75c5884993866b934db493f7a0.png

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

6c1cdcafa1b045b9a975a77ef9e72840.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()将对象和指定对象进行比较

6f531dc4c7fe4347bb013502840fca5e.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

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

dc19647506ea4901a5413e1033161233.png 

7f61290ca4ea403b90b4e310d3be2a1e.png 5. jdk1.8新增第三批API LocalDate、LocalTime、LocalDateTime

缺陷:

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

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

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

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

1) LocalDate

2) LocalTime

3) LocalDateTime (最常用)

get方法

with方法(不可变体现)

加减方法

toString() (无偏移性体现)

4) Demo

三、Math类

1. API文档中学习

1.基本概述

f0e62311d4bd4d35ac398a5282a498be.png

1.字段概述 7580dc6c2f1c4195b902aecf3b71a1bf.png

 1.构造器私有化(不想让任何人实例化出对象)

16f874fa74c74548a18f05e6b42418d9.png

48bffc5109c5481cb3686ea377f63ef8.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),比较两个字符串是否值相等,已被重写。

cf6a0ca2d5454d6480f00e0ece57d26c.png

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

a7e84ef34e4d4d27b45186dafcaf4c74.png

d563a17dad8044139c40dbae4771a797.png 

  3. String内存分析

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

4e94ef3e9408446988cc3a2cbacb843b.png

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

bce5b713d9c444a4b5a06414e1ac98af.png

fe4ba7db442246988f6261a33bd4051e.png 

3c2eb589ddea4585aeea33805192b995.png 

50f7eea3289c418aa1d52cc3142a22cc.png 

7564722df9b745fda9a50a54d5724095.png 

3a95e043a15347b4aaa71dc7e6dcf150.png 

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

1a7c78ee27a84e41b0450992444921c0.png

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

75b084ebc9cd435bb6c963d3fb393fa8.png

d49f3ce03e4a4b8dac9e25d67ef652f1.png 

54eab15b553c4a7abeb7b7420c6729e3.png 

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

9cd30648311043a0b3737536c2900688.png

6e6fddaf24534d03a6ff01d4a6b0dfa3.png 如下图

863e95a83cb14109b35abb2754f7e291.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开始效率低瞭线程安全。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值