Java常用类

常用类

要掌握一个类,要看它的构造方法和常用方法,继承了那些类,实现了那些接口,特殊点在哪

JDK中提供了一些常用的类
		Object类
		包装类  
			Byte、Short、Character、Integer、Float、Long、Double、Boolean
		字符串类
			String
			StringBuffer
			StringBuilder
		时间日期类
			java.util.Date
			java.sql.Date
			java.sql.Timestamp
		数字类
			Math
			Random
		输入输出类   // 在IO中
			Writer
			Reader
			OutputStream
			InputStream
		System类
		Comparable接口  //在集合中

Object类

不是抽象类!!
当一个类没有显式的声明父类时,它的父类就是Object;当一个类显式的声明父类后,Object就是它的间接父类

作用: 以 最高类的形式处理所有的对象,所有的对象都可以上转型为Object

构造方法

//只提供了Object类的无参构造方法
Object()

clone()方法

创建当前对象的副本

protected Object clone()
				 throws CloneNotSupportedException
				 //当前包可以访问,包外子类可以访问(必须是继承来的),包外子类不可以访问  

注意点:

1,如果需要类支持克隆,除了需要重写clone方法以外,还要实现Cloneable的接口,否则可能会抛出CloneNotSupportedException异常

2,克隆是一种创建对象的方法(new一个对象,反序列化创建对象,通过反射创建对象都是创建对象的方法)

3,克隆的分类:深克隆和浅克隆

深克隆:克隆了对象,也克隆了对象的全部引用,克隆出的对象和原对象的资源相互独立

浅克隆:只克隆了对象本身,对象的引用需要依赖原对象的

Java,默认是浅克隆,想要深克隆的话,要重写clone()方法,将它的引用也全部克隆

深克隆与浅克隆
hashCode()方法

返回一个哈希码,作用是提高哈希表的性能。Object的哈希码是通过内存地址转化而来的

规定:

  • 当一个对象被创建的,它的哈希码应该是固定的,除非修改了他的核心信息
  • 相等的对象,哈希码必须相等。
  • 不相等的对象,可以有不一样的哈希码也可以有一样的哈希码(但是不同的对象尽量要用不同的哈希码)

equals方法

判断两对象是否相等

  • Object.equals() 与 == 是一样的,对引用类型来说,就是看是不是指向同一个对象
  • 这个方法可以被重写,比如String就重写了这个方法
  • equals要与hashcode一起重写

toStringg方法

返回字符串的表示形式

  • Object的实现形式:类型@内存地址(十六进制)
  • System.out.println(对象) ,就会默认调用toString

finalize方法

对对象进行清理

  • JVM的垃圾回收用的 要调用close()
  • 当前对象无引用时

getClass方法

获取当前类在方法区中的信息

  • 在反射中,创建Class对象时,会用到

wait, notify, notifyAll

线程等待,随机唤醒一个线程,唤醒所有线程

  • 这个在线程同步的时候会用到

包装类

Java时一种完全面向对象的语言,为了以面向对象的方式处理,所以引入了八种数据类型对应的包装类

Byte、Short、Character、Integer、Float、Long、Double、Boolean
byte   short  char      int      float  long  double  boolean

包装类可以自动拆箱和装箱

基本数据类型->包装类 装箱
包装类->基本数据类型 拆箱

装箱

  • Byte、Short、Character在赋值的时候,可以是整数,也可以是字符,但是必须是常量而且不能超出范围
  • Integer、Long、Float、Double在赋值的时候,必须赋值为对应的基本数据类型,没有数据类型的自动转换

拆箱

  • 只要符合基本数据类型的转换都是可以的

构造函数

  • 包装类可以通过new的方式创建,包含两种方式,包装类(相应的基本数据类型),包装类(字符串)
  • 包装类对象的创建,注意点:-128-127的数值,包装类会将其放在常量池中,再次用到时,会直接从常量池中获取

