Java常用类

局部内部类

局部内部类不能添加任何修饰符。

局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final(jdk1.8之后默认为final)

静态内部类

在静态内部类当中,不能访问非静态变量。

匿名内部类

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

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

优点:减少代码量

缺点:可读性较差

Object类

又叫超类、基类,所有类的直接或间接父类,位于继承树的最顶端

任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类

Object类中所定义的方法,是所有对象都具备的方法

Object类型可以存储任何对象

  • 作为参数,可以接受任何对象

  • 作为返回值,可返回任何对象

getclass():

返回引用中存储的实际对象类型。

通常用于判断两个引用中 实际的存储对象类型是否一致。

hashCode():

返回该对象的哈希码值。

哈希值根据的地址或者字符串或者数字使用hash算法计算出来的int类型的数值。

一般情况下相同对象返回相同哈希码。

toString():

返回该对象的字符串表示。

可以根据程序需求覆盖该方法。

equals():

默认为比较两个对象地址是否相同。

 equals()的重写覆盖:

 

 

 具体视频演示:12.14 equals方法_哔哩哔哩_bilibili

 

clone():

作用:克隆类。

克隆类要实现Cloneable接口,但他是一个标记接口,接口中没有任何抽象方法;

首先借助于Object.clone()方法,进行重写,但是需要提高他的访问权限(必须,protected-->public);

返回结果是克隆后的一个新的对象。

public class CloneDemo1 {
   public static void main(String[] args) throws CloneNotSupportedException {
       Test2 test2 = new Test2("小明",18);
       Test2 test1 = (Test2) test2.clone();

       System.out.println(test2==test1);
       System.out.println(test1.equals(test2));
  }
}
class Test2 implements Cloneable{
   String name;
   int age;

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

   public Test2(String name, int age) {
       this.name = name;
       this.age = age;
  }

   @Override
   public String toString() {
       return "Test2{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
  }

   @Override
   public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;

       Test2 test2 = (Test2) o;

       if (age != test2.age) return false;
       return name != null ? name.equals(test2.name) : test2.name == null;
  }

   @Override
   public int hashCode() {
       int result = name != null ? name.hashCode() : 0;
       result = 31 * result + age;
       return result;
  }
}

深度克隆

public class CloneDeepDemo1 {
   public static void main(String[] args) throws CloneNotSupportedException {
       CarDeep cd1 = new CarDeep(11,new EngineDeep(221,"vv8"),new TireDeep(331,"路虎"));
       CarDeep cd2 = (CarDeep) cd1.clone();

       System.out.println(cd1);
       System.out.println(cd2);

       
       //测试
       cd1.engine.ename = "cc8";
       System.out.println(cd1.engine.ename+"----"+cd2.engine.ename);

       cd1.tire.ename = "奔驰";
       System.out.println(cd1.tire.ename+"---"+cd2.tire.ename);
  }
}
class CarDeep implements Cloneable{
   public int cid;
   public EngineDeep engine;
   public TireDeep tire;

   public CarDeep(int cid, EngineDeep engine, TireDeep tire) {
       this.cid = cid;
       this.engine = engine;
       this.tire = tire;
  }
   @Override
   public Object clone() throws CloneNotSupportedException {
       //深度克隆关键代码
       CarDeep cd = (CarDeep) super.clone();

       cd.engine = (EngineDeep) this.engine.clone();

       cd.tire = (TireDeep) this.tire.clone();

       return cd;
  }

   @Override
   public String toString() {
       return "CarDeep{" +
               "cid=" + cid +
               ", engine=" + engine +
               ", tire=" + tire +
               '}';
  }
}
class EngineDeep implements Cloneable{
   public int eid;
   public String ename;

   public EngineDeep(int eid, String ename) {
       this.eid = eid;
       this.ename = ename;
  }

   @Override
   public Object clone() throws CloneNotSupportedException {
       return super.clone();
  }
}
class TireDeep implements Cloneable{
   public int tid;
   public String ename;

   public TireDeep(int tid, String ename) {
       this.tid = tid;
       this.ename = ename;
  }

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

包装类

 

 

 

 

包装类默认为null。

装箱

将基本类型转换成引用类型(栈--->堆)

拆箱

将引用类型转换成基本类型(堆--->栈)

Integer缓冲区:在integer自动装箱时,若数据超过127时,则会在堆里开辟新的地址(new integer(i))

String类:

常用方法:

