常用类##

本文详细介绍了Java编程中的内部类,包括成员内部类、静态内部类、局部内部类和匿名内部类的定义、访问规则及创建对象的方法。此外,还探讨了Object类的核心方法,如hashCode()、toString()和equals()。接着,文章深入讲解了字符串的处理,包括String、StringBuffer和StringBuilder的特性、方法和适用场景。最后,提到了BigDecimal用于精确计算的特性,以及Date和Calendar类在日期和时间处理中的应用,以及SimpleDateFormat的时间格式化功能。
摘要由CSDN通过智能技术生成
内部类
在一个类的内部定义的另一个类。

作用:

1,内部类可以给外部类提供额外的功能

2,可以直接访问外部类私有的成员

分类:成员内部类、静态内部类 、局部内部类和匿名内部类。

成员内部类:

定义的位置:类中,方法以外

访问权限修饰符 class 外部类类名{
    访问权限修饰符 class 内部类类名{
    
    }
}

注意:

成员内部类中不能定义静态成员
当外部类属性或方法与内部类属性或方法重名如何区分
    this.属性名或方法名(实参列表);                    内部类提供的属性或方法
    外部类类名.this.属性名或方法名(实参列表);        外部类提供的属性或方法 

创建成员内部对象  

语法:
    外部类类名.内部类类名 对象名 = 外部类对象.new 内部类类名(实参列表); 

静态内部类

 定义的位置:类中,方法以外

语法:

访问权限修饰符 class 外部类类名{
    访问权限修饰符 static class 内部类类名{
    
    }
}

创建静态内部类对象

语法:
    外部类类名.内部类类名 对象名 = new 外部类类名.内部类类名(实参列表); 

局部内部类

定义的位置:方法中

语法:

class 内部类类名{
    
}

注意:

        1,不能定义静态成员
        2,只能在声明的方法中使用

创建对象

        内部类类名 对象名 = new 内部类类名(实参列表); 

匿名内部类

定义的位置:值或实参

特点

        1,没有类名的类
        2,一个匿名内部类只能创建一个对象
        3,定义与创建对象同时进行

语法:

        父类名或父接口名 对象名 = new 父类名或父接口名(){
                    属性
                    方法
        }; 

Object 类
概念:所有类的父类        所有类的对象都可以转换为Object类的对象
Object提供的属性与方法是所有类的对象都拥有的属性与方法
1,getClass()        获取对象所属的类的类对象
2,hashcode()        获取对象的哈希码值
3,toString()        将对象转换为字符串
注意:打印对象时默认会调用对象的toString方法,所以建议重写,使其便于查看属性值
4,equals()            比较对象是否相同
    注意:
        Object提供的equals方式是比较对象的内存地址是否相同
        如果需要比较对象的属性值是否相同,需要重写其类的equlas方法
        重写步骤:
            1,判断内存地址是否相同
            2.判断是否有可比较性
            3,将传入的对象转换为该类对象
            4,使用属性逐一对比
5,finalize()        对象被回收时有系统调用的方法
包装类
概念:八种基本数据类型对应的引用数据类型,
将基本数据类型封装为对象的方式。Java为每种基本数据类型都提供了对应的包装类
byte            Byte
short            Short
int                Integer
long            Long
float            Float
double            Double
boolean            Boolean
char            Character

自动装箱与拆箱

自动装箱:将基本数据类的变量或值,转换为对应的引用数据类型的对象
如:
    int a = 10;
    Integer i = a;

自动拆箱:将引用数据类型的对象转换为对应的基本数据类型的值
如:
    Integer num = new Integer(10);
    int a = num;
    
String str = "xxx";

字符串相关类

不可变的字符串:String

对字符串处理是会生成新的字符串,老的字符串也不会被系统回收,当大量操作将会导致程序运行缓慢,因为占据内存较多

  • 不可变性:String 对象是不可变的,一旦创建就不能修改其内容。对 String 的任何修改操作都会创建一个新的 String 对象。
  • 线程安全性:String 是线程安全的,可以在多线程环境下共享而无需担心数据竞争。
  • 适用场景:适用于字符串不经常改变的情况,比如作为方法参数传递、字符串连接等。

提供的方法

增:
    +
截取
//System.out.println(name.substring(2));
    subString(startIndex);
    作用:从开始位置截取到字符串结尾
    参数:
        startIndex:开始位置
//System.out.println(name.substring(2,6));
    subString(startIndex,endIndex);
    作用:从开始位置截取到结束位置
    参数:
        startIndex:开始位置
        endIndex:结束位置
    注意:包含开始位置,但不包含结束位置
    