包装对象的处理

  • 包装类型的对象在进行算数运算时,会自动拆箱为基本数据类型,再进行运算
  • 包装类型的对象,在进行比较运算时,可以进行 > >= < <=运算,会进行自动拆箱
  • == 和 !=时,一边是基本数据类型,另一边是对象是,也可以进行拆箱
  • 不同类型不可以使用== != 进行比较

包装类的方法

  • 重写了equals
  • 基本数据类型与字符串的转换
基本类型->字符串 
基本数据类型+""
Byte
toString()


(*)toString()
(*)toString(Object)
(Integer Long).toString(Object,int redix) redix进制
(Integer Long).toBinaryString()   二进制
(Integer Double Float).toHexString()    十六进制
(Integer Long).toOctalString() 八进制


String->基本数据类型 
(无Byte)parse*(String s)
(Byte Character Integer Long )parse*(String s, int radix)

Integer 和 Long一样  Double和Float一样

还有很多的方法

String

  • 字符串声明为final的,不可以被继承
  • String实现了Serializable接口:表示字符串是支持序列化的(在IO流,对象流中会用到),实现了Comparable接口:表示String可以比较大小
  • String内部定义了final char[] value 用于村塾字符串数据,是不可变的
  • String的值存放在常量池,是可以共享的

String的不可变性

1,当对字符串重新赋值时,需要重写指定内存区赋值,不能使用原有的value进行赋值
2,对当前字符串进行连接操作时,不修改原有的值,会重新指定内存区域赋值
3,当调用String的 replace() 方法修改字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值

!!字符串拼接方式赋值对比

1,常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量。也就是说,变量的值是通过常量赋值,或者常量拼接赋值,而且值相同,那么变量就相等
2,只有其中一个是变量,那么结果在堆中
3,如果拼接的结果调用intern()方法,返回值就在常量池中

String类与其他类的转换

与基本数据类型和包装类之间的转换
String->基本数据类型、包装类 包装类.parseXxx(Str)
基本数据类型、包装类->String String.calue(Xxx)

与字符数组char[] 
String->char[]   String.toCharArray()
char[]->String   String的构造器

与字节数组byte[]
String->byte[]  String.getByte()   编码
byte[]->String  String 的构造器     解码

与StringBuffer、StringBuilder
String->StringBuffer/StringBuilder  StringBuffer/StringBuilder的构造器
StringBuffer/StringBuilder->String  String的构造器或者StringBuffer/StringBuilder 的toString

String 的常用方法

charAt 返回指定下标位置的字符
codePoint 返回Unicode代码点数
compareTo 按照字典比较两个字符产,但是不考虑大小写
concat 将指定字符串连接在此字符串的结尾
contains 判断此字符串是否包含指定字符串
startWith/endWith  测试此字符串是否以指定字符串为开头/结尾
equals 判断相等,会有风险,当字符串为null时,报null指针异常、
hashCode 
indexOf/lastIndexOf
replace 将字符串中的某字符串替换成另一个字符。不会影响原来的值,而会生成新的
split 字符串分隔
subString 截取
trim  去掉字符串前后的空白
toUpperCase/toLowerCase  全部转换成大写/小写
length 返回字符串的长度,这一长度等于字符串中Unicode代码单元的数目
codePointCount 返回字符串有多少个字节,返回此String的指定文本范围的Unicode代码点数

Unicode(utf-16)编码

Java的代码分为内码	char或者String在内存中的编码方式
									内码使用的就是utf-16的编码
						 外码	除了内码都可以认为时“外码”(包括class文件的编码)
代码单元(codeUnit) 代码单元是指一种转换格式(UTF)中最小的一个分隔,因此一种转换格式指挥包含整个单元,UTF-X中的X就是各自带啊单元的位数
UTF-16   其中的16指的就是最小为16位一个单元,也就是两个字节一个单元。UTF-16可以包含一个单元和两个单元,对				  应即是两个字节和四个字节,我们操作UTF-16的时候以它的一个单元位基本单位的
				UTF-16编码一个字符时,对于U+0000到U+FFFF范围内的字符采用2字节进行编码
				大于U+FFFF的字符采用4字节进行编码

在这里插入图片描述

