JAVA教程 从入门到精通 Day15

第九章 常用类

9.1 String

String: 不可变的字符序列

StringBuffer: 可变的字符序列 线程安全 效率低

StringBuilder: 可变的字符序列 线程不安全 效率高 【一般用他】

执行效率:
StringBuilder > StringBuffer > String

String : String类表示字符串 Java程序中的所有字符串文字(例如"abc")都实现为此类的实例

字符串对象内存问题:

String str = “abc”;

  • 创建了1个对象 new的对象在堆内存中 "abc"字符串常量存在于字符串常量池

String str2 = new String(“haha”);str2指向堆内存中newString的地址

  • 创建了2个对象 new的对象在堆内存中 "haha"字符串常量存在于字符串常量池

String str3 = new String(“abc”);

  • 创建了1个对象 new的对象在堆内存中 "abc"前面已构建 常量池中已有

String底层存储字符数据的结构:

  • jdk8 :private final char[] value;
  • jdk11 : private final byte[ ] value;

9.2 StringBuilder和String相互转换

1、StringBuilder转换为String

  • public String toString():通过toString就可以把StringBuilder转换为String

2、String转换为StringBuilder

  • public StringBuilder(String s):通过构造方法就可以实现String转换为StringBuilder
public class Test10{
    public static void main(String[] args) {
			Stringbuilder转换为String
        /* 
          StringBuilder sc=new StringBuilder();
          sc.append("hello");
          String s=sc.toString();
          System.out.println(s);
         */
        	String转换为StringBuilder
        String s="wang";
        StringBuilder sc=new StringBuilder(s);
        System.out.println(sc);
    }
}

9.3 包装类

 基本数据类型          -->    包装类
    byte                     Byte
    short                    Short
    int                      Integer
    long                     Long
    float                    Float
    double                   Double
    char                     Character
    boolean                  Boolean

自动拆装箱:

1.自动装箱 : 基本 --> 引用

2.自动拆箱 : 引用 --> 基本

基本类型与包装类对象比较问题 :

1.两个int类型比较 值相等就相等

2.两个new Integer比较 肯定不相等 new就是新的地址

3.int与Integer|new Integer比较 只要值相等就相等 因为会先自动拆箱 再比值

4.两个Integer比较 如果值在[-128,127]之间返回缓冲区对象相等 否则超过这个范围就会新new对象 返回new

Integer不相等

9.4 Math

Math 数学相关类 静态工厂

  • static double abs(double a) 返回 double值的绝对值

  • static double ceil(double a) 返回大于或等于参数且等于数学整数的最小值(最接近负无穷大)

  • static double floor(double a) 返回小于或等于参数且等于数学整数的最大值(最接近正无穷大)

  • static int max(int a, int b) 返回两个 int值中较大的 int

  • static int min(int a, int b) 返回两个 int值中较小的 int

  • static double pow(double a, double b) 返回第一个参数的值,该值是第二个参数的幂

  • static double random() 返回带有正号的 double值 大于或等于 0.0且小于 1.0 。

    • 公式: Math.random()–>[0.0,1.0)

      • 随机整数[min,max) (int)(Math.random()*(max-min)+min)
      • 随机整数[min,max] (int)(Math.random()*(max-min+1)+min)

9.5 枚举

枚举 : 确定一种事物的所有可能|实例

  • 枚举是类,特殊的枚举类型,具有枚举类型特殊的约束
  • 定义枚举使用enum
  • 枚举类中的字段默认为当前枚举类型的实例,修饰符默认为public static final
  • 枚举类中可以根据需求定义成员,构造器…
  • 枚举类中默认构造器私有化
  • 定义的枚举类型默认隐式的继承自 java.lang.Enum->这是所有Java语言枚举类型的公共基类。
public class Class001_Enum {
    public static void main(String[] args) {
        //使用枚举类型的实例
        WeekDay day1 = WeekDay.DAY1;
        System.out.println(day1.getName());

        //name()
        System.out.println(day1.name()); //枚举类字段名
        //ordinal() 获取枚举实例在枚举类中字段列表的序号,从开始
        System.out.println(day1.ordinal());
        //values() 获取当前枚举类型的所有实例
        WeekDay[] arr = day1.values();
        System.out.println(Arrays.toString(arr));

        //switch语句 在jdk1.5新增支持对枚举类型的数据的判断
        switch (day1){
            case DAY1:
                System.out.println("周一");
                break;
            case DAY2:
                System.out.println("周二");
                break;
            case DAY7:
                System.out.println("周天");
                break;
        }

    }
}

//枚举 : 周中的每一个天
enum WeekDay{
    /*枚举的字段,默认为当前WeekDay类型的实例*/
    DAY1("星期一"),DAY2("星期二"),DAY3,DAY7;
    //成员变量
    private String name;

    private WeekDay() {
    }

    WeekDay(String name) {
        this.name = name;
    }

    //成员方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

9.6 克隆

clone( ) 克隆 | 拷贝 来自Object类clone( )方法

Cloneable接口 : 对象的类型要求实现Cloneable 才具有克隆的能力

java.lang.CloneNotSupportedException : 抛出此异常表示已调用类Object中的clone方法来克隆对象 但

该对象的类未实现Cloneable接口

方法重写的细节: 子类中的重写方法 父类中被重写的方法

  • == 方法签名完全相等
  • <= 返回值类型 : 基本数据类型要求完全相等 引用数据类型:重写方法的返回值类型<=被重写方法的返回值类型
  • = 权限修饰符 : 重写方法的权限修饰符>=被重写方法的权限修饰符**

浅拷贝|浅克隆 : 当拷贝对象的时候,对象的属性如果为引用数据类型,属性所指向的对象不拷贝

深拷贝|深克隆 : 当拷贝对象的时候,对象的属性如果为引用数据类型,属性所指向的对象也拷贝一份

建议:

当对象的属性是通过复杂的运算或者算法计算出来,在想要等到相同内容的对象时候可以使用clone克隆,提高

效率

9.7 时间日期类型

java8之前 Date 类型 java.util 包下的Date

  • Date( )

分配 Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒

  • Date(long date)

分配 Date对象并初始化它以表示自标准基准时间(称为“纪元”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT

  • long getTime()

返回自此 Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数

  • boolean after(Date when)

测试此日期是否在指定日期之后

  • boolean before(Date when)

测试此日期是否在指定日期之前

  • static Date from(Instant instant)

从 Instant对象获得 Date的实例。

  • Instant toInstant()

将此 Date对象转换为 Instant

格式化

DateFormat类应该用于格式化和解析日期字符串。

SimpleDateFormat是一个用于以区域设置敏感的方式格式化和解析日期的具体类。 它允许格式化(日期→文

本),解析(文本→日期)和规范化。

java8新增时间日期API :

Date,SimpleDateFormat 线程不安全的

JDK8当中提供的LocalTimeLocalDateLocalDateTime等类型,线程安全,使用简单灵活

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值