Java教程

第十二话-Java常用类

本文主要是介绍第十二话-Java常用类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Object类

hashCode方法

hashCode方法将内存地址转换为一个整数

package com.xie.changyonglei.demo01;

public class Application {
    public static void main(String[] args) {
        User user1 = new User();
        User user2 = new User();
        //hashCode方法将内存地址转换为一个整数
        System.out.println(user1.hashCode());
        System.out.println(user1.hashCode());
        System.out.println("==============");
        System.out.println(user2.hashCode());
        System.out.println(user2.hashCode());
        //== 比较基本类型时,比较数值本身是否相等
        //== 比较引用类型时,比较变量中存放的地址
        System.out.println(user1 == user2);
        User user3 = user1;
        System.out.println(user1 == user3);
    }
}

getClass方法

返回对应的运行时类

package com.xie.changyonglei.demo02;

public class Application {
    public static void main(String[] args) {
        User user = new User();
        Object object = new User();
        Class c1 = user.getClass();
        Class c2 = object.getClass();
        System.out.println(c1);
        System.out.println(c2);//class com.xie.changyonglei.demo02.User
    }
}

class User{}

equals方法

默认的对象.equals(对象)和==是一样的效果,比较内存地址

String类型使用equals会比较每个字符是否相等,因为重写了Object的equals方法

如果想要比较对象的内容是否相等,需要重写equals方法

快捷键:Alt+Insert,选择equals() and hasCode()

package com.xie.changyonglei.demo03;

import java.util.Objects;

public class Application {
    public static void main(String[] args) {
        User user1 = new User("张三",11);
        User user2 = new User("李四",12);
        User user3 = new User("张三",11);
        System.out.println(user1.equals(user2));
        System.out.println(user1.equals(user3));
    }
}

class User{
    private String name;
    private int age;
    public User(String name,int age){
        this.name = name;
        this.age = age;
    }
	//如果想要比较对象的内容是否相等,需要重写equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age && Objects.equals(name, user.name);
    }
}

clone方法

  1. clone方法必须重写才能使用
  2. 重写clone方法的类必须实现Cloneable接口,否则执行会报错
  3. 克隆后的方法是Object类型,必须强制转换
  4. 克隆后会分配新的内存地址,相当于new了一个实例,但是clone效率高
package com.xie.changyonglei.demo04;

public class Applicatio {
    public static void main(String[] args) throws CloneNotSupportedException {
        Student student = new Student("aaa",1);
        Student student1 = (Student) student.clone();
        System.out.println(student == student1);
        System.out.println(student.equals(student1));
    }
}

class Student implements Cloneable{
    private String name;
    private int age;
    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

finalize方法

垃圾回收机器(Garbage Collection),也叫GC,垃圾回收器主要有一下特点:

  1. 当对象不再被程序所使用的时候,垃圾回收器将会将其回收
  2. 垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源,但是我们可以告诉他可以尽快回收资源(System.gc()和Runtime.getRuntime().gc())
  3. 垃圾回收器在回收某个对象的时候,首先会调用该对象的finalize()方法
  4. GC主要针对堆内存

String类

  1. 字符串比较,使用equals(),可以比较字符串的内容
  2. 字符串对象.length(),返回字符串长度
  3. 字符串截取1:String substring(int beginIndex):从传入的索引位置处,向后截取,一直截取到末尾,得到新的字符串返回
  4. 字符串截取2:String substring(int beginIndex,int endIndex):从beginIndex索引位置开始截取,截取到endIndex索引位置得到新的字符串返回(包含头,不包含尾)
  5. 字符串替换:String replace(CharSequence target , CharSequence replacement):将当前字符串的target(被替换的旧值)内容,使用replacement(替换的新值)进行替换,返回新的字符串
  6. 字符串切割:String[] split(String regex):根据传入的字符串作为规则切割,将切割后的内容存入字符串数组中,并将字符串数组返回
String[] split = s.split(",");

StringBuilder类