替换
    replace(target, replacement)
    作用:替换
    参数:
        target:要替换的字符串
        replacement:替换后的字符串
切割
    split(regex)
    作用:切割
    参数:
        regex:根据什么字符串切割
        

    length()
    作用:查询字符串长度
    
    charAt(int index)
    作用:查询字符串指定位置的字符
    参数:
        index:执行的位置
    
    indexOf(str);
    作用:查询str在字符串中第一次出现的位置
    如果存在,返回第一次出现位置的下标,如果不存在返回-1
    
    lastIndexOf(String str)
    作用:查询str在字符串中最后一次出现的位置
    如果存在,返回最后一次出现位置的下标,如果不存在返回-1

其他:
    equals(Object anObject)
    作用:比较字符串内容是否相同
    返回值:
        为true表示相同,false不相同
    
    compareTo(String anotherString)
    作用:比较字符串内容是否相同
        0:相同
        非0:不同
    
    equalsIgnoreCase(String anotherString)
    作用:忽略大小写比较字符串内容是否相同
    返回值:
        为true表示相同,false不相同
        
    startsWith(String prefix)
    作用:判断字符串是否以prefix开始
    返回值:
        为true表示是,false不是
    
    endsWith(String suffix)
    作用:判断字符串是否以suffix结束
    返回值:
        为true表示是,false不是
        
    toUpperCase()
    作用:将字符串转换为大写的字符串
    
    toLowerCase()
    作用:将字符串转换为小写的字符串
    
    trim()
    作用:忽略前后空白
    
    contains(s)
    作用:判断字符串中s是否存在
    
    toCharArray() 
    作用:将字符串转换为字符数组
    
    getBytes()
    作用:将字符串转换为字节数组

可变字符串
StringBuffer  : 
  • 可变性:StringBuffer 对象是可变的,可以通过调用其方法修改字符串内容,而无需创建新的对象。
  • 线程安全性:StringBuffer 是线程安全的,对于多线程环境下的字符串操作,推荐使用该类。
  • 性能:由于线程安全机制的存在,相对于 StringBuilder,StringBuffer 的性能会稍差一些。
  • 适用场景:适用于在多线程环境下频繁操作字符串的场景,比如字符串的拼接、修改等

提供的方法:

append(String str)
作用:尾部添加

delete(int start, int end)
作用:删除
参数:
    start:开始位置
    end:结束位置
注意:包含开始位置,不包含结束位置

insert(int offset, String str)
作用:插入
参数:
    offset:插入开始的位置
    str:插入的字符串
    
toString()
作用:将可变字符串转换为不可变字符串

StringBuilder:
  • 可变性:StringBuilder 对象也是可变的,可以通过调用其方法修改字符串内容。
  • 线程安全性:StringBuilder 不是线程安全的,如果在多线程环境下使用,需要自行保证线程安全。
  • 性能:由于无需考虑线程安全,相对于 StringBuffer,StringBuilder 的性能更高。
  • 适用场景:适用于单线程环境下频繁操作字符串的场景,比如字符串的拼接、修改等。

提供的方法:

append(String str)
作用:尾部添加

delete(int start, int end)
作用:删除
参数:
    start:开始位置
    end:结束位置
注意:包含开始位置,不包含结束位置

insert(int offset, String str)
作用:插入
参数:
    offset:插入开始的位置
    str:插入的字符串
    
toString()
作用:将可变字符串转换为不可变字符串

字符串类StringStringBuffer   StringBuilder
不同点线程是否安全线程安全线程安全线程不安全
线程安全原因不可变序列StringBuffer中许多方法带有Synchronized关键字,可以保证线程安全

StringBuilder没有

Synchronized关键字

适用情况少量字符串操作多线程,在字符缓冲区进行大量(插入,追加,更改)操作

单线程,在字符缓冲区进行

大量(插入,追加,更改)操作

运行速度/原因最慢较快最快
相同点都是final类型,不允许被继承,主要是从性能和安全性上考虑,底层使用char[ ]来存储字符串的内容

总结:

  • 如果字符串不需要被修改,或者在多线程环境下使用,推荐使用 String 类。
  • 如果需要频繁修改字符串且在多线程环境下使用,推荐使用 StringBuffer 类。
  • 如果需要频繁修改字符串但在单线程环境下使用,推荐使用 StringBuilder 类。
BigDecimal

