2021-04-12 常用类

第十一节 常用类

内部类

内部类分类
什么是内部类

概念:在一个类的内部再定义一个完整类,内部类可以访问外部类的私有成员(成员和方法)
可为外部类提供必要的功能组件
特点:
编译之后可生成独立的字节码文件。外部类$内部类.class
只有内部类可以直接访问外部类的私有成员,而不破坏封装,其他外部类不行。
可为外部类提供必要的内部功能组件

成员内部类

在类的内部定义,与实例变量,实例方法同等级别的类
和属性 方法 类 都有静态和非静态两种格式
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
Outer out =new Outer()
Outer.inner in=out.new Inner();
当外部类,内部类存在重名属性时,优先访问内部类属性
成员内部类不能定义静态成员
在这里插入图片描述

静态内部类

不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
只能直接访问外部类的静态成员,(实例成员需要实例化外部类对象)
静态内部类可以定义非静态成员,而非静态内部类里面不能定义静态属性。
Outer.Inner inner=new Outer.Inner();
Outer.Inner.show();
在这里插入图片描述

局部内部类

定义在外部类方法中,作用范围和创建对象范围仅限当前方法
局部内部类访问外部类当前方法中局部变量时,因无法保障变量的声明周期与自身相同,变量必须用final修饰
限制类的使用范围
在这里插入图片描述

匿名内部类

没有类名的局部内部类(一切特征都与局部变量相同)
必须继承一个父类或者实现一个接口
定义类 实现类 创建对象的语法合并,只能创建一个该类的对象
优点:减少代码量
缺点:可读性较差
在这里插入图片描述

Object类

超类、基类、所有类的直接或间接父类,位于继承树的最顶层
任何类,如果没有写extends显式继承某个类,都默认继承Object类,否则为间接继承
Object类型可以存储任何对象
作为参数:可以接受任何对象
作为返回值:可以返回任何对象

getclass方法
public final Class<?>getClass(){}
返回引用中存储的实际对象类型
应用:通常用于判断两个引用中实际存储对象类型是否一致
hashCode()方法

public int hashCode(){}
返回该对象的十进制哈希吗值
哈希吗算法根据 对象的地址或字符串 或数字计算出来的int类型的数值
哈希吗并不唯一,可保证相同对象返回相同的哈希吗值,尽量保证不同对象返回不同的哈希吗值

toString方法

public String toString(){}
返回该对象的字符串表示(表现形式)
可以根据程序需求覆盖方法,如:展示对象的各个属性值

equals()方法

public boolean equals(Object obj){}
默认实现为(this==obj),比较两个对象地址是否相同
可进行覆盖,比较两个对象的内容是否相同
在这里插入图片描述

equals方法覆盖步骤

比较两个引用是否指向同一个地址
判断obj是否为null
判断两个引用指向的实际对象类型是否一致
强制类型转换
依次比较各个属性值是否相同
在这里插入图片描述

包装类

基本数据类型对应的引用数据类型
Object可统一所有数据,包装类的默认值是null
包装类对应
基本数据类型 包装类型
|i基本数据类型|基本数据类型对应的引用数据类型 |
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

类型转换与装箱拆箱

8种包装类提供不同类型间的转换方式
Number 父类中提供的6个共性方法
parseXXX()静态方法(除了character)
valueOf()静态方法
注意:保证类型兼容,否则抛出NumberFormatException异常
JDK5.0之后,自动装箱、拆箱,基本数据类型和包装类自动转换。
整数缓冲区
java预先创建了256个常用的整数包装类型对象
在实际应用当中,对已创建对象进行复用

String

java 程序中所有字符串文本(例如:abc),都是此类的实例

String

字符串:相当于字符的串,字符拼接
一旦一个字符串被成功创建,字符串是常量,创建之后不可更改,
异常树,所有异常的根是exception 最终根是object类,有两种下标越界异常 数组 字符串 ,还有一种是

练习

![常用类](https://img-blog.csdnimg.cn/20210413141642269.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3htZ2RjeHl6bQ==,size_16,color_FFFFFF,t_70

System系统类

System系统类,主要用于获取系统的属性数据和其他操作
static void arraycopy(…) 复制数组
static long currentTimeMillis(); 获取当前系统时间,返回的是毫秒值
static void gc()建议jvm来快速启动垃圾回收机制。
static void exit(int status);退出jvm,如果参数时0,表示正常退出jvm,非0表示异常退出jvm。
在这里插入图片描述

BigDecimal类

很多实际应用中需要精确运算,而double类型是近似值存储,不符合要求,需要借助BigDecimal
BigDecimal位置:java.math包中。
作用:精确计算浮点数。
创建方式:BigDecimal bd=new BigDecimal(“1.0”);
方法:
BigDecimal
BigDecimal类除法
除法:divide(BigDecimal bd,int scal,RoundingMode mode)
参数scale:指定精确到小数点后几位
参数mode:
指定小数部分的取舍模式,通常采用四舍五入的模式
取值为:BigDecimal.ROUND_HALF_UP.
在这里插入图片描述

时间类型 Date

Date表示特定的瞬间,精确到毫秒
Date类中大部分方法都已经被Calendar类中的方法所取代
Date中的format和parse

SimpleDateFormat(日期格式)

SimpleDateFormat是以语言环境有关的方式来格式化和解析日期的类
进行格式化(日期 ——> 文本)解析(文本——>日期)
常用的时间模式字符
y 年 2019
M 年中月份 08
d 月中天数 10
H 1天中的小时数(0-23)22
m 分钟11
s 秒 59
S 毫秒 376

Calendar日历

Calendar提供了获取或设置各种日历字段的方法
protected Calendar()构造方法为protected修饰,无法直接创建该对象,可以用Calendar类里面的一个公开静态方法getInstance()来返回一个Calendar类型的对象。
其他方法
static Calendar getInstance()使用默认时区和区域获取日历
void set(int year,int month,int date,int hourofday,int minute,int second),设置日历的年月日时分秒
int get(int field)返回给定日历字段的值,比如年,月 日
void setTime(Date date)用给定的Date设置此日历的时间,Date-Calendar
void add(int field ,int amount)按照日历的规则,给指定字段添加或减少时间量
long getTimeINmillis() 毫秒为单位返回该日历的时间值,
在这里插入图片描述

java中final,finally,finalize三个关键字的区别

final

修饰类的时候,此类不能被继承,此类不能派生出新的子类,因此一个类不能被同时声明为abstract和final,当final修饰变量或者方法时,可以保证他们在使用中不会被改变,被声明为final的变量必须在初始化时给定值,以后在使用时只能被引用而不被修改,同样,当final修饰一个方法时,这个方法不能被重载,
final修饰方法的时候此方法不能被重写
fianl修饰变量的时候,此变量变为常量。

finally

异常处理时提供finally来执行任何清除操作,如果抛出一个异常,那么相匹配的catch子句就会被执行,然后控制就会转入finally块

finalize

方法名,finalize方法在垃圾回收器执行内存对象清理时会调用finalize()方法进行前期的清理工作,这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的,它是在object类中定义的,因此所有类都继承了它,子类覆盖finalize()方法,以整理系统资源,或者执行其他清理工作,finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

类型转换

把Integer类型的转换为各种进制的数。

public class TestStringInteger {
	public static void main(String[] args) {
		int i=100;
		System.out.println(Integer.toBinaryString(i));//1100100,转换为2进制
		System.out.println(Integer.toOctalString(i));//144,转换为8进制
		System.out.println(Integer.toHexString(i));//64,转换为16进制。
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值