JavaSE入门级-第八课-常用包

 

前言

java的包表示管理类的文件夹,jar表示压缩好的java包,所有大多数情况我们是使用别人研发好的java包来支持我们的研发,只有需要的功能没有对应包的时候我们才考虑自己实现,jdk本身就有包括很多的java研发包,所以工具包了解一下

 

java.lang.*

java基础语言包,所有的类默认导入这个包,所以在使用这个包中的类时可以不用打包名

包装类

java.lang.Integer

对应基本数据类型整型,Integer是类那一定有数据部分,方法部分,和构造器,这是区别于基本数据类型的地方

l  构造:

Integer i= 5; 或 Integer i = new Integer(5);

操作方式和基本数据类型一致

l  方法部分:常用方法

 

 

 

String → int

 

 

 

 

装箱 拆箱

l  将基本数据类型 或 变量,直接赋值给引用数据类型 是装箱

l  讲引用数据类型 直接赋值给 基本数据类型是装箱

(注意:在jdk1.5之后装箱和拆箱是自动的)

 

其他包装类

基本数据类型

对应包装类

byte

java.lang.Byte

short

java.lang.Short

int

Java.lang.Integer

long

java.lang.Long

float

java.lang.Float

double

java.lang.Double

char

java.lang.Character

boolean

java.lang.Boolean

(注意:包装类的 默认值 是 null)

 

思考

基本数据类型,和包装类的区别

 

java.lang.Math

l  Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数,提供了大量的静态方法

 

 

 

(提醒:适应面向对象思想,引用调用即可,而且这些代码可能已经被别人做好)

l  我们来看 Math类源码中一段很有趣的注释

 

 

 

练习

l  行李箱密码忘记了,已知行李箱由3位数字[0-9]组成密码,请用程序描述

l  彩票36选7

l  《史记 六十五卷》田忌赛马,齐国将军田忌 与 齐威王比试赛马,双方各有上等马,中等马,下等马,三局两胜,孙膑是田忌的宾客,说 只需要用下等马对王的上等马,上等马对王的中等马,中等马对王的下等马可胜,田忌得王千金

 

java.lang.String

String代表字符串,老熟人,String类不能被继承因为它是final修饰的

数据部分

String类的数据部分,我们来看一张源码截图:

 

 

 

其实String的数据部分就是 char数组

 

构造器部分

l  直接创建String:String str = “ABC”;

l  构造器创建 String: String str = new String(“ABC”);

二者的区别在于引用的指向,直接赋值 str 是指向常量池,构造器是执行内存空间

l  String构造的问题(难)

l  String str = new String();  str 是空字符串

 

 

 

(了解:jdk1.7以后内存已经移动到堆中,不在方法区)

l  两种构造方式比较

 

 

 

l  拼接字符串比较

 

 

 

l  intern方法

 

 

 

l  单个注册

 

 

 

l  常量 和 变量

 

 

 

方法部分

l  String最常用的方法

 

 

 

l  获得字符串的长度

 

 

 

l  包含字符串 返回 布尔值

 

 

 

l  字符串截取

 

 

 

l  字符串连接

 

 

 

l  查找单个字符

 

 

 

l  大小写转换

 

 

 

l  按照某个字符分割

 

 

 

l  前后去空格

 

 

 

l  万物皆可toString()

 

 

 

 

equals方法

String类重写了equals方法,原有的equals是Object的方法,比较对象hashcode,String重写后将equals用来比较字符串的具体值

具体代码如下:

 

 

 

(注意:要求会默写)

java.lang.StringBuilder

可变的字符串序列,不同步(线程不安全)

构造器部分

 

 

 

 

方法部分

l  append方法

重载方法,实例方法,对象拼接上一个指定内容

l  insert 方法

在指定位置添加一个内容

l  delete方法

删除指定位置的一个内容

l  toString 方法

最终的结果 转变为 String

 

java.lang.StringBuffer

StringBuffer 和 StringBuilder 他们的功能基本一样,StringBuffer是同步的(线程安全)在为确认程序的情况下,优先考虑使用StringBuilder ,它的性能比较高

 

字符串拼接的性能比较

算法优劣性考量可以有两个维度

l  时间复杂度

时间复杂度计算的是语句运行次数,最后可以预估运行算法的时间

l  空间复杂度

空间复杂度是考虑算法消耗的硬件资源

使用一条语句可以判断:

 

 

 

我们可以使用多个时间戳,最后通过差值来判断语句片段的功能

 

 

 

测试的结果:String拼接最慢,StringBuilder最快

 

java.lang.System

提供一些标准的输入输出,和一些静态对象,及加载文件等操作

静态对象

l  in 标准输入流,数据流支持

 

 

 

