Java研学-常用类(二)

一 Object类

1 是java语言中唯一一个没有父类的类,也是java中所有的类的父类

2 直接父类:类结构中紧挨着当前类的上层类

3 间接父类:类结构显示中除了第一层以外的类都是间接父类

4 在java中Object可以用来表示任何的引用数据类型

二 例子-关于==与equals方法的区别

1 == 只能比较栈内存

  ① 当用来判断基本数据类型的时候,比较的是栈内存的值是否一致
  ② 当用来判断引用数据类型时,比较的是栈内存中引用数据类型对象的地址是否一致

2 equals 方法用来比较引用数据类型

  ① 如果是Object类中的equals方法,则底层实现原理与==一致,比较的是引用数据类型对象的地址是否一致
  ② 如果子类重写的equals方法,则比较的是在堆内存中是否引用同一个构造器和构造器传递的值是否一致

public class Test {
	// 调用Object类的equals方法,比较栈内存中的地址值是否一致
	// 想比较对象的内容,需重写子类的equals方法
    public static void main(String[] args) {
        Animal one=new Animal("大黄",12,70);
        Animal two=new Animal("大黄",12,70);
        System.err.println(one.toString());
        // Animal{name='大黄', age=12, high=70}

        System.err.println(two.toString());
        // Animal{name='大黄', age=12, high=70}

        System.err.println(one.equals(two));
        // false
    }
}

3 重写子类equals方法

public class Animal {
    // 名字
    public String name;
    // 年龄
    public int age;
    // 身高
    public int high;

    public Animal(){};
    // 通过有参构造器进行赋值
    public Animal(String name, int age,int high) {
        this.name = name;
        this.age = age;
        this.high = high;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getHigh() {
        return high;
    }

    public void setHigh(int high) {
        this.high = high;
    }

    @Override
    public String toString() {
        // 返回类的属性信息
        return "Animal{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", high=" + high +
                '}';
    }

    // 重写Object的equals方法
    public boolean equals(Object obj){
        // 判断传进来的对象是否是当前类(Animal)的对象
        if(obj instanceof Animal){
            // 分别比较对象所有字段信息是否一致
            return this.name.equals(((Animal) obj).name) && this.age == (((Animal) obj).age);
        }
        // 无继承关系的比较没有意义直接返回false
        return false;
    }
}

4 hashCode方法

// 返回对象的hash码值,生成equals方法 ,必须生成hashCode方法
// 哈希码值:任意一个已实例化对象的地址值
public int hashCode()

  重写equals时,要重写hashCode方法是为了提高equals方法的执行效率;当hashCode方法返回值一致的时候,才有调用equals方法调用的意义

三 随机类

1 Random类-专门生成随机数的工具类

// 生成[0,bound)内的一个随机整数(正数)
public int nextInt(int bound)

2 UUID类

// 根据计算机ip地址,编号 ......随机生成字符串
public static UUID randomUUID()

四 BigDecimal 类

// 用于进行金融类项目中的数据的精确计算
public class Big {
    public static void main(String[] args) {
        BigDecimal bigDecimal1=new BigDecimal("3.1415926");
        BigDecimal bigDecimal2=new BigDecimal("-5.3589297");
        // 加法
        System.err.println(bigDecimal1.add(bigDecimal2));
        // 减法
        System.err.println(bigDecimal1.subtract(bigDecimal2));
        // 乘法
        System.err.println(bigDecimal1.multiply(bigDecimal2));
        // 除法 第一个参数是除数,第二个参数代表保留几位小数,第三个代表的是使用的模式(直接进位)
        System.err.println(bigDecimal1.divide(bigDecimal2,4,BigDecimal.ROUND_HALF_UP));
    }
}

五 日期类

1 java.util.Date类

// 可计算到毫秒
public Date()

// 结果为:Thu Nov 23 18:49:21 GMT+08:00 2023
public static void main(String[] args) {
        Date time=new Date();
        System.err.println(time);
}

2 SimpleDateFormat类 - 可简化日期格式类

日期单位符号(严格区分大小写) 含义
yyyy 4位的年
MM 2位的月
dd 2位的天
DD 当年的第几天
HH 24进制的小时[0-23]
hh 12进制的小时
mm 分钟
ss 秒钟
SS 毫秒(以1000为单位)
aa 上下午
EE 星期几

public class Play {
    public static void main(String[] args) {
        // 设置构造器日期格式
        SimpleDateFormat sysTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS aa EE");
        // 将Date对象传入构造器并且转换为字符串
        String time=sysTime.format(new Date());
        System.err.println(time);
        // 2023-11-23 18:56:03:651 下午 星期四
    }
}

3 Calendar类

