常用类

13、常用类

内部类

  • 定义

    • 定义在类内部,方法内部或局部代码块中的类
  • 特点

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

    • 在类(外部类)的内部,且与外部类的成员是“同一级别”的

    • 特点

      • 成员的内部类可以使用任意的权限修饰符
      • 成员内部类可以直接访问外部的属性和方法
      • 成员内部类的属性和外部类的属性重名时,使用外部类名.访问外部类的属性
      • 成员内部类不能包含静态成员,但是可以包含静态常量(相当与字面值,不需要内部类调用)
  • 静态内部类

    • 使用static修饰的成员内部类,称之为静态内部类

    • 特点:

      • 静态内部类可以使用任意访问修饰符
      • 静态内部类不能直接访问外部类的实例属性和方法(非静态成员),但是可以直接访问静态的属性和方法
      • 静态内部类可以包含静态成员
  • 局部内部类

    • 定义

      • 声明在方法内部的类
      • 局部类型,适用范围只能在当前方法中
      • 但它的实例,可以转为父类型传递出去
    • 特点

      • 不可以使用任何访问权限修饰符
      • 如果局部内部类所在方法是非静态方法,可以直接访问外部类的实例属性和方法
        如果局部内部类所在方法是静态方法,只能访问静态属性和方法
      • 局部内部类可以访问局部变量,但是局部变量必须是final,JDK1.8 final可以省略
        (不可以直接访问局部变量(方法的参数等效于局部变量))
        如果一定需要访问,则需要使用final对局部变量进行修饰
      • 局部内部类也不能声明静态成员,可以使用静态常量
  • 匿名内部类

    • 直接创建已知的类的子类的对象,则该对象的类型就是匿名内部类

    • 特点

      • 创建匿名内部类可以使用接口,抽象类,普通的父类(重写),必须实现接口或抽象类中的抽象方法
      • 匿名内部类不能手动添加构造方法,不能包含静态的成员
      • 匿名内部类中一般不包含特有的方法,不能直接访问,可以通过内部对象方法
      • 匿名内部类生成的class文件类名$编号.class
  • 非静态内部类

    • 非静态内部类依赖于外部类对象存在
      成员内部类必须先实例化外部类对象然后再实例化成员内部类;
    • 在非静态内部类中,不能定义静态成员
  • 注意事项

    • 外部类的权限修饰符只能用 public 或者默认

Object类

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

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

  • 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。
      • 判断两个引用指向的实际对象类型是否一致。
      • 强制类型转换。
      • 依次比较各个属性值是否相同。
  • finalize()方法

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

包装类

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

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

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

    • Number父类中提供的6个共性方法。

      • Integer integer = Integer.valueOf(“110”);
        int j = integer.intValue();
    • parseXXX()静态方法(除了Character)。

      • int i = Integer.parseInt(“100”);
    • valueOf()静态方法。

  • JDK 5.0之后,自动装箱、拆箱。基本数据类型和包装类自动转换。

  • 整数缓冲区

    • Java预先创建了256个常用的整数包装类型对象。
    • 在实际应用当中,对已创建的对象进行复用。

