Java常用类

内部类

什么是内部类

  • 概念:在一个类的内部在定义一个完整的类
  • 特点:
    • 内部类也生成class 文件,文件名为:外部类名$内部类名.class
    • 内部类可直接访问外部类的私有成员,而不破坏封装
    • 可为外部类提供必要的内部功能组件

成员内部类

  • 在类的内部定义,与实例变量、实例方法同级别的类
  • 外部类的一个实例部分,在创建内部类对象时,必须依赖外部类对象
  • 当外部类、内部类存在重名属性时,会优先访问内部类属性;此时若要调用外部属性:外部类.this.属性名
  • 成员内部类不能定义静态属性,但可以包含静态常量

静态内部类

  • 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员(相当于一个外部类)

局部内部类

  • 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法
  • 局部内部类中访问局部变量,局部变量必须为常量(final修饰)
  • 局部内部类不能定义静态属性,但可以包含静态常量

匿名内部类

  • 没有类名的局部内部类(一切特征都与局部内部类相同)

  • 必须继承一个父类或者接口

  • 定义类、实现类、创建对象的语法合并,只能创建一个该类的对象

  • 优点:减少代码量

  • 缺点:可读性差

Object类

  • 在java.lang包下

  • Object类是超类、基类,所有类的直接或间接父类,位于继承树的最顶层

  • 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承

  • Object类中所定义的方法,是所有对象都具备的方法。

  • Object类型可以存储任何对象

    • 作为参数,可接受任何对象
    • 作为返回值,可返回任何对象

getClass()方法

  • public final Class<?> getClass(){}

  • 返回引用中存储的实际对象类型

  • 应用:通常用于判断两个引用中实际存储对象类型是否一致

hashCode()方法

  • public int hashCode(){}
  • 返回该对象的哈希值
  • 哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
  • 一般情况下相同对象返回相同哈希值

toString()方法

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

equals()方法

  • public boolean equals(Object obj){}

  • 默认实现为(this == obj),比较两个对象地址是否相同

  • 可进行覆盖,比较两个对象的内容是否相同

    1. 比较两个引用是否指向同一个对象
    2. 判断obj是否为null
    3. 判断两个引用指向的实际对象类型是否一致
    4. 强制类型装换
    5. 依次比较各个属性值是否相同

finalize()方法

  • 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
  • 垃圾对象:没有有效引用指向此对象时,为垃圾对象
  • 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
  • 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
  • 手动回收机制:使用System.gc();通知JVM执行垃圾回收

包装类

什么是包装类?

  • 基本类型数据有:byte,shot,int,long,float,double,char,boolean

    基本类型数据存储在:内存空间的栈里

    引用类型数据存储在:内存空间的堆里、栈里存放引用地址

  • 每种基本类型都有包装类,包装类的默认值为null

类型转换与装箱、拆箱

  • 装箱:将栈里面的数据转到堆里面

    拆箱:将堆里面的数据转到栈里面

  • 8种包装类提供不同类型间的转换方式:

    • Number父类中提供的6个拆箱方法:byteValue()、doubleValue()、floatValue()、intValue()、longValue()、shortValue()
    • 装箱:
      • 使用构造方法
      • 调用valueOf()方法
    • 拆箱:
      • 调用xxxValue()方法
  • JDK1.5之后,提供了自动装箱和拆箱

    • 直接相互赋值即可
    • 自动装箱调用的Integer.valueOf()
  • parseXXX()静态方法:实现字符串和基本类型之间的转换

    • 基本类型转成字符串
      • 使用+进行字符拼接
      • 使用Integer中的toString()方法
    • 字符串转成基本类型
      • 使用Integer.parseXXX(字符串)方法
    • boolean字符串形式转成基本类型,“true”->true 非“true”皆转为false
  • 注意:需保证类型兼容,否则抛出NumberFormatException异常

整数缓冲区

  • Java预先创建了256个常用的整数包装类型对象(-128~127)
  • 在实际应用当中,对已创建的对象进行复用。
  • 使用的原因:因为开发过程中-128到127使用比较频繁,使用整数缓冲区节省时间和空间