  • lengh():返回字符串长度;

  • charAt(int index):根据下标获取字符;

  • contains(String str):判断是否包含某个字符串。

  • toCharArray():将字符串转换成数组

  • indexOf(String str):查找str首次出现的下标。存在,则返回该下标;不存在,则返回-1。

  • lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。

  • trim():去掉字符串前后的空格。

  • toUpperCase():将小写转为大写。

  • toLowerCase():将大写转为小写。

  • endWith(String str):判断字符串是否以str结尾。

  • startWith(String str):判断字符串是否以str开头。

  • replace(char oldchar,char newchar):将旧字符串替换成新字符串。

  • split(String str):根据str做拆分。

注意:

String str="a" +1+2;//输出a+1+2

String str='a'+1+2;//输出4

String str=1+2+"a";//输出3+a

StringBuffer和StringBuilder的使用

StringBuffer:运行效率慢,线程安全

 

 

 

StringBuilder:运行效率快,线程不安全

 

 

 

BigDecimal类:

一般使用代码进行加减乘除时,精度并不高,如:

public class Test{
   public static void main(String[] args){
       double d1=1.0;
       double d2=0.9;
       System.out.println(d1-d2);
  }
}
//输出结果为0.999999998;
//由于double在存储数据之时,会丢失精度,比如:在存储1.0时,将会存储0.9999998。

 

所以在进行精确计算值之时,需要用到BigDecimal类

 

 

 

在进行除法时,需要注意:

 

 

 

如果除不尽,则进行四舍五入:

BigDecimal big = new BigDecimal("20").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP));

Date类(以被Calender取代,但还是在一些老的项目中使用):

 

 

 

 

 

 

 

public class DateDemo1 {
   public static void main(String[] args) {
       //创建Date对象
       Date date = new Date();
       //今天
       System.out.println(date.toString());//输出Mon Aug 08 16:14:34 CST 2022
       System.out.println(date.toLocaleString());//输出2022-8-8 16:14:34
       System.out.println(date.getTime());//输出1659946474740,这是1970-1-1到今天的毫秒数
       //昨天
       Date date1 = new Date(date.getTime() - (60 * 60 * 24 * 1000));//创建前一天时间
       System.out.println(date1.toLocaleString());//输出2022-8-7 16:16:55
       //方法after before
       boolean after = date1.after(date);//false,昨天没有在今天之后
       boolean before = date1.before(date);//true,昨天在今天之后
       System.out.println(after);
       System.out.println(before);

       //比较compareTO()
       int i = date1.compareTo(date);//输出-1,昨天与今天相比,返回-1,否则为1,与自己相比则返回0
       System.out.println(i);

       //比较是否相等equals()
       boolean equals = date1.equals(date);//不相等为false,相等为true
       System.out.println(equals);

  }
}

Calendar类:

 

 

public class DateDemo2 {
   public static void main(String[] args) {
       //1.创建Calendar对象
       Calendar instance = Calendar.getInstance();
       System.out.println(instance.getTime().toLocaleString());//输出2022-8-8 16:48:32
       System.out.println(instance.getTimeInMillis());//输出1659948512609
       //2.过去时间信息
       //获取年
       int year = instance.get(Calendar.YEAR);
       //获取月
       int month = instance.get(Calendar.MONTH);
       //获取日
       int day = instance.get(Calendar.DAY_OF_MONTH);
       //获取小时
       int hour = instance.get(Calendar.HOUR_OF_DAY);//Hour为12小时,HOUR_OF_DAY为24小时
       //获取分钟
       int minute = instance.get(Calendar.MINUTE);
       //获取秒
       int second = instance.get(Calendar.SECOND);
       System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second);//输出2022年8月8日16:58:37
       //修改时间
       Calendar instance1 = instance.getInstance();
       instance1.set(Calendar.DAY_OF_MONTH,5);
       System.out.println(instance1.getTime().toLocaleString());//输出2022-8-5 17:01:20,更改了日

       //add()方法修改时间
       instance1.add(Calendar.HOUR,-1);//正数位加,负数为减
       System.out.println(instance1.getTime().toLocaleString());//输出为2022-8-5 16:06:48