String类

  • 字符串字面值是常量,具有不可变性,创建之后不可改变。

  • 常用创建方式:

    • String str1 = “Hello”;
    • String str2 = new String(“World”);
  • public char charAt(int index)

    • 根据下标获取字符。
  • public boolean contains(String str)

    • 判断当前字符串中是否包含str。
  • int compareTo(String anotherString)

    • 按字典顺序比较两个字符串。
  • String concat(String str)

    • 将指定字符串连接到此字符串的结尾。
  • boolean equals(Object anObject)

    • 将此字符串与指定的对象比较。
  • byte[] getBytes()

    • 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
  • int hashCode()

    • 返回此字符串的哈希码。
  • String intern()

    • 返回字符串对象的规范化表示形式。
  • int indexOf(String str)

    • 返回指定子字符串在此字符串中第一次出现处的索引。
  • int lastIndexOf(int ch)

    • 返回指定字符在此字符串中最后一次出现处的索引。
  • int length()

    • 返回此字符串的长度。
  • String replace(char oldChar, char newChar)

    • 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
  • String replaceAll(String regex, String replacement

    • 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
  • String[] split(String regex)

    • 根据给定正则表达式的匹配拆分此字符串。
  • boolean startsWith(String prefix)

    • 测试此字符串是否以指定的前缀开始。
  • public boolean endsWith(String str)

    • 判断字符串是否以str结尾。
  • String substring(int beginIndex)

    • 返回一个新的字符串,它是此字符串的一个子字符串。
  • String substring(int beginIndex, int endIndex)

    • 返回一个新字符串,它是此字符串的一个子字符串。
  • char[] toCharArray()

    • 将此字符串转换为一个新的字符数组。
  • String trim()

    • 返回字符串的副本,忽略前导空白和尾部空白。
  • public String toUpperCase()

    • 将小写转成大写。

StringBuffer

和 StringBuilder 类

  • 与String类区别

    • StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
  • StringBuffer与StringBuilder区别

    • StringBuffer的方法是线程安全的(不能同步访问)
    • StringBuilder 相较于 StringBuffer 有速度优势
  • public StringBuffer append(String s)

    • 将指定的字符串追加到此字符序列。
  • public StringBuffer reverse()

    • 将此字符序列用其反转形式取代。
  • public delete(int start, int end)

    • 移除此序列的子字符串中的字符。
  • public insert(int offset, int i)

    • 将 int 参数的字符串表示形式插入此序列中。
  • replace(int start, int end, String str)

    • 使用给定 String 中的字符替换此序列的子字符串中的字符。

正则表达式

  • 定义:

    • 正则表达式就是一个验证字符串格式是否满足要求的字符串,使用一个字符 串匹配一组字符串,这个字符串就是正则表达式。
  • Pattern类

    • 正则表达式编译类
  • Matcher类

    • 匹配器
  • 用途:

    • 匹配

    • 拆分

    • 查找

    • 替换

    • 叠词处理

  • 元字符

  • 预定义字符

  • 边界匹配

  • 其他字符

BigDecimal

  • 位置

    • java.math包中
  • 作用

    • 精确计算浮点数
  • 创建方式

    • BigDecimal bd=new BigDecimal(“1.0”)
  • 方法

      • BigDecimal add(BigDecimal bd)
      • BigDecimal subtract(BigDecimal bd)
      • BigDecimal multiply(BigDecimal bd)
      • BigDecimal divide(BigDecimal bd)

      • divide(BigDecimal bd,int scal,RoundingMode mode)

        • 参数scale :指定精确到小数点后几位。
        • 参数mode: 指定小数部分的取舍模式,通常采用四舍五入的模式
          取值为BigDecimal.ROUND_HALF_UP。

Date

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

Calendar

  • Calendar提供了获取或设置各种日历字段的方法。

  • protected Calendar() 构造方法为protected修饰,无法直接创建该对象。

  • 方法

    • Calendar calendar = Calendar.getInstance();
    • System.out.println(calendar.get(Calendar.YEAR));
    •     System.out.println(calendar.get(Calendar.MONTH) + 1);
      
    •     System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
      
    •     System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
      
    •     System.out.println(calendar.get(Calendar.MINUTE));
      
    •     System.out.println(calendar.get(Calendar.SECOND));
      
    • //获取这个月最大的天数
    •     System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
      
    •     //这个最小天数
      
    •     System.out.println(calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
      
    •     //获取月的最大天数
      
    •     System.out.println(calendar.getMaximum(Calendar.DAY_OF_MONTH));
      
    •     //获取月的最小天数
      
    •     System.out.println(calendar.getMinimum(Calendar.DAY_OF_MONTH));
      
    • //相当于减了一天
    •     calendar1.add(Calendar.DAY_OF_MONTH,-1);
      
    • //转换
    •     //date --- calendar
      
    •     Date date = new Date();
      
    •     Calendar instance = Calendar.getInstance();
      
    •     instance.setTime(date);
      
    •     //calendar --- date
      
    •     Date date1 = instance.getTime();
      

SimpleDateFormat

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

  • 进行格式化(日期 -> 文本)

    • Date date = new Date();
    •     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
      
    •     String format = simpleDateFormat.format(date);
      
  • 解析(文本 -> 日期)

    • SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(“yyyy-MM-dd”);
    •     String string = "2020-07-30";
      
    •     Date date1 = simpleDateFormat1.parse(string);
      
  • 常用的时间模式字母

Math

  • Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和 三角函数。

  • 方法

    • //绝对值
    •     System.out.println(Math.abs(10));
      
    •     System.out.println(Math.abs(-10));
      
    •     //返回大于或等于这个数字的最小整数
      
    •     System.out.println(Math.ceil(3.5));
      
    •     //返回小于或等于这个数字的最大整数
      
    •     System.out.println(Math.floor(3.5));
      
    •     System.out.println(Math.pow(2, 10));
      
    •     //返回四舍五入最接近的整数
      
    •     System.out.println(Math.round(3.8));
      
    •     //保留两位小数
      
    •     System.out.println(Math.round(3.1415926*100)/100.0);
      
    •     //返回0~1之间的小数 含头不含尾
      
    •     System.out.println(Math.random());
      
    •     //平方根
      
    •     System.out.println(Math.sqrt(50));
      
    •     //立方根
      
    •     System.out.println(Math.cbrt(50));
      

Random

  • 类的实例用于生成伪随机数流。

  • 此类使用 48 位的种子,使用线性同余公式 (linear congruential form) 对其进行了修改所得。

  • 注意事项:

    • 若long种子确定,则在不同程序中,相同次数产生的随机数是相同的。

System

  • System系统类,主要用于获取系统的属性数据和其他操作。

Runtime

  • 每个 Java 应用程序都有一个Runtime类实例,使应用程序能够与其运行的 环境相连接。可以通过getRuntime方法获取当前运行时。

  • 修改JVM运行内存

    • 修改堆初始内存大小:-Xms300m
    • 修改堆最大内存大小:-Xmx4000m
    • 修改栈空间大小:-Xss2m jdk1.5之前256k jdk1.5之后1m

在这里插入图片描述

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页