  1. String的内容是不可变的-----StringBuilder内容是可变的

  2. StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,作用:提高字符串的操作效率;而且不会开辟很多空间,浪费资源。

  3. 构造方法:

  • public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
  • public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
  1. public StringBuilder reverse():返回相反的字符序列
sb.reverse();
//反转前是:蓝色红色绿色
//反转后是:色绿色红色蓝
  1. public int length():返回长度(字符出现的个数)

  2. StringBuilder和String相互转化

String s = "aaa";
StringBuilder sb = new StringBuilder(s);
String Str = sb.toString();
  1. 添加方法
StringBuilder sb = new StringBuilder();
sb.append("红色");
System.out.println(sb);//红色
sb.append("蓝色");
System.out.println(sb);//红色蓝色
sb.append("绿色");
System.out.println(sb);//红色蓝色绿色
  1. 删除方法
public StringBuffer deleteCharAt(int index):
	//删除指定位置的字符,并返回字符串缓冲区本身
public StringBuffer delete(int start,int end):
	//删除从指定位置开始指定位置结束的内容,并返回字符串缓冲区本身
  1. 替换方法
public StringBuffer replace(int start,int end,String str):
	//从start开始到end用str替换 也是返回字符串缓冲区本身
  1. 截取方法,返回String
public String substring(int start):
	//从指定位置截取到末尾
public String substring(int start,int end):
	//截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

StringBuffer类

StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。

包装类

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

自动装箱:将基本数据类型转换成对应的包装类类型

自动拆箱:将包装类转换成对应的基本数据类型

以Integer为例:

package com.xie.changyonglei.demo05;

public class Application {
    public static void main(String[] args) {
        //最大最小值
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        //实例
        Integer i1 = new Integer(100);
        Integer i2 = new Integer("99");//只能传数字字符串,否则报错
        System.out.println(i1+"--"+i2);//默认 .intValue() 方法转换为int
        //int 转换为 String
        int i = 100;
        String str1 = i + "";
        String str2 = String.valueOf(i);
        String str3 = Integer.toString(i);
        System.out.println(str1 + "--" + str2 + "--" + str3);
        //String 转换为 int
        String str = "66";
        int int1 = Integer.parseInt(str);
        int int2 = new Integer(str).intValue();
        int int3 = Integer.valueOf(str);
        System.out.println(int1 + "--" + int2 + "--" + int3);
        //10进展转换为其他进制
        int i3 = 100;
        System.out.println(Integer.toBinaryString(i3));//二进展
        System.out.println(Integer.toOctalString(i3));//八进展
        System.out.println(Integer.toHexString(i3));//十六进展
        //其他进制转换为10进展
        System.out.println(Integer.parseInt("100",8));//64
        System.out.println(Integer.parseInt("AA",16));//170
        //自动装箱拆箱
        Integer i4 = 100; //=Integer.valueOf(100); 自动装箱
        System.out.println(i4);//=i4.intValue()    自动拆箱
        i4 += 200;//=Integer.valueOf(i4.intValue()+200)
        System.out.println(i4.getClass() + "--" + i4);
    }
}

Math类

基本数学运算的方法

math类常用方法
    1.public static int abs(int a) 返回绝对值
    2.public static double ceil(double a) 返回大于等于参数的最小double值,等于一个整数,向上取整
    3.public static double floor(double a) 返回小于等于参数的最小double值,等于一个整数,向下取整
    4.public static int round(float a) 按照四舍五入返回最接近参数的int
    5.public static max(int a, int b) 返回最大值
    6.public static min(int a, int b) 返回最小值
    7.public static double pow(double a, double b) 返回a的b次幂
    8.public static double random() 返回值为double的正值 [0.0, 1.0)随机数

Random类

package com.xie.changyonglei.demo06;

import java.util.Random;

public class Rantest {
    public static void main(String[] args) {
        Random r1 = new Random(13);//无参每次随机数不同,有参每次随机数相同
        System.out.println(r1.nextDouble());//和Math.random()一样0.0~1.0
        System.out.println(r1.nextInt()); //获取int的最大最小之间的数
        System.out.println(r1.nextLong());//获取long的最大最小之间的数
        System.out.println(r1.nextInt(15 ));//0到15之间的随机数
    }
}

System类

package com.xie.changyonglei.demo06;

import java.util.Date;

public class SysDemo {
    public static void main(String[] args) {
        long time = System.currentTimeMillis();
        System.out.println(time);
        Date date = new Date(time);
        System.out.println(date);
        System.gc();            //显式调用gc
        System.exit(1);   //终止JVM的运行
        System.out.println("------");
    }
}

BigInteger类

超出int范围的整数运算时使用

package com.xie.changyonglei.demo06;

import java.math.BigInteger;

public class BigIntgeterDemo {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MAX_VALUE+1);
        BigInteger bigInteger = new BigInteger("2147483647");
        System.out.println(bigInteger);
        BigInteger bigInteger1 = bigInteger.add(new BigInteger("1"));
        System.out.println(bigInteger1);
        System.out.println(bigInteger1.longValue());
        System.out.println(bigInteger1.intValue());
    }
}

