内部类

内部类

内部类概念

  • 在一个类内部再定义一个完整的类

特点

  • 编译之后可生成独立的字节码文件

  • 内部类可直接访问外部类的私有成员,而不破坏封装

  • 可以为外部类提供必要的内部功能组件

分类

  1. 成员内部类

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

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

       Outer out = new Outer();
       Inner in = out.new Inner();
    • 当外部类、内部类存在重名属性时,会优先访问内部类属性

       //内部类属性和外部类属性相同,用    外部类名字.this.属性
       //如   Outer.this.name
    • 成员内部类不能定义静态成员

  2. 静态内部类(static 只有静态内部类才可以用)

    • 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员

    • 静态内部类:和外部类相同

    • 调用外部类的属性

      • 先创建外部类对象

      • 再调用外部类对象的属性

  3. 局部内部类

    • 定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法

    • 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量生命周期与自身相同,变量必须修饰为final

    • 限制类的使用范围

  4. 匿名内部类

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

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

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

    • 优点:减少代码量

    • 缺点:可读性差

 

Object类

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

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

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

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

    • 作为参数,可以接受任何对象

    • 作为返回值,可以返回任何对象

Object类常用方法

  • getClass()

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

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

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

  • hashCode()方法

    • public int hashCode(){}

    • 返回该对象的哈希码值

    • 哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值

    • 一般情况下相同对象返回相同哈希码

  • toStrig()方法

    • public String toString(){}

    • 返回该对象的字符串表示(表现形式)

    • 可以根据程序需求覆盖该方法 如:展示对象各个属性值

  • equals()方法

    • public boolean equals(Object obj){}

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

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

  • finalize()方法

  • 当对象被判定为垃圾对象时,由JVM自动调用此方法,以标记垃圾对象静茹回收队列

  • 垃圾对象:没有有效引用指向此对象时,为垃圾对象

  • 垃圾回收 :由GC销毁垃圾对象,释放数据存储空间

  • 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象

  • 手动回收机制:使用System.gc();通知JVM执行垃圾回收

包装类

定义

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

  • 包装类对应

    • byte --- Byte

    • short --- Short

    • int --- Integer

    • long --- Long

    • float --- Float

    • double --- Double

    • boolean --- Boolean

    • char --- Character

类型转换与装箱、拆箱

装箱
  • 类型转换: 装箱,基本类型转换成引用类型的过程

     int num = 10;
     Integer integer = new Integer.valueOf(num);
     //JDK1.5后可以自动,实质是一样的
     Integer integer = num;
拆箱
  • 类型转换:拆箱,引用类型转换成基本类

     Integer integer = new Integer(10);
     int num = integer.intValue();
     //自动拆箱
     int num = integer
基本类型和字符串之间转换
  1. 基本类型转换成字符串

      1. 使用+号

         int num = 16;
         String s1 = num + "";
      1. 使用Integer中的toString()方法

         int num = 16;
         String s2 = Integer.toString(num);
  2. 字符类型转换成基本类型

    • 使用Integer.parseIntXXX();

       String str = "150";
       int num = Integer.parseInt(str);
  3. boolean字符串类型转换成基本类型,”true“---->true 非”true“---->false

    • 使用Boolean.parseBoolean();

       String str = "true";
       booolean b1 = Boolean.parseBoolean(str);

整数缓冲区

  • Java预先创建了256个常用的整数包装类型对象

  • 在实际应用当中,对已创建的对象进行复用

    Integer integer1 = new Integer(100);
    Integer integer2 = new Integer(100);
    //integer1 与 integer2不相等
    //因为new的对象地址不一样

    Integer integer3 = 100;
    Integer integer4 = 100;
    //integer3 与 integer4相等
    //在-128~127区间内在堆空间里由一个数组保存了他们的对象

    Integer integer5 = 200;
    Integer integer6 = 200;
    //integer5 与 integer6不相等
    //因为堆空间中没有它们的对象,要重新创建,地址不同

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[] toCharArray():将字符串转换成数组

  • public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1

  • public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引

  • public String trim():去掉字符串前后的空格

  • public String toUpperCase():将小写转换大写

  • public String toLowerCase():将大写转换成小写

  • public boolean startsWith(String str):判断字符串是否以str开头

  • public boolean endsWith(String str):判断字符串是否以str结尾

  • public String replace(char oldChar,char newChar):将旧字符串替换成新字符串

  • public String[] spilt(String str)根据str做拆分

    String str = "java is the best programing ,language";
    String array = str.spilt(" ");
    for(String string : array){
    System.out.println(string);
    }//输出空格分离的数组

    //换成
    String array = str.spilt("[ ,]");
    //输出空客或逗号分离的数组

    //换成
    String array = str.spilt("[ ,]+");
    //输出多个空格或括号分离的数组
  • equals()比较是否相等

    equalsIgnoreCase()忽略大小写的比较

  • compareTo()比较(在字检表里的顺序)

    String s1 = "abc";//a 97
    String s2 = "xyz";//x 120
    System.out.println(s1.compareTo(s2));
    //输出-23
    //先比第一个,如果相等比第二个,有结果停止
    //像"abc" "abcxyz" 则比长度
    String s1 = "abc";
    String s2 = "abcxyz";
    System.out.println(s1.compareTo(s2));
    //输出-3
    //两个一样0