StringBuffer和StringBuilder

StringBuffer和StringBuilder都表示可变字符串,不过StringBuffer是线程安全的可变字符序列,StringBuilder是不保证线程同步,也就是不安全的,StringBuilder的效率要比StringBuffer高

构造方法

StringBuilder()  默认初始容量位16
StringBuilder(int) 初始容量为指定值
StringBuilder(String) 初始容量为16+string.length

容量什么时候会变化

  • 在添加过程中,不超出容量时,无变化
  • 如果超出容量要进行扩容: 原来容量*2+2

常用方法

append 追加
insert 插入
delete 删除
replace 替换
setCharAt 设置指定位置字符
charAt 指定位置的字符
reverse 逆转
capacity 容量

String、StringBuffer、StringBuilder三者的对比

String:不可变的字符序列,底层使用char[] ,占用内存(会不断的创建和回收对象)
StringBuffer:可变字符序列,底层使用char[] 存储,线程安全的,效率低,
String Builder:可变字符序列,底层char[]实现,1.5新增的,线程不安全的,效率高

时间日期

System.currentTimeMillis()
System类提供的 public static long currentTimeMillis() 用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。(时间戳) 此方法适于计算时间差。

java.util.Date类、java.sql.Date类、java.sql.Timestamp类
java.sql.Date和java.sql.Timestamp是专门用于数据库的 ,其中Date只表示年月,Timestamp表示年月日,时分秒,毫秒,能够精确到纳秒

java.util.Date类
表示一个日期时间,能精确到毫秒,继承自calendar(抽象类,转换年月日时分秒的)

构造方法

Date() 系统当前时间
Date(long) 以Thu Jan 01 08:00:00 CST 1970为基准时间依赖的指定毫秒数

常用方法

after/before 测试是否在此日期之前/之后
compareTo 
getTime 从Thu Jan 01 08:00:00 CST 1970到现在的毫秒数

日期的格式化
SimpleDateFormat类,是一个以语言环境有关的方式来格式化和解析日期的具体类
在这里插入图片描述

构造方法

SimpleDateFormat() 默认
SimpleDateFormat(String pattern)  用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)   用给定的模式和日期符号构造 SimpleDateFormat
SimpleDateFormat(String pattern, Locale locale)  用给定的模式和给定语言环境的默认日期格式符号构造 SimpleDateFormat。

例子

Date now = new Date(); 
SimpleDateFormat sdf = newSimpleDateFormat("y年M月d日HH:mm:ss.SS");
String s = sdf.format(now);

数字类

Math类、Random类、BigInteger、BigDecimal

Math类 包含用于执行基本数学运算的方法
字段(静态变量) E和PI
还有一些方法

abs  绝对值
acos 反余弦
cos 余弦
expml  e的x方 - 1
random 返回带正号的double值,大于等于0,小于1

Random类 用来生成随机数
构造方法

Random() 创建一个新的随机数生成器
Random(long seed) 使用单个long种子创建一个新的随机数生成器 

常用方法

setSeed(long seed) 使用单个long种子设置此随机数生成器的种子
nextInt() 返回一个伪随机数,它是此随机数生成器的序列中均匀分布的int值
nextInt(int n) 返回伪随机数0-n

BigInteger类
用来表示可可变的任意精度的整数
BigDecimal类
表示不可变的,任意精度的有符号十进制定点数

System类

该类的构造器是private的,所以,没有办法创建该类的对象,也就没有办法数理化该类,内部的成员变量和方法都是static的,所以也可以很方便的进行调用

常用方法

native long currentTimeMillis() 返回当前计算机的时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。

void exit(int status) 退出程序,status = 0 时,正常退出,其他数字是非正常退出

void gc() 请求系统进行垃圾回收。至于系统是否立即回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况

String getProperty(String key) 获取系统中属性名为可以的对应属性值
java.version Java运行时环境版本
java.home  Java安装路径
os.name  操作系统名称
os.version   操作系统版本
user.name   用户账户名
user.home  用户的主目录
user.dir   用户的当前对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值