精确表示大数的类。它可以处理任意长度和精度的十进制数,适用于涉及到金融、货币计算或精确计算的场景。与基本数据类型的浮点数相比,BigDecimal 提供更高的精度和控制。

BigDecimal num1 = new BigDecimal("10.5");

BigDecimal num2 = new BigDecimal(20);

进行计算操作:通过调用BigDecimal对象的方法,可以进行加减乘除等计算操作,得到新的BigDecimal结果对象:

BigDecimal sum = num1.add(num2); // 加法
BigDecimal difference = num1.subtract(num2); // 减法
BigDecimal product = num1.multiply(num2); // 乘法
BigDecimal quotient = num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP);

// 除法,保留两位小数,四舍五入
 

控制精度和舍入方式:使用setScale()方法设置小数部分的精度,使用setScale()方法的第二个参数指定舍入方式:

BigDecimal result = num1.divide(num2, 4, BigDecimal.ROUND_DOWN);

// 除法,保留四位小数,向下取整

比较大小和相等性判断:使用compareTo()方法进行大小比较,使用equals()方法判断两个BigDecimal对象是否相等:

int comparison = num1.compareTo(num2); // 比较大小
boolean isEqual = num1.equals(num2); // 判断相等性
 

时间类型
 Date:日期
//获取当前系统时间
Date date = new Date();
System.out.println(date);
//距离1970年1月1日00:00:00的时间(格林威治时间)
Date date1 = new Date(1*60*60*1000);
System.out.println(date1);
/**
       * 作用:比较两个时间是否相同
       * 如果为0表示相同
       * 如果为1表示调用该方法的对象时间在传入的对象之后
       * 如果为-1表示调用该方法的对象时间在传入的对象之前
       */
      int i = date1.compareTo(date);
      System.out.println(i);
      /**
       * 作用:判断调用该方法的对象时间在传入的对象之后
       
       */
      boolean b = date.after(date1);
      System.out.println(b);
      /**
       * 作用:判断调用该方法的对象时间在传入的对象之前
       */
      boolean b1 = date.before(date1);
      System.out.println(b1);
      /**
       * 作用:获取指定时间与1970年1月1日00:00:00的时间差,单位毫秒
       */
      long time = date.getTime();
      System.out.println(time);
      /**
       * 作用:设置指定时间与1970年1月1日00:00:00的时间差,单位毫秒
       */
      date.setTime(0);
      System.out.println(date);
      Date d = new Date();
      d.setTime(d.getTime() - 1 * 60 * 60 * 1000);
      System.out.println(d);
Calendar:日历

// 获取当前时间的 Calendar 对象
        Calendar calendar = Calendar.getInstance();

// 打印当前时间的 Calendar 对象信息
        System.out.println(calendar);

// 获取年、月、日、小时、分钟、秒和毫秒
        int y = calendar.get(Calendar.YEAR);
        int m = calendar.get(Calendar.MONTH) + 1;

// Calendar.MONTH 的取值范围是 0-11,需要加1
        int d = calendar.get(Calendar.DAY_OF_MONTH);
        int h = calendar.get(Calendar.HOUR_OF_DAY);
        int f = calendar.get(Calendar.MINUTE);
        int s = calendar.get(Calendar.SECOND);
        int ms = calendar.get(Calendar.MILLISECOND);
        System.out.println(y + "/" + m + "/" + d + "\t" + h + ":" + f + ":" + s + "." + ms);

     

// 设置年份为2024
        calendar.set(Calendar.YEAR, 2024);
        System.out.println(calendar);

     

// 将日期增加3个月
        calendar.add(Calendar.MONTH, 3);
        System.out.println(calendar);

SimpleDateFormat时间格式化

String str = "2021/01/10 13:18:00";
   /**
        * y:年
        * M:月
        * d:日
        * h:12小时制小时
        * H:24小时制小时
        * m:分钟
        * s:秒
        * S:毫秒
        */

// 将指定格式的字符串转换为Date对象.创建日期格式化对象
       SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
       Date date = format.parse(str);
       System.out.println(date);

       Date date1 = new Date();
     

 //将Date转换为指定格式的字符串
       String s = format.format(date1);
       System.out.println(s);

//将当前日期时间格式化为字符串,获取当前日期时间

        Date now = new Date();

        // 格式化日期时间为字符串

        String formattedDate = sdf.format(now);

        System.out.println(formattedDate);

        // 解析字符串为日期时间对象

        String dateString = "2023-07-26 13:42:46";

        Date parsedDate = sdf.parse(dateString);

        System.out.println(parsedDate);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值