l  out 标准输出流,提供很多打印的方法

 

 

 

l  err 标准错误输出流

 

 

 

 

System.out.println()

早期学习的固定输出语句,原来是调用System这个类的静态对象out,再调用这个对象的println() 方法,将目标输出

(注意:面向对象使用调用就好,不需要深究具体实现)

 

获得系统当前时间

 

 

 

 

 

退出虚拟机

 

 

 

 

主动清扫垃圾

 

 

 

垃圾回收机制是往后的内容,暂时不说

 

加载文件

加载文件主要是对native方法有用,在java中对于一些特殊的功能使用java无法实现,必须借助C语言来完成,所以在java中有一些方法声明成为 native 这类方法是本地方法,不是给研发人员调用的,是虚拟机调用的,是使用其他语言实现的方法,实现步骤:

l  声明一个native方法,并用javah编译,生成.class文件 和 .h文件

l  写一个.cpp文件实现native方法,将他们链接在一起

l  在java中使用System.loadLibary();就可以使用native方法

 

java.lang.Runtime

Runtime类表示运行中的环境,每一个程序都有一个对应的运行环境

方法部分

l  gc方法 runFinalization()方法

主动通知垃圾回收机制来回收垃圾

l  其他方法

 

 

 

 

java.lang.Object

java的顶点类,基类,超类,是所有 类、数组的父类,它表示一种规范,所以有:

Object obj = new 任何类();

把任何类对象赋值给obj一定是合法的(向上转型不需要显示声明)

构造部分

直接无参new

 

方法部分

Object提供了很多的native方法,如果是native方法只需要考虑功能即可

l  getClass 方法

 

 

 

获得一个Class对象,后续章节内容这里不解释

l  hashCode 方法

 

 

 

返回对象的 hash码,十进制,我们一般会转换成16进制

hashcode

hashcode也称为哈希码,是一个编码标识,它是用来查找使用的,内存中保存的数据需要被查找才能够使用,《数据结构与算法》一书中提到,如果能简历一个关键码和具体值这样完整的对应关系,那么在查找对象的时候,依赖于对应关系去找关键吗就可以,而这个关系最好是一一对应。

l  假设有数据:(中国一共有34个地区)

key

BEIJING

北京

TIANJIN

天津

HEBEI

河北

SHANXI

山西

SHANGHAI

上海

SHANDONG

山东

FUJIAN

福建

f1(key)

02

20

08

19

19

08

06

f2(key)

 

 

 

 

 

 

 

f3(key)

 

 

 

 

 

 

 

我们需要提供查找的效率,就需要设置一个对应关系,因为表示往往是简单的

例如:

l  指定对应关系f1,以每个数据首个字母在字母表中的顺序定制hash码

(知识:这种对应关系我们称为 哈希函数)

(注意:哈希函数是灵活的,多样的,但是必须合理,在简易的哈希函数下山西和上海出现了key重复的情况)

l  相同的的key 缺得到了不同的 value,这种现象我们称为冲突,这两个value称为同义词

hash函数的设置最好是能够减少冲突,做到一对一映射

l  指定对应关系2,取头尾两个字母的位置和 再减去 30 为key

l  指定对应关系3,取头尾两个字母的ascii转成10进制

像这样,针对给定数据设置一个“好”的hash函数,所有的hash码我们称为hash表

常见的hash函数有 线性,数表,取余,链式地址,随机数,再哈希

 

hashcode最终结论

l  hashcode 的默认是实现 是根据内存地址进行计算的

l  HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的

l  如果两个对象equals相等,那么这两个对象的HashCode一定也相同

l  如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写

l  如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置

 

l  equals 方法

 

 

 

判断连个对象的等值关系,经常被重写

l  clone 方法

 

 

 

原型模式中使用,可以克隆对象(下文再说)

l  toString 方法

 

 

 

Object是基类,所以万物皆可toString,经常被重写

l  其他方法

wait()  notify() 和线程相关以后再说

l  finalize方法

 

 

 

当对象的被回收,结束生命周期会调用这个方法

 

java.lang.Objects

jdk1.7 提供的对于Object的工具

方法部分

l  比较两个对象,避免空指针问题

 

 

 

l  对象toString,避免空指针问题

 

 

 

 

原型 设计模式

使用对象去创建对象,注意要实现接口 Cloneable

 

 

 

浅拷贝

只能够拷贝特定属性值

深度拷贝

对象包含引用类型需要深度拷贝

客户端代码:

 

 

 

 

 

简单工厂 设计模式

l  简单工程,根据传入表示的不同获得不同的创建对象

 

 

 

posted @ 2021-07-18 09:06  二娃千里眼  阅读(52)  评论(0)    收藏  举报