       //getActualMaximum()和getActualMinimum()获取月份最大值和最小值
       int max = instance1.getActualMaximum(Calendar.DAY_OF_MONTH);
       int min = instance1.getActualMinimum(Calendar.DAY_OF_MONTH);
       System.out.println(max);//输出31
       System.out.println(min);//输出1

  }
}

SimpleDateFormat类

 

 

代码如下:

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

public class SimpleDateFormatDemo1 {
   public static void main(String[] args) throws Exception{
       //使用simpleDateFormat创建格式
//       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
       //创建Date对象
       Date date = new Date();
       //格式化date(把日期转换成字符串)
       String format = simpleDateFormat.format(date);
       System.out.println(format);//输出2022年08月09日
       //解析(把字符串转换成日期)
       Date parse = simpleDateFormat.parse("1999年11月07日");
       System.out.println(parse);//输出Sun Nov 07 00:00:00 CST 1999
  }
}

System类:

 

 

代码如下:

public class SystemDemo1 {
   public static void main(String[] args) {
       //arraycopy()有5个参数,依次为:
       //1.src:源数组
       //2.srcPos:从哪个位置开始复制
       //3.dest:目标数组
       //4.destPos:目标数组的位置
       //5.length:复制的长度
       int[] array1 = {10,30,60,40,2,6,81};
       int[] array2 = new int[7];
       System.arraycopy(array1,0,array2,0,array1.length);
       for (int i = 0; i < array2.length; i++) {
           System.out.print(array2[i]+" ");//输出10 30 60 40 2 6 81
      }
       System.out.println();//换行

       //currentTimeMillis()
       long start = System.currentTimeMillis();
       for (int i = -99999999; i < 999999999; i++) {
           for (int j = -99999999; j < 999999999 ; j++) {
               int result = i+j;
          }
      }
       long end = System.currentTimeMillis();
       System.out.println("用时:"+(end-start));

       //System.gc()
       System.out.println("略");

       //exit()
       System.exit(0);//结束程序
       System.out.println("已完成");//这句话不会输出
  }
}
 

局部内部类

局部内部类不能添加任何修饰符。

局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final(jdk1.8之后默认为final)

静态内部类

在静态内部类当中,不能访问非静态变量。

匿名内部类

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

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

优点:减少代码量

缺点:可读性较差

Object类

又叫超类、基类,所有类的直接或间接父类,位于继承树的最顶端

任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类

Object类中所定义的方法,是所有对象都具备的方法

Object类型可以存储任何对象

  • 作为参数,可以接受任何对象

  • 作为返回值,可返回任何对象

getclass():

返回引用中存储的实际对象类型。

通常用于判断两个引用中 实际的存储对象类型是否一致。

hashCode():

返回该对象的哈希码值。

哈希值根据的地址或者字符串或者数字使用hash算法计算出来的int类型的数值。

一般情况下相同对象返回相同哈希码。

toString():

返回该对象的字符串表示。

可以根据程序需求覆盖该方法。

equals():

默认为比较两个对象地址是否相同。

clone():

克隆类。

克隆类要实现Cloneable接口,但他是一个标记接口,接口中没有任何抽象方法;

首先借助于Object.clone()方法,进行重写,但是需要提高他的访问权限(必须,protected-->public);

返回结果是克隆后的一个新的对象。

public class CloneDemo1 {
   public static void main(String[] args) throws CloneNotSupportedException {
       Test2 test2 = new Test2("小明",18);
       Test2 test1 = (Test2) test2.clone();

       System.out.println(test2==test1);
       System.out.println(test1.equals(test2));
  }
}
class Test2 implements Cloneable{
   String name;
   int age;

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

   public Test2(String name, int age) {
       this.name = name;
       this.age = age;
  }

   @Override
   public String toString() {
       return "Test2{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
  }

   @Override
   public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;

       Test2 test2 = (Test2) o;

       if (age != test2.age) return false;
       return name != null ? name.equals(test2.name) : test2.name == null;
  }

   @Override
   public int hashCode() {
       int result = name != null ? name.hashCode() : 0;
       result = 31 * result + age;
       return result;
  }
}

深度克隆