  ① 实现对毫秒的操作,将指定的毫秒转换为需要的时间
  ② 对于时间只能进行 + -的运算
  ③ Calendar类显示的毫秒数从 1970 年 1.1 00:00:00 (格林尼治时间) 作为开始

// 获Calendar类取对象,根据时区获取当前系统时间
public static Calendar getInstance()

// 例子-get方法可通过指定字段获取值
public class Play{
    public static void main(String[] args) {
        Calendar cd=Calendar.getInstance();
        // DAY_OF_MONTH是当月天数,MONTH为取月份数组的下标实际需要+1,星期需要-1(国外以周日开始新一周)
        System.err.println("今天是"+cd.get(Calendar.YEAR)+"年"+
                (cd.get(Calendar.MONTH)+1)+"月"+
                cd.get(Calendar.DAY_OF_MONTH)+"号"+
                "星期"+(cd.get(Calendar.DAY_OF_WEEK)-1));
        // 24小时制
        System.err.println("现在是"+cd.get(Calendar.HOUR_OF_DAY)+"时"+
                cd.get(Calendar.MINUTE)+"分"+
                cd.get(Calendar.SECOND)+"秒");
        System.err.println("同时也是今年的第"+cd.get(Calendar.DAY_OF_YEAR)+"天");
        
        // Calendar转换Date
        Date sysTime=cd.getTime();
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS aa EE");
        System.err.println(sdf.format(sysTime));
        // 获取当前毫秒数
        System.err.println(cd.getTimeInMillis());
        
        // 设置Calendar时间,记录跨年
        cd.set(2023,11,31,23,59,59);
        System.err.println(cd.getTime());
        // Sun Dec 31 23:59:59 GMT+08:00 2023
        cd.add(Calendar.SECOND,1);
        System.err.println(cd.getTime());
        // Mon Jan 01 00:00:00 GMT+08:00 2024
    }
}
常用日期单位字段 含义
Calendar.YEAR
Calendar.MONTH 月[0,11]显示的时候需要+1
Calendar.DAY_OF_MONTH 当月第几天
Calendar.DAY_OF_YEAR 当年第几天
Calendar.HOUR_OF_DAY 24小时
Calendar.MINUTE
Calendar.SECOND

如果操作指定的日期单位,推荐使用Calendar

如果按照指定的格式显示日期,推荐使用Date类

六 String类

1 赋值方式

  ① 直接赋值 String 对象名=“”,只在栈内存,可以直接使用== 进行值比较

  ② 构造器赋值:String 对象名=new String(“”);在栈内存中创建对象,并指向堆内存地址,需要使用equals进行值是否一致的比较

  ③ 在实际开发中,应用数据类型推荐使用equals进行比较

2 定义格式 : public final class String{}

3 底层实现:相当于char[],这个就是String不能转换char和Character的原因,且String类不能被继承

4 常用API

// 转换方法(6个)
// 将指定字符串转换为字节数组,中文在数组中表示为两个相邻的负数
public byte[] getBytes()

// 将指定的字节数组,从指定的位置开始,转换指定的长度,String 结果显示,注意,如果没有特殊要求,从0开始转换数组长度,数组长度缺失会返回?
public String (byte[] bbuf,int beginIndex,int length)

// 将指定字符串转换为字符数组
public char[] toCharArray()

// 将指定的字符数组,从指定的位置开始,转换指定的长度,以String显示
public String (char[] cbuf,int beginIndex,int length)

// 将String值中英文字母转换为大写(只对String值中的英文字母有用)
public String toUpperCase()

// 将String值中英文字母转换为小写
public String toLowerCase()

// 修改(2个)
// 使用指定字符替换String中原有的字符(如果没有原样返回)
public String replace (char old,char newChar)

// 去掉String中的首尾空格
public String trim()

// 查(8个)
// 获取指定位置上的字符(输入元素于字符串中的下标)
public char charAt(int index)

// 获取第一次出现的位置 ,如果不存在 返回-1,用户可以传递char类型的数据,也可以传递对应的ASCII值
public int indexOf(int ch)

// 获取指定字符从指定位置向后查询第一出现的位置不存在返回-1
public int indexOf(int ch,int beginIndex)

// 获取指定字符最后一次出现的位置,不存在返回-1
public int lastIndexOf(int ch)

// 获取指定字符从指定位置开始向前第一次出现的位置,不存在返回-1
public int lastIndexOf(int ch,int beginIndex)

// 获取字符串长度
public int length()

// 从指定位置开始截取到String的末尾
public String substring(int beginIndex)

// 从指定位置开始,到指定位置结束(不包含结束位置)(需要+1个)进行String截取
public String substring(int beginIndex,int endIndex)

// 判断(7个)
// 判断两个String在字典表中的排序,严格区分大小写
// 规则:结果=调用对象-参数对象
// 1长度相等,值也相等,则返回0
// 值不相等,返回ASCII差值
// 2长度不等,连续的值一致,返回长度差
// 连续的值不一致,返回第一次出现不同字符的ASCII差值
public int compareTo(String other)

// 判断两个String在字典表中的排序,忽略大小写
public int compareToIgnoreCase(String other)

// 比较两个String的值是否一致,严格区分大小写
public boolean equals (Object obj)

// 比较两个String的值是否一致,忽略大小写
public boolean equalsIgnoreCase(Object obj)

// 判断指定到字符序列(子字符串)在String中是否存在
public boolean contains(CharSequence str)

// 判断String是否以指定的字符序列开头
public boolean startsWith(String perfix)

// 判断String是否以指定的字符序列结尾
public boolean endsWith(String perfix)

你可能感兴趣的:(#,Java研学,java,开发语言)