Java常用类

  1. Object类,2. String类,3. 8种包装类。4. 日期,5. 随机数

1. Object类

protected Object clone() //负责对象克隆
int hashCode() //获取对象哈希值的一个方法
boolean equals(Object obj)//判断两个对象是否相等
String toString //将对象转换成字符串形式
protect void finalize() // 垃圾回收器负责调用的方法

1.1 equals方法

以后所有类的equals方法也需要重写,因为Object中的equals方法比较的是两个对象的内存地址,我们应该比较类容,所以需要重写
重写规则:自己定,主要看是什么和什么相等时表示两个对象相等,基本数据类型比较:== ;对象和对象比较:调用equals方法
String类已经重写了equals方法,比较两个字符串不能使用 = = ,必须使用equals。equals是通用的。

1.2 toString()方法

String类的toString方法已经重写了。
以后所有类的toString()方法是需要重写的,重写规则越简单越明了就好。
System.out.println(引用);这里会自动调用“引用”的toString()方法

1.3 finalize()方法

在Object类中的源代码:
protected void finalize() throws Throwable{ }
finalize()方法只有一个方法体,里面没有代码而且这个方法是protected修饰的。
这个方法不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法。
当一个java对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize()方法。
finalize()方法实际上是SUN公司为java程序员准备的一个时机,垃圾销毁时机。
如果希望对象销毁时机执行一段代码的话,这段代码要写到finalize()方法当中。
提示:

java中的垃圾回收器不是轻易启动的,垃圾太少,或者时间没到,种种条件下,有可能启动,也有可能不启动。

1.4 hashCode方法

提到hashcode方法就避免不了equals方法,无论何时这个equals方法被重写那么都是有必要去重写hashCode方法。这个是为了维持hashCode的一种特定,相同的对象必须要有相同的hashCode值。
hashCode方法解释

再同一次的java程序应用过程中,对应同样的对象多次调用hashCode方法,hashCode方法必须一致性的返回同样的一个地址值,前提是这个对象不能改变。
两个对象相同是依据equals方法的,那么其中的每一个对象调用hashCode方法都必须返回相同一个integer值,也就是对象的地址,equals方法相等,那么hashCode方法也必须相等。
如果两个对象依据equals方法返回的结果不相等,那么对其中的每一个对象调用hashCode方法返回的结果也不是一定必须得相等,也就是说,equals方法的结果为false,那么hashCode方法返回的结果可以相同也可以不相同。

2. String类

String类的使用:

  1. String:字符串,使用一对“”引起来表示。
  1. String声明为final的,不可以被继承。
  2. 字符串的字符使用Unicode进行编码,一个字符(不区分字母还是汉字)占两个字节。
  3. String实现了Serializable接口:表示字符串是支持序列化的,说明可以在网络上传输。
  4. 实现了Comparable接口:表示String可以比较大小。
  5. String类内部定义了final char[] value用于存储字符串数据。

注意:value是一个final类型,不可以修改:即value不能指向新的地址,但是单个字符内容是可以变化的。

  1. String代表不可变的字符序列,简称:不可变性

体现

  1. 当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的value进行赋值。
  1. 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
  2. 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
  3. 通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中
  4. 字符串常量池中是不会存储相同内容的字符串的

String实例化的方式:
方式一:通过字面量定义的方式:String s1=“abc”;
方式二:通过new + 构造器() 的方式:String s3 = new String(“abc”);

重要规则:
String c1=“ab” + “cd”; 常量相加,看的是池。
String c1 = a + b; 变量相加,是在堆中。
常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量。
只要其中有一个结果是变量,结果就在堆中。
如果拼接的结果调用intern()方法,返回值就在常量池中。

3. 8种包装类

基本数据类型---->引用数据类型(装箱)

Integer integer = new Integer(123);

引用数据类型---->基本数据类型(拆箱)

float v = integer.floatValue();
System.out.println(v);//123.00

引用数据类型---->基本数据类型(拆箱)

int retValue = integer.intValue();
System.out.println(retValue);//123

自动装箱:基本数据类型自动转换为包装类。
自动拆箱:包装类自动转换为基本数据类型

在JDK1.5之后 支持自动装箱和自动拆箱了

自动装箱

int类型–(自动转换)–>Integer
Integer x = 100;
System.out.println(x);//100
//z是一个引用,一个变量,保存了一个对象的内存地址。
Integer z = 1000;//等同于 Integer z = new Integer(1000)

// + 两边要求是基本数据类型,z是包装类,不属于基本数据类型。这里会进行自动拆箱,将z转换成基本数据类型
System.out.println(z + 1);//自动拆箱机制
Integer a = 1000;//Integer a = new Integer(1000); //a是个引用,保存内存地址指向对象。
Integer b = 1000;//Integer b = new Integer(1000); //b是个引用,保存内存地址指向对象。
// == 比较的是对象的内存地址,a和b两个引用中保存的对象内存地址不同。
// == 这个符号不会触发自动拆箱机制,只有 + - * /等运算的时候才会。
System.out.println(a == b);//false
System.out.println(a.equals(b));//因为是对象 这里可以使用equals方法//true

自动拆箱

包装类型–(自动转换)–> 基本数据类型
int y = x;
System.out.println(y);//100

构造方法
int --> Integer

Integer x = new Integer(100);

String --> Integer

Integer y = new Integer(“123”);

double --> Double

Double d = new Double(1.23);

String浮点数 --> Double

Double e = new Double(“1.23”);

整数型常量池:

