Java基础05(常用类)

Java基础05(常用类)

内部类

成员内部类

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

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

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

  4. 成员内部类不能定义静态成员(静态常量除外)

静态内部类

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

  2. 相当于外部类,可以直接实例化对象

    • Outer.Inner inner=new Outer.Inner();
  3. 必须将外部类实例化才能使用外部类的属性

  4. 普通类不能用static修饰

局部内部类

  1. 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法。
  2. 不能加任何访问修饰符(public等)
  3. 可以直接访问外部类变量
  4. 局部内部类访问外部类当前方法的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final

匿名内部类

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

  2. 必须继承一个父类或者实现一个接口。

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

  4. 优点:减少代码量;缺点:可读性较差

        Inner inner1=new Inner() {
            @Override
            public void showUsb() {
                System.out.println("Inner has been used");
            }
        };
    
    

Object类

  1. 超类、基类,所有类的直接或间接父类,位于继承树的最顶层。
  2. 任何类,如果没有书写extends显示继承某个类,都默认直接继承object类,否则为间接继承
  3. Object类中所定义的方法,时所有对象都具备的方法
  4. Object类型可以储存任何对象
    • 作为参数,可接受任何对象
    • 作为返回值,可返回任何对象

getClass()

  1. public final Class<>getClasss();
  2. 返回引用中存储的实际对象类型
  3. 应用:通常用于判断两个引用中实际存储对象类型是否一致

hashCode()

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

toString()

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

equals()

  1. public boolean equals(Object obj){}
  2. 默认实现为(this==obj),比较两个对象地址是否相同
  3. 可进行覆盖,比较两个对象的内容是否相同
    • 比较两个引用是否指向同一个对象
    • 判断obj是否为null
    • 判断两个引用指向的实际对象类型是否一致
    • 强制类型转换
    • 一次比较各个属性值是否相同

finalize()

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

包装类

  • 基本数据类型所对应的引用数据类型
  • Object课统一所有数据,包装类的默认值是null

  • 类型转换与装箱、拆箱,JDK1.5之后自动实现装箱拆箱

    1. 装箱、拆箱
    int num=111;
    Integer integer=num;//Integer integer=new Integer(num)
    									//Integer.valueOf(num)
    int num2=integer;// int num2=integer.intValue;
    
    1. 8种包装类提供不同类型的转化方式:

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

      • parseXXX()静态方法

      • valueOf()静态方法

            int num=1245;
            String str=""+num;
            String str1=Integer.toString(num);
            ============================
            String str01="2344";
            int num=Integer.parseInt(str01);
            String str02="true";
            boolean 				bool=Boolean.parseBoolean(str02);//str02=true,bool=true;else bool=false
                
        

        (注意:需保证类型兼容,否则抛出NumberFirmatException异常)

  • 整数缓冲区

    1. Java预先创建了256个常用的整数包装类型对象
        Integer integer1=new Integer(100);
        Integer integer2=new Integer(100);
    
        System.out.println(integer1==integer2);//栈中地址不相等
    
        Integer integer3=100;
        Integer integer4=100;//实际上是Integer.valueOf(100)
    
        System.out.println(integer3==integer4);//栈中地址指向堆中的临时缓冲区(实际上是数组),范围在-128到127,因为用的多
    
        Integer integer5=200;
        Integer integer6=200;
    
        System.out.println(integer5==integer6);//超过缓冲区的数字会自动new一个地址
    
    1. 在实际应用当中,对已创建的对象进行复用

String类

概述

​ 1.字符串是常量,创建之后不可改变

​ 2.字符串字面值存储在字符串池中,可以共享

方法

  1. public int length();返回字符串的长度
  2. public char charAt(int index);返回某个位置的字符
  3. public boolean contains(String 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();将小写转换成大写
  9. public boolean endWith(String str);判断字符串是否以str结尾
  10. public String replace (char oldChar,char newChar);将旧字符串替换成新字符串。
  11. public String[] split(String str):根据str做拆分
  12. public int compare(String str):比较首字母编码差值/字符串长度差值

心得: String方法不对原来的对象改变,而是生成新的空间

可变字符串

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

    1. append();追加

    2. insert();添加

    3. replace();替换

    4. delete();删除

          sb.append("hello,world");
          sb.insert(0,"hi");
          sb.replace(0,5,"你好");
          sb.delete(0,2);
      
      
      	StringBuffer sb=new StringBuffer();
              sb.append("");
              String str="";
              for (int i = 0; i < 99999; i++) {
                  sb.append(i);//用时很短
              }
              for (int i = 0; i < 99999; i++) {
                  str+=i;//用时很长
              }
      
  • StringBUilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全

BigDecimal类

  • 位置:java.math包中

  • 作用:精确计算浮点数

  • 创建方式:BigDecimal bd=new BigDEcimal("1.0")字符串最准确

            BigDecimal bd1=new BigDecimal("1.0");
            BigDecimal bd2=new BigDecimal("0.9");
            BigDecimal bd3=bd1.subtract(bd2);// add|multiply|divide
    

Date类(特定时间)

  1. public long getTime();ms为单位,1970年1月1日
  2. public boolean after();//before
  3. compareTo();
  4. equals();

Calendar类(日历)

SimpleDateFormat类(格式化时间)

System类(系统类)

posted @ 2025-02-25 23:25  helloword改变世界  阅读(28)  评论(0)    收藏  举报