Day09

内部类

  • 概念:在一个类的内部再定义一个完整的类 commonClass.interClass

  • 特点:

    • 编译之后可生成独立的字节码文件。
    • 内部类可以直接访问外部类的私有成员,而不破坏封装。
    • 可以为外部类提供必要的内部功能组件。
  • 分类:

    1. 成员内部类

      • 在类的内部定义,与实例变量、实例方法同级别的类。

      • 外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象。

        • Outer outer = new Outer();
          Outer.Inner inner = outer.new Inner();
          
          // 打印外部类的属性时,若内部类属性和外部类属性名字相同, 用Outer.this.xxx去访问
          
      • 当外部类、内部类存在重名属性时,会优先访问内部类属性。

      • 成员内部类不能定义静态成员,可以包含静态常量。

    2. 静态内部类

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

      • 只能直接访问外部类的静态成员。(实例成员需实例化外部类对象)

        • Outer.Inner inner = new Outer.Inner();
          inner.show();
          
    3. 局部内部类

      • 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法。
      • (局部内部类调用的局部变量,jdk1.8后将局部变量自动转为局部常量,以为局部变量会随着方法的结束而释放)
      • 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final。
      • 局部内部类不能定义静态成员,可以包含静态常量。
      • 限制类的使用范围。
    4. 匿名内部类

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

Object类

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

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

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

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

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

    1. getClass()方法: commonClass.test

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

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

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

      • public boolean equals(Object obj){}
      • 默认实现为(this == obj),比较两个对象地址是否相同。
      • 可以进行覆盖,比较两个对象的内容是否相同。
      • 默认比较地址,重写比较步骤。重写步骤:(注意:对普通类的equals重写,对hashSet、hashMap的equals重写的区别)
        1. 比较两个引用是否指向同一个对象。
        2. 判断obj是否为null
        3. 判断两个引用指向的实际对象类型是否一致
        4. 强制类型转换
        5. 依次比较各个属性值是否相同
    5. finalize()方法: commonClass.test2

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

包装类

  • 基本数据类型所对应的引用类型 demo01

  • Object可以统一所有数据,包装类的默认值是null。

  • 在这里插入图片描述

  • 类型转换和装箱、拆箱

  • 8种包装类提供不同类型间的装换方法

    • Number父类(抽象类)中提供的6个共性方法,除了char、boolean基本类型,其它六大基本类型都继承了Number。
    • parseXXX()静态方法 (字符串转基本类型) toString()(基本类型转字符串) 注意:boolean和字符串间的转换
    • valueOf()方法 (基本类型转引用类型) xxxValue() (引用类型转基本类型)
  • 注意:需保证类型兼容,否则抛出NumberFormatException;

整数缓冲区

  • java预先创建了256个常用的整数包装类型对象 demo02 面试题
  • 在实际应用中,对已创建的对象进行复用。
    • 在这里插入图片描述

String类

  • 字符串是常量,创建之后不可改变。 demo01

  • 字符串字面值存储在字符串池中,可以共享。 (栈(基本类型)、堆(对象)、方法区(包含字符串池(常量池)))

  • String s = “Hello”; 产生一个对象,字符串池中存储。

  • String s = new String(“Hello”); //产生两个对象,堆、池各存储一个。

    • 在这里插入图片描述
  • 常用方法: demo03

    1. public int length() 返回字符串长度
    2. public char charAt(int index) 根据下标获取字符
    3. public boolean contains(String str) 判断当前字符串中是否包含str
    4. public char[] toCharArray() 将字符串转换成数组
    5. public int indexOf(String str) 查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。
    6. public int lastIndexOf(String str) 查找字符串在当前字符串中最后一次出现的下表索引
    7. public String trim() 去掉字符串前后的空格
    8. public String toUpperCase() 将小写转成大写(toLowerCase() 大写转小写 )
    9. public boolean endWith(String str) 判断字符串是否以str结尾 (startWith();)
    10. public String replace(char oldChar,char newChar) 将旧字符串替换成新字符串
    11. public String[] split(String str) 根据str做拆分
  • 案例演示:

    • 需求: demo02 (字符串.substring(开始,结束) 访问字符串从开始到结束的元素 )
      • 已知String str = “this is a text”
      • 将str中的单词单独获取出来
      • 将str中的text替换为practice
      • 在text前面插入一个easy
      • 将每个单词的首字母改为大写

可变字符串

StringBuffer

  • 可变长字符串,JDK1.0提供,运行效率慢、线程安全。
  • 方法: demo03
    • append(); 追加
    • insert(); 添加
    • replace(); 指定位置替换
    • delete(); 指定位置删除 ( reverse(); 反转 清空:stringBuffer.delete(0,stringBuffer.length());)

StringBuilder

  • 可变长字符串,JDK5.0提供,运行效率快、线程不安全。 demo04 验证
  • 方法和StringBuffer一样

BigDecimal

  • 在这里插入图片描述

  • 位置:java.math包中 demo01

  • 作用:精确计算浮点数

  • 创建方式:BigDecimal bd = new BigDecimal(“1.0”);

  • 方法:

    • BigDecimal add(BigDecimal bd) 加
    • BigDecimal subtract(BigDecimal bd) 减
    • BigDecimal multiply(BigDecimal bd) 乘
    • BigDecimal divide(BigDecimal bd) 除 注意除不尽:第二参数为保留小数个数,第三参数为定义四舍五入方法。
  • 在这里插入图片描述

  • 在这里插入图片描述

Date

  • Date表示特定的瞬间,精确到毫秒。Date类中大部分方法都已经被Calendar类中的方法所取代。demo01
  • 时间单位: 1秒 = 1000毫秒 = 1000微秒 = 1000纳秒

Calendar

  • Calendar提供了获取或设置各种日历字段的方法 1970.1.1
  • 构造方法:protected Calendar() :由于修饰符是protected,所有无法自己创建该对象。
  • 其他方法: demo02
    • 在这里插入图片描述

SimpleDateFormat

  • SimpleDateFormat是一个以 与语言环境有关的方式来格式化和解析日期的具体类 demo03(按照具体的格式要求将日期转换为字符串形式)
  • 进行格式化—format();(日期—>文本)、解析—parse();(文本—>日期) 注意:解析内容的格式需和实例化对象时的格式相同
  • 常用的时间模式字母:
    • y ———— 年 ———— 2019
    • M ———— 月 ———— 08
    • d ———— 日 ———— 10
    • H ———— 时 ———— 10
    • m ———— 分 ———— 10
    • s ———— 秒 ———— 10
    • S ———— 毫秒 ———— 10

System类

  • System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的。不需要new
  • 方法:
    • static void arraycopy() 复制数组
    • static long currentTimeMillis() 获取当前系统时间,返回的是毫秒值
    • static void gc() 建议JVM赶快启动垃圾回收器回收垃圾 需要对回收对象的 finalize() 方法进行重写
    • static void exit(int status) 退出JVM,如果参数是0表示正常退出jvm,非0表示异常退出

总结

  • 内部类
    • 在一个类的内部再定义一个完整的类
    • 成员内部类、静态内部类、局部内部类、匿名内部类
  • Object类
    • 所有类的直接或间接父类,可以存储任何对象。
  • 包装类
    • 基本数据类型所对应的引用数据类型,可以使Object统一所有数据。
  • String类
    • 字符串是常量,创建之后不可改变,字面值保存在字符串池中,可以共享。
  • BigDecimal
    • 可精确计算浮点数
  • Date
    • 特定时间
  • Calendar
    • 日历
  • SimpleDateFormat
    • 格式化时间
  • System
    • 系统类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值