java为了提高程序的执行效率,将[-128~127 ]之间所有的包装对象提前创建好,放到了一个方法区的“整数型常量池”当中了,目的是只要用这个区间的数据不需要再new了,直接从整数型常量池中取出来。
在Integer这个类加载的时候就初始化这个整数型常量池:256个对象

各类型之间的转换
String --> int

String s3 = “123”;
int x1 = Integer.parseInt(s3);
System.out.println(s3+1);

int --> String

String s1 = String.valueOf(123);

int --> Integer

Integer x = 1;

Integer --> int

int y = x;

String --> Integer

Integer k = Integer.valueOf(“256”);

Integer --> String

String s2 = String.valueOf(k);

4. 日期

4.1 Date类

Date类的概述

java.util.Date类表示特定的瞬间,精确到毫秒。(Date类其实是一个表示日期和时间的类)
注意:1000毫秒 = 1秒

Date类中的一些概念

毫秒值的概念
毫秒值就是两个时间段相差的时间转换为相差多少毫秒。
毫秒值的作用
毫秒值可以对时间和日期进行计算,比如计算2099-02-04到2039-04-12中间一共有多少天,因为日期是字符串我们没办法直接进行加键,所以我们可以把日期转换为毫秒进行计算,计算完毕后再把毫秒转换为日期。
时间原点:
时间原点就是(0毫秒):1970 年 1 月 1 日 00:00:00。
系统当前时间的方法
System.currentTimeMillis()System类中的currentTimeMills方法,该方法得到的是系统当前时间的毫秒值,long类型的。

注意:
中国属于东八区,会把时间增加8个小时,时间原点中的1970年1月1日00:00:00是英国格林威治时间,而到我们中国时间原点变为1970年1月1日08:00:00。

Date类中常用的构造方法和成员方法:

Date() 空参构造

作用:获取当前系统的日期和时间
注意:CST指的是中国的标准时间

Date(long date) 代参构造方法

作用:传递毫秒值,把毫秒值转换为Date日期

getTime()方法

作用:把系统当前日期转换为到时间原点的时间的毫秒值

4.2 DateFormat类**

DateFormat类的概述

java.text.DateFormat是日期和时间格式化子类的抽象类
我们通过这个类可以帮我们完成日期和文本之间的转换
也就是可以在Date对象与String对象之间进行来回转换
作用
格式化:按照指定的格式,从Date对象转换为String对象
解析:按照指定的格式,从String对象转换为Date对象

DateFormat类的成员方法
format(Date date)方法,得到一个String类型的结果

作用
按照指定的模式,把Date日期,格式化为符合模式的字符串
使用方式:
// 创建一个SimpleDateFormat对象,通过构造方法传递指定的模式
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH时mm分ss秒”)
// 调用SimpleDateFormat对象中的方法format,按照构造方法中的指定模式,把Date日期格式化符合模式的字符串
Date date = new Date();
String d = sdf.format(date);

parse(String source)方法,得到一个Date类型的结果

作用
把符合模式的字符串解析为Date日期
使用方式
private static void demo02() throws ParseException {
//创建一个SimpleDateFormat对象,通过构造方法传递指定的模式
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH时mm分ss秒”)
// 调用SimpleDateFormat对象中的parse方法,把符合构造方法中模式的字符串,解析为Date日期
Date date = sdf.parse(“2088年03月04日 14时12分33秒”)
}

注意:
在parse的源码中,方法声明了一个异常叫ParseException
如果字符串和构造方法的模式不一样,那么程序就会抛出此异常。
我们在调用一个抛出了异常的方法,就必须处理这个异常,要么throws继续抛出这个异常,要么try catch自己处理

4.3 SimpleDateFormat类

因为DateFormat类是一个抽象类,不能直接创建对象使用,所以我们选择使用它的子类SimpleDateFormat
构造方法
SimpleDateFormat(String pattern)构造方法

使用方式:用给定的模式和默认语言环境的日期格式符号构造
参数的含义:传递进指定的模式
作用:传递进默认格式然后转换为对应模式的日期和时间
注意:我们再写对应模式的时候,字母严格区分大小写,连接的符号可以改变
“yyyy-MM-dd HH:mm:ss"也可以写成"yyyy年MM月dd日 HH时mm分ss秒”

5. 随机数

在Java中,随机数的概念从广义上将,有三种:

  1. 通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。
  1. 通过Math.random()返回一个0到1之间的double值。
  2. 通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。

Random

Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率是均等的。

种子数只是随机算法的起源数字,和生成的随机数字的区间无关。
Random r = new Random();
没有给种子,用的是默认种子,是当前时间的毫秒值。
无参:同样的程序运行两次得到的结果并不相同,是因为在创建Random对象时没有传入种子参数,程序会自动以当前时间为时间戳,所以每一次的运行结果都是不同的。
Random r1 = new Random(10);
给出指定的种子。
有参:无论运行多少次,结果完全相同,那是因为创建Random对象时传入了参数,两次运行时种子相同。

Random中的方法

Random类的
nextDouble()方法返回的是0.0至1.0之间的double类型值。
nextFloat()方法返回的是0.0至1.0之间的float类型值。
nextInt(int n)返回的是0(包括)至n(不包括)之间的int值。

其中的nextFloat(),nextDouble()方法分别生成0-1的8位有限小数,16位有限小数的随机数。

生成[0,d ) 区间的随机小数: random.nextDouble()d;
生成[1,d)区间的随机小数: random.nextDouble() * d+1;
生成[5.0,8.0]区间的随机小数: random.nextDouble()
(8.0-5.0+0.1)+5.0;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值