String类

  • 字符串是常亮,创建之后不可改变
    • 给字符串修改赋值时,并没有修改原来数据,而是从新开辟一个新的内存空间,将原来的引用指向新内存空间,原来的数据成为垃圾数据
    • 当新创建一个引用时,会在共享池里查找有没有相同数据,如果有直接指向该地址空间,没有则创建新的地址空间
  • 字符串字面值存储在字符串池中,可以共享
  • String s = “Hello”;产生一个对象,在字符串池中存储
  • String s = new String(“Hello”);产生两个对象,堆和池中各存储一个;此时栈里面引用指向堆中地址(实际在内存中堆指向池中的数据,只用一个内存空间)

常用方法

  • public int length():返回字符串的长度
  • public char charAt(int index):根据下标获取字符
  • public boolean contains(String str):判断当前字符串中是否包含str
  • public char[] toCharArrary():将字符串转换成数组
  • public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1
  • public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引
  • public String trim():去掉字符串前后的空格
  • public String toUpperCase():将小写转成大写、toLowerCase大转小
  • public boolean endWith(String str):判断字符串是否已str结尾、startWith(String str)是否已str开始
  • public String replace(char oldChar,char newChar):以旧字符串替换成新字符串
  • public String[] split(String str):根据str做拆分
  • 补充:
    • equals()比较内容是否相等
    • compare()比较大小,ASCII码大小
    • compareTo()比第一个不同的字符ASCII码相减,如果前面相等比长度

可变字符串

  • StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全
    • toString()输出为字符串
    • append()追加
    • insert()添加,可以指定添加位置
    • replace()替换,可以指定位置将其替换
    • delect()删除,可以指定位置
  • StringBuilder:可变长字符串。JDK5.0提供,运行效率快、线程不安全
    • 方法与StringBuffer相同
  • 和String相比
    • 效率比String高
    • 比String节省内存

BigDecimal

  • 为什么用?

    浮点数double和float存储的是近似值

    很多实际应用中需要精确运算,而double是近似值存储,不符合要求,需要借助BigDecimal

  • 位置:java.math包中

  • 作用:精确计算浮点数

  • 创建方式:BigDecimal bd = new BigDecimal(“1.0”) 传入“”字符串格式,内部有转换

  • 加减乘除使用方法:add()、subtract()、multiply()、

    • divide():除不尽会报异常,此时添加参数保留小数、和四舍五入机制即可

Date

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

  • 时间单位

  • 1秒=1000毫秒

  • Date

    • 大部分都已经过时
    • 常用的还有
      • get、set、equals、toString、toLocaleString(好看的toString)
      • after、before比较时间先后
  • Calender

    • Calender提供了获取或设置各种日历字段的方法
    • 构造方法
      • protected Calender():由于修饰符是protected,所以无法直接创建该对象;
      • 使用getInstance()创建对象
    • 其他方法
  • SimpleDateFormat

    • SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类

    • 使用

      • 格式化(日期->文本);解析(文本->日期)

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//格式化
        
        Date date = new Date();
        String str = sdf.format(date);//日期->文本
        System.out.println(str);
        
        Date date2 = sdf.parse(2020121119:33:33);
        //文本->日期 	格式必须与格式化相同否则会报异常
        System.out.println(date2);
        
    • 常用的时间模式字母

System类

  • System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的
  • 方法:
    • static void arraycopy(…);复制数组
      • native修饰词:本地方法,没有方法体,靠JVM实现的,效率高
    • static long currentTimeMillis();获取当前系统时间,返回的是毫秒值
      • 可用于获取程序执行时间
    • static void gc();建议JVM赶快启动立即回收器回收垃圾
    • static void exit(int status);退出JVM,如果参数是0正常退出JVM,非0表示异常退出JVM

参考课程

https://www.bilibili.com/video/BV1vt4y197nY?p=7

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值