Java第七次作业

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

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

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

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

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

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

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

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

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

并不是。 

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

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

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

类的继承关系

java.lang.Object

​ java.lang.Number

​ java.lang.Integer

实现接口 

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

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

类的历史

字段摘要 Field Summary

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

 

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

 常用方法,主要查看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()将对象和指定对象进行比较

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

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

 

 

LocalDate、LocalTime、LocalDateTime

缺陷:

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

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

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

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

1) LocalDate

2) LocalTime

3) LocalDateTime (最常用)

get方法

with方法(不可变体现)

加减方法

toString() (无偏移性体现)

4) Demo

三、Math类

1. API文档中学习

1.基本概述

 

 

 

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

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

 

  3. String内存分析

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

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

 

 

 

 

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

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

 

 

  5.解释可变和不可变 

 

 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、付费专栏及课程。

余额充值