public class CloneDeepDemo1 {
   public static void main(String[] args) throws CloneNotSupportedException {
       CarDeep cd1 = new CarDeep(11,new EngineDeep(221,"vv8"),new TireDeep(331,"路虎"));
       CarDeep cd2 = (CarDeep) cd1.clone();

       System.out.println(cd1);
       System.out.println(cd2);

       
       //测试
       cd1.engine.ename = "cc8";
       System.out.println(cd1.engine.ename+"----"+cd2.engine.ename);

       cd1.tire.ename = "奔驰";
       System.out.println(cd1.tire.ename+"---"+cd2.tire.ename);
  }
}
class CarDeep implements Cloneable{
   public int cid;
   public EngineDeep engine;
   public TireDeep tire;

   public CarDeep(int cid, EngineDeep engine, TireDeep tire) {
       this.cid = cid;
       this.engine = engine;
       this.tire = tire;
  }
   @Override
   public Object clone() throws CloneNotSupportedException {
       //深度克隆关键代码
       CarDeep cd = (CarDeep) super.clone();

       cd.engine = (EngineDeep) this.engine.clone();

       cd.tire = (TireDeep) this.tire.clone();

       return cd;
  }

   @Override
   public String toString() {
       return "CarDeep{" +
               "cid=" + cid +
               ", engine=" + engine +
               ", tire=" + tire +
               '}';
  }
}
class EngineDeep implements Cloneable{
   public int eid;
   public String ename;

   public EngineDeep(int eid, String ename) {
       this.eid = eid;
       this.ename = ename;
  }

   @Override
   public Object clone() throws CloneNotSupportedException {
       return super.clone();
  }
}
class TireDeep implements Cloneable{
   public int tid;
   public String ename;

   public TireDeep(int tid, String ename) {
       this.tid = tid;
       this.ename = ename;
  }

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

 

包装类

image-20220805170400132

包装类默认为null。

装箱

将基本类型转换成引用类型(栈--->堆)

拆箱

将引用类型转换成基本类型(堆--->栈)

Integer缓冲区:在integer自动装箱时,若数据超过127时,则会在堆里开辟新的地址(new integer(i))

String类:

常用方法:

  • lengh():返回字符串长度;

  • charAt(int index):根据下标获取字符;

  • contains(String str):判断是否包含某个字符串。

  • toCharArray():将字符串转换成数组

  • indexOf(String str):查找str首次出现的下标。存在,则返回该下标;不存在,则返回-1。

  • lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。

  • trim():去掉字符串前后的空格。

  • toUpperCase():将小写转为大写。

  • toLowerCase():将大写转为小写。

  • endWith(String str):判断字符串是否以str结尾。

  • startWith(String str):判断字符串是否以str开头。

  • replace(char oldchar,char newchar):将旧字符串替换成新字符串。

  • split(String str):根据str做拆分。

StringBuffer和StringBuilder的使用

StringBuffer:运行效率慢,线程安全

image-20220807123834868

StringBuilder:运行效率快,线程不安全

image-20220807124044818

BigDecimal类:

一般使用代码进行加减乘除时,精度并不高,如:

public class Test{
   public static void main(String[] args){
       double d1=1.0;
       double d2=0.9;
       System.out.println(d1-d2);
  }
}
//输出结果为0.999999998;
//由于double在存储数据之时,会丢失精度,比如:在存储1.0时,将会存储0.9999998。

 

所以在进行精确计算值之时,需要用到BigDecimal类

image-20220807131134896

在进行除法时,需要注意:

image-20220807131226899

如果除不尽,则进行四舍五入:

BigDecimal big = new BigDecimal("20").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP));

Date类(以被Calender取代,但还是在一些老的项目中使用):

 

image-20220808155852826

 

 

image-20220808155800660