BigDecimal类

float和double计算容易出现精度丢失情况,设计BigDecimal,不可变、任意精度、有符合十进制数

package com.xie.changyonglei.demo06;

import java.math.BigDecimal;

public class BigDecimalDemo {
    public static void main(String[] args) {
        double d1 = 0.01;
        double d2 = 0.09;
        System.out.println(d1 + d2);//0.09999999999999999
        BigDecimal bd1 = new BigDecimal(0.01);
        BigDecimal bd2 = new BigDecimal(0.09);
        System.out.println(bd1.add(bd2));//0.09999999999999999687749...
        BigDecimal bd3 = new BigDecimal("0.01");
        BigDecimal bd4 = new BigDecimal("0.09");
        System.out.println(bd3.add(bd4));//加
        System.out.println(bd3.subtract(bd4));//减
        System.out.println(bd3.multiply(bd4));//乘
        System.out.println(bd4.divide(bd3));//除
    }
}

Date类

表示特定的瞬间,精确到毫秒

package com.xie.changyonglei.demo06;

import java.util.Date;

public class DateDemo {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);
        Date date2 = new Date(12345678999L);
        System.out.println(date2);
    }
}

SimpleDateFormat类

格式化、规范化。日期--文本,文本--日期

package com.xie.changyonglei.demo06;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        System.out.println(date);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(date));
        String str = "2022-01-01 12:12:12";
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf1.parse(str));
    }
}

Calendar类

快速获取年月日时分秒等

package com.xie.changyonglei.demo06;

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.MONTH));
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
        System.out.println(calendar.get(Calendar.HOUR));
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println(calendar.get(Calendar.MINUTE));
        System.out.println(calendar.get(Calendar.SECOND));
    }
}

toString方法

返回该对象的字符串表示:全类路径名称+@+hashCode的十六进制

package com.xie.changyonglei.demo07;

public class test01 {
    public static void main(String[] args) {
        User user = new User("xiexie",18);
        System.out.println(user.toString());//com.xie.changyonglei.demo07.User@1b6d3586
        System.out.println(user);//com.xie.changyonglei.demo07.User@1b6d3586
    }
}

class User{
    private String name;
    private int age;

    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 User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

默认toString方法输出内容意义不大,可以重写

package com.xie.changyonglei.demo07;

public class test01 {
    public static void main(String[] args) {
        User user = new User("xiexie",18);
        System.out.println(user.toString());//User{name='xiexie', age=18}
        System.out.println(user);//User{name='xiexie', age=18}
    }
}

class User{
    private String name;
    private int age;

    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 User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
这篇关于第十二话-Java常用类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!