可变字符串

  • StringBUffer:可变长字符串,JDK1.0提供,运行效率满、线程安全

  • StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全

  • String的区别: 比String效率高,比String节省内存

  • 方法

    StringBuffer s = new StringBuffer();
    StringBuilder s = new StringBuilder();
    • append()追加

      s.append(字符串);
    • insert()添加

      s.insert(位置,字符串)
    • replace()替换

      s.replace(开始位置,结束位置,替换字符串)
    • delete()删除

      s.delete(开始位置,结束位置)
    • 清空 用delete()

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)

      • 除法devide(BigDecimal bd,int scal,RoundingMode mode)

      • 参数scal:指定精确到小数点后几位

      • 参数mode

        • 指定小数部分的取舍模式,通常采用四舍五入的模式

        • 取值为BigDecimal.ROUND_HALF_UP

Date类

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

  • 时间单位

    • 1秒 =1000毫秒

    • 1毫秒 = 1000微秒

    • 1微妙 = 1000纳秒

  • //创建对象
    Date date = new Date();
    //方法befoore after
    boolean b = date1.before(date2);
    boolean b = date2.after(date2);
    //比较compareTo()
    date1.compareTo(date2);
    //是否相等equals()
    boolean b = date1.equals(date2);

Calendar类

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

  • 构造方法

    • protected Calendar():由于修饰符是protected,所以无法直接创建该对象

  • 其他方法

    • 使用默认时区和区域获取日历

      static Calendar getInstance()
    • 设置日历的年、月、日、时、分、秒

      void set (int year,int month,int date,int hourofday,int minute,int second)
    • 返回给定日历字段的值。字段比如年、月、日等

      int get(int field)
    • 用给定的Date设置此日历的时间。Date-Calendar

      void setTime(Date date)
    • 返回一个Date表示此日历的时间。Calendar-Date

      Date getTime()
    • 按照日历的规则,给指定字段添加或减少时间量

      void add(int field,int amount)
    • 毫秒为单位返回该日历的时间值

      long getTimeMillies()

SimpleDateFormat

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

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

  • 常用的时间模式字母

    • y------年

    • M------年中的月份

    • d------月中的天数

    • H------一天中的小时(0~23)

    • m------分钟

    • s------秒

    • S------毫秒

  • 创建SimpleDateFormat对象 y 年 M 月

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");
    //创建Date
    Date date = new Date();
    //格式化date 把日期转换为字符串
    String str = stf.format(date);
    System.out.println(str);
    //输出 2022/10/08 20-08-28

    //解析 把字符串转换为日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    Date date2 = sdf.parse("1990/05/01");
    System.out.println(date2);
    //输出 Tue May 01 00:00:00 CDT 1990

System类

  • System系统类,主要用于获取系统的属性数据和其它操作,构造方法私有的

  • 方法:

    • 复制数组

       static void arraycopy(src,srcPos,dest,destPos,leng);
       //src:源数组
       //srcPos:从哪个位置开始复制
       //dest:目标数组
       //destPos:目标数组的位置
       //length:复制的长度
       /
    • 获取当前系统时间,返回的是毫秒值

       static long currentTimeMillis();
    • 建议JVM赶快启动垃圾回收器回收垃圾

       static void gc();
    • 退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm

       static void exit(int status);

       

    •  

posted on 2022-10-09 08:19  SNOWi  阅读(34)  评论(0编辑  收藏  举报

导航