public class DateDemo1 {
   public static void main(String[] args) {
       //创建Date对象
       Date date = new Date();
       //今天
       System.out.println(date.toString());//输出Mon Aug 08 16:14:34 CST 2022
       System.out.println(date.toLocaleString());//输出2022-8-8 16:14:34
       System.out.println(date.getTime());//输出1659946474740,这是1970-1-1到今天的毫秒数
       //昨天
       Date date1 = new Date(date.getTime() - (60 * 60 * 24 * 1000));//创建前一天时间
       System.out.println(date1.toLocaleString());//输出2022-8-7 16:16:55
       //方法after before
       boolean after = date1.after(date);//false,昨天没有在今天之后
       boolean before = date1.before(date);//true,昨天在今天之后
       System.out.println(after);
       System.out.println(before);

       //比较compareTO()
       int i = date1.compareTo(date);//输出-1,昨天与今天相比,返回-1,否则为1,与自己相比则返回0
       System.out.println(i);

       //比较是否相等equals()
       boolean equals = date1.equals(date);//不相等为false,相等为true
       System.out.println(equals);

  }
}

Calendar类:

image-20220808164049899

public class DateDemo2 {
   public static void main(String[] args) {
       //1.创建Calendar对象
       Calendar instance = Calendar.getInstance();
       System.out.println(instance.getTime().toLocaleString());//输出2022-8-8 16:48:32
       System.out.println(instance.getTimeInMillis());//输出1659948512609
       //2.过去时间信息
       //获取年
       int year = instance.get(Calendar.YEAR);
       //获取月
       int month = instance.get(Calendar.MONTH);
       //获取日
       int day = instance.get(Calendar.DAY_OF_MONTH);
       //获取小时
       int hour = instance.get(Calendar.HOUR_OF_DAY);//Hour为12小时,HOUR_OF_DAY为24小时
       //获取分钟
       int minute = instance.get(Calendar.MINUTE);
       //获取秒
       int second = instance.get(Calendar.SECOND);
       System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second);//输出2022年8月8日16:58:37
       //修改时间
       Calendar instance1 = instance.getInstance();
       instance1.set(Calendar.DAY_OF_MONTH,5);
       System.out.println(instance1.getTime().toLocaleString());//输出2022-8-5 17:01:20,更改了日

       //add()方法修改时间
       instance1.add(Calendar.HOUR,-1);//正数位加,负数为减
       System.out.println(instance1.getTime().toLocaleString());//输出为2022-8-5 16:06:48

       //getActualMaximum()和getActualMinimum()获取月份最大值和最小值
       int max = instance1.getActualMaximum(Calendar.DAY_OF_MONTH);
       int min = instance1.getActualMinimum(Calendar.DAY_OF_MONTH);
       System.out.println(max);//输出31
       System.out.println(min);//输出1

  }
}

SimpleDateFormat类

image-20220809105214419

代码如下:

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

public class SimpleDateFormatDemo1 {
   public static void main(String[] args) throws Exception{
       //使用simpleDateFormat创建格式
//       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
       //创建Date对象
       Date date = new Date();
       //格式化date(把日期转换成字符串)
       String format = simpleDateFormat.format(date);
       System.out.println(format);//输出2022年08月09日
       //解析(把字符串转换成日期)
       Date parse = simpleDateFormat.parse("1999年11月07日");
       System.out.println(parse);//输出Sun Nov 07 00:00:00 CST 1999
  }
}

System类:

image-20220809112130930

代码如下:

public class SystemDemo1 {
   public static void main(String[] args) {
       //arraycopy()有5个参数,依次为:
       //1.src:源数组
       //2.srcPos:从哪个位置开始复制
       //3.dest:目标数组
       //4.destPos:目标数组的位置
       //5.length:复制的长度
       int[] array1 = {10,30,60,40,2,6,81};
       int[] array2 = new int[7];
       System.arraycopy(array1,0,array2,0,array1.length);
       for (int i = 0; i < array2.length; i++) {
           System.out.print(array2[i]+" ");//输出10 30 60 40 2 6 81
      }
       System.out.println();//换行

       //currentTimeMillis()
       long start = System.currentTimeMillis();
       for (int i = -99999999; i < 999999999; i++) {
           for (int j = -99999999; j < 999999999 ; j++) {
               int result = i+j;
          }
      }
       long end = System.currentTimeMillis();
       System.out.println("用时:"+(end-start));

       //System.gc()
       System.out.println("略");

       //exit()
       System.exit(0);//结束程序
       System.out.println("已完成");//这句话不会输出
  }
}
 

注意:

String str="a" +1+2;//输出a+1+2

String str='a'+1+2;//输出4

String str=1+2+"a";//输出3+a

posted @   默夔然  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示