Java常用类

本文介绍了Java中的Object类,包括其hashCode、equals、clone和finalize方法。详细讲解了String的特点和常用操作,如equals、substring、replace等。此外,还提到了可变字符串StringBuilder和线程安全的StringBuffer。时间日期部分涉及Date、LocalDate和时间戳。最后,讨论了Math类的数学运算和Random类的伪随机数生成,以及Java的包装类和装箱拆箱概念。
摘要由CSDN通过智能技术生成

第一章 常用类

1.1 Object

Object类是所有类的父类

当一个类没使用extends指定父类时,父类默认Object类

所有类的对象,都可以看作是Object类的对象。

1.1.1方法

hashCode

在数据结构中有一种数据结构叫哈希表。

哈希表需要用到哈希函数。通过对键(Key)进行一定的运算计算出一个对象的地址。

哈希表查询元素的效率很高:O(1),提供Key之后只需要进行一次运算就可以在哈希表中查找到

在哈希映射中,每一个元素由两部分组成:键Key,值Value

为了提高哈希运算的效率,每一个对象都应该有一个hashCode

哈希约定、常规协定:

  1. 一次执行中,对象没有修改时,hashCode应该是不变的
  2. 相等的对象应该拥有相同的hashCode
  3. 不相等的对象可以拥有相同的hashCode,但应该不同。

Object的返回类型是他的地址

equals

比较两个对象是否逻辑上相等

逻辑上的相等通常指字面量,如String

Object的equals方法作用与 == 是一致的。

如果需要逻辑上的比较,必须重写equals方法,同时有必要重写hashCode,以维持哈希协定。

clone

创建当前对象的副本,这个方法是protected的。

这个方法在当前包(java.lang)内可用

要实现对象的克隆,必须重写他的clone方法,同时实现cloneable的接口才行,否则将会抛出CloneNotSupportedException的错误

克隆不会调用构造方法,而在原有对象的基础上,从内存中拷贝一份出来。克隆也是一种创建对象的方式。

深克隆:深度复制

在复制对象的同时,会将对象中引用的内容也复制一份出来

浅克隆:浅表复制

在复制对象的同时,会不克隆引用的内容,仅仅是复制引用对象的地址。

finalize

GC(垃圾回收)会在清理对象时调用该方法,当一个对象不存在任何引用时,以释放对象所占用的资源,由GC调用

toString

将对象转换成一个字符串的表示形式。

通常需要自己重写。

Object对他的实现是返回数据类型@hashCode(16进制)

getClass

获取当前对象所对应的class对象,保存在元空间

wait

暂停当前线程

notify

唤醒一个由wait暂停的线程

notifyAll

唤醒所有由wait暂停的线程

1.2字符串

1.2.1 String

String类的对象是字符串

特点:

  1. 字符串是常量:

保存字符序列的属性value是一个常量的数组,也没有提供修改下标元素的方法。

String被final修饰,因此也无法通过子类拓展功能。

  1. 可以共享

如果要比较两个字符串的值是否相等,必须使用equals方法

小技巧:如果一个字符串类型的变量要与一个常量进行equals比较,

则“常量”.equals(变量)

字符串常用操作:

  1. 判断类:

charAt(int index):查找指定下标的字符

isEmpty()

eauals():比较两个字符串是否表示的是相同的字符序列。

indexOf():查找指定字符、字符串在原字符串中第一次出现的下标位置,找不到返回-1

lastIndexOf:查找指定字符、字符串在原字符串中最后一次出现的下标位置,找不到返回-1

startsWith:判断当前的字符串是否以指定的字符串开始

endsWith:判断当前字符串是否已指定的字符串结束

2)修改类:

replace:替换字符、字符串

subString:截取字符串

length():长度

split:分开字符串

toUpperCase:转换为大写

toLowerCase:全部转换为小写

intern:从字符串常量池中查询当前字符串是否存在(通过equals判断)。

如果存在,返回常量池中的字符串引用。如果不存在,把这个String对象引用存到常量池,然后返回这个String对象的引用。

Trim:用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等

由于字符串是一个常量,所有试图改变字符串内容的操作都会创建新的对象,拼接也是

1.2.2 StringBulider

可变字符串,线程不安全,用于单线程,优先使用,效率更高。

扩容容量:默认是16,也可以指定,也可以是16+n

扩容:新的容量=旧容量*2+2(原来的容量左移一位再+2);如果新容量还不够用,这是扩容到能容下所有字符为止(扩展到刚刚能够放下所有元素)

1.2.3 StringBuffer

可变字符串,线程安全的,用于多线程,效率稍微低一点

1.3时间日期

1.3.1  java.util.Date类

表示时间点的,精确到年月日时分秒毫秒。

时间戳:从1970年1月1日0点0分0秒,到当前时间所经历的毫秒数。使用lang类型。

对象.getTime(); 获取现在的时间戳

1.3.2  java.sql.Date类

JDK1.1新增加的专门用于时间运算的类。

1.3.3  JDK8新的时间日期类

1.本地时间类型

LocalDate:表示日期,年月日

LocalTime:表示时间,时分秒

LocalDateTime:表示日期加时间。年月日+时分秒。

2.时区时间类型

ZonedDate:表示日期,年月日

ZonedTime:表示时间,时分秒

ZoneDateTime:表示日期+时间,年月日+时分秒

要求:

  1. 创建对象
  2. 操作,获取设置年月日,时分秒,加减
  3. 相互转换
  4. 时间日期与字符串转换

DateTimeFormatter

SimpleDateFormat

1.3.4  java.sql.TimeStmap类

1.3.5  java.sql.TimeStamp类

这两个类,是在访问数据库时用的。他们都是java.util.Date的子类。

区别在于Date只表示,年月日,Timestamp表示时间戳。

1.4数学

1.4.1Math类

数学类:

floor(),全舍舍入法。该值小于等于参数,并等于某个整数。

ceil(),全入舍入法

abs(),绝对值

round(),四舍五入

random(),伪随机数[0.0,1.0),要会使用这个方法生成各种伪随机数。

1.4.2Random类

伪随机数类:指定随机种子时,生成的数一定。

1.5包装类

1.5.1  什么是包装类?

八种基本数据类型,面向对象的表示形式

基本数据类型

包装类

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

1.5.2自动装箱和自动拆箱

1.自动装箱

Byte、Short、Character既可以赋值为整数值,也可以赋值为字符。

2.自动拆箱

包装类型的值,可以直接转换为基本数据类型

只要符合基本数据类型的自动转换即可。

1.5.3类似于String的常量池

在包装类型中,Byte、Short、Integer、Character也有常量池。

Byte、Short的常量池放的是-128~127.

Character的常量池放的是0~127;

包装类型的值进行比较必须使用equals()方法。

=比较的是地址

包装类型的值在进行运算时会先自动拆箱。

两个包装类型使用==、!=时不会拆箱,不同的包装类型的值不能使用==、!=进行运算

基本类型与包装类型使用==、!=比较时,会拆箱

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值