Java基础06-常用API

六、常用API

API :应用程序编程接口

在这里插入图片描述

1、Object

作用:Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用0bject类中提供的一些方法。

方法名说明
toString()返回字符串数据
equals(Object o)比较两个对象地址是否相同
clone( )克隆对象
1.1 toString() 方法

作用:返回字符串对象,如果要返回对象的数据,那么就重写toString() 方法。

//测试类
public class Test {public static void main(String[] args) {Student student=new Student("小明",19,"男");System.out.println(student.toString());//输出结果:Student{name='小明', age=19, sex='男'}}
}//学生类
public class Student {private String name;private int  age;private String sex;public Student() {}//重写toString方法@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", sex='" + sex + '\'' +'}';}public Student(String name, int age, String sex) {this.name = name;this.age = age;this.sex = sex;}
}
1.2 equals() 方法

作用:比较两个对象引用地址是否一样,一样返回 true ,否则返回 false

场景:一般是通过重写 equals 方法,这样就可以比较两个对象的数据是否相同。

注意:两个相同的字符串比较,返回的是true ,因为相同的String值,java只会存一个值,然后只引用一个地址。

//测试类
public class Test {public static void main(String[] args) {Student student=new Student("小明",19,"男");Student student1=new Student("小明",19,"男");//比较2个对象的数据是否相同System.out.println(student.equals(student1));//输出结果:true}
}//学生类
public class Student {private String name;private int  age;private String sex;public Student() {}public Student(String name, int age, String sex) {this.name = name;this.age = age;this.sex = sex;}//重写equals 方法@Overridepublic boolean equals(Object o) {//直接判断,当前对象地址和传入对象是否相同(避免比较的对象和传入的对象是同一个对象)if (this == o) return true;//判断传入的地址是不是null,或者 当前对象的数据类型,与传入的数据类型相不相同(比如:比较的是学生对象,结果传入的是狗对象)if (o == null || getClass() != o.getClass()) return false;//将接收的Object对象,转换为学生对象。Student student = (Student) o;//比较对应的数值和字符串是否相同,并返回结果。return age == student.age &&Objects.equals(name, student.name) &&Objects.equals(sex, student.sex);} 
}
1.3 clone() 方法

作用:克隆对象

浅克隆:如果克隆的对象有数组之类的数据,那么克隆的只有地址,不会新建一个数组。

深克隆:如果克隆的对象有数组之类的数据,那么克隆的是整个数组,会新建一个数组对象,数据相同,保存新的数组地址数据。

//测试类
public class Test {public static void main(String[] args) throws CloneNotSupportedException {Student student=new Student("小明",19,"男");//将 学生对象克隆,原本克隆出来的是Object对象,强制转换为学生对象Student student2=(Student) student.clone();//通过重写的equals方法比较数据是否相同System.out.println(student.equals(student2));//结果:true}
}//学生类
//实现Cloneable 空接口,代表可以克隆
public class Student implements Cloneable {private String name;private int  age;private String sex;public Student() {}public Student(String name, int age, String sex) {this.name = name;this.age = age;this.sex = sex;}//重写equals对象@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&Objects.equals(name, student.name) &&Objects.equals(sex, student.sex);}@Overridepublic int hashCode() {return Objects.hash(name, age, sex);}//重写clone对象,浅克隆。  如果要深克隆,就将数组数据单独克隆一次,在赋值回去。@Overrideprotected Object clone() throws CloneNotSupportedException {//返回调用父类对象Object的clone 方法,实现中转站。(因为 clone 在Object是私有的)return super.clone();}
}

2、Objects

是一个最终类、静态工具类

常用方法名说明
public static boolean equals (Object a, Object b )先做非空判断,在比较两个对像
public static boolean isNull ( Object obj )判断对象是否为 null ,为null 返回 true ,反之
public static boolean nonNull ( Object obj )判断对象是否为null,不为null则返回true ,反之
2.1 equals() 方法

它和对象的equals方法的区别在于,Objects类的方法可以识别对象为空的时候,就行判断。

当对象自身的equals方法,遇到一个值为null时,会报空指针异常。

String  name="小明";
String  name2="小明";
String  name3=null;name.equals(name2)  //返回:true
Objects.equals(name,name2)  //返回:truename.equals(name3)  //可能报错:空指针异常
Objects.equals(name,name3)  //返回:false

3、包装类

定义:包装类就是把基础类型的数据包装成对象。

自动装箱:自动将基本数据类型转为引用数据类型

自动拆箱:自动将引用数据类型转换为基本数据类型

作用:像集合不能直接用基本数据类型,所以就用引用数据类型

基本数据类型对应的包装类(引用数据类型)
byteByte
shortShort
intInteter
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean
//通过  valueOf 将基本数据类型转为引用数据类型
Integer a1=Integer.valueOf(12);//自动装箱
Integer a2=10;//自动拆箱
int  a3=a2;
int  a3=15;//集合只能装引用数据类型
ArrayList<Integer> arrList=new ArrayList<>();
arrList.add(10);
System.out.println(arrList.get(0));

包装常见方法

常用方法名说明
public static String toString ( double d )将数值转换为字符串
public String toString( )Object的方法,将数值转换为字符串
public static int parseInt( String s )将字符串转换为数值
public static Integer valueOf( String s )将字符串转换为数值
       int a1=10;//数值转换为字符串String a2=Integer.toString(a1)+1;System.out.println(a2);  //结果:101//将字符串数值转换为数值String  y="10";int y1=Integer.parseInt(y);System.out.println(y1+1);   //结果:11//通常我们用valueOf 只需要记这个String  x="10.5";int x1=Integer.valueOf(y);double x2=Double.valueOf(x);System.out.println(x1+1);  //结果:11System.out.println(x2+1);   //结果:11.5

4、StringBuilder

StringBuilder代表可变字符串对象,相当于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的。

好处:StringBuilder比String 更适合做字符串的修改操作,效率会更高,代码也会更简洁。

StringBuffer的用法与StringBuilder是一模一样的。

但StringBuilder是线程不安全的StringBuffer是 线程安全的。

构造器说明
public StringBuilder( )空构造器
public StringBuilder( String str )有参构造器,一开始可以传入参数,传入的值可以就会参与到计算中
常用方法名说明
public StringBuilder append( 任意类型数据 )追加字符串,可以链式追加
public StringBuilder reverse( )将字符串对象进行反转
public int length( )返回字符串长度
public String toString( )把StringBuilder类型的数据转换为String
      //创建一个Stringbuilder对象sStringBuilder s=new StringBuilder();//给s对象添加数据s.append("小明");s.append(520);//链式连接s.append(1314).append(true);System.out.println(s);         //结果:小明5201314true// 将对象反正s.reverse();System.out.println(s);       //结果:eurt4131025明小//将StringBuilder转换为StringString str=s.toString();System.out.println(str);  //结果:eurt4131025明小

示例如下:传入整数数组,进行拼接后返回字符串数组。

public class Test {public static void main(String[] args)  {System.out.println(getArrayString(new int[]{50, 20, 30, 10}));  //结果:[50, 20, 30, 10]}public  static String getArrayString(int[] arr){StringBuilder sb=new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]).append("]");} else {sb.append(arr[i]).append(", ");}}return sb.toString();}
}

5、StringJoiner

JDK8开始才有的,跟StringBuilder一样,也是用来操作字符串的,也可以看成是一个容器,创建之后里面的内容是可变的。

好处:不仅能提高字符串的操作效率,并且在有些场景下使用它操作字符串,代码会更简洁

构造器说明
public StringJoiner( 间隔符号 )创建一个StringJoiner对象,指定间隔符合
public StringJoiner( 间隔符号,开始符号,结束符合 )创建一个StringJoiner对象,指定中间、开始、结束间隔符号。
常用方法名说明
public StringJoiner add(String str)添加数据,并返回对象本身
public int length()返回长度(字符出现个数)
public String toString( )返回一个字符串(该字符串就是拼接后的结果)

示例如下:传入整数数组,进行拼接后返回字符串数组。

public class Test {public static void main(String[] args)  {System.out.println(getArrayString(new int[]{50, 20, 30, 10}));//结果:[50, 20, 30, 10]}public  static String getArrayString(int[] arr){// 这个构造器:参数为:中间的间隔符号,开始的间隔符号,最后的间隔符号StringJoiner sj=new StringJoiner(", ","[","]");for (int i = 0; i < arr.length; i++) {//add方法只能传入字符串,所以要转换一下sj.add(Integer.toString(arr[i]));}return sj.toString();}
}

6、Math

定义:代表数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法。

常用方法名说明
public static int abs ( int a )获取参数绝对值
public static double ceil ( double a )向上取值
public static double floor (double a)向下取值
public static int round ( float a )四舍五入
public static int max ( int a , int b )返回较大的数据
public static double pow( double a , double b )返回a 的 b 次幂值
public static double random( )返回为double的随机值,范围 [0 , 1.0)
Math.abs(-10); //返回:10Math.ceil(10.1);  //返回:11.0Math.floor(10.7);   //返回:10.0Math.round(10.5);   //返回:11Math.max(10,20);  //返回:20Math.pow(10,2);  //返回:100Math.random(); //随机返回一个 [0.0 ,1.0 )的数

7、System

定义:System代表程序所在的系统,也是一个工具类。

常用方法名说明
public static void exit(int status )终止当前运行的java虚拟机(不怎么用)
public static long currentTimeMillis( )返回当前系统的时间,毫秒形式
// currentTimeMillis方法使用场景:查看程序运行时间public class Test2 {public static void main(String[] args) {//获取程序运行时系统时间:毫秒形式long  starTime=System.currentTimeMillis();for (int i = 0; i <1000000 ; i++) {System.out.println(i);}// 获取程序运行后系统时间:毫秒形式long endTime=System.currentTimeMillis();//结束时间-开始时间,因为是毫秒,除1000,变成秒System.out.println(endTime-starTime/1000.0+"秒");}
}

8、Runtime

定义:代表程序所在的运行环境。

特点:Runtime是一个单例类,只有一个对象。

获取对象:通过调用 getRuntime( ) 方法获取

常用方法名说明
public static Runtime getRuntime( )返回与当前java应用程序关联的运行时对象
public void exit ( int status )终止当前java虚拟机
public int availableProcessors( )返回java虚拟机处理器数
public long totalMemory( )返回java虚拟机中的内存总数
public long freeMemory( )返回java虚拟机可用内存
public Process exec (String command )启动某个程序,并返回代表程序的对象(参数是程序的路径)
public class Test2 {//报错要抛异常,Alt+Enterpublic static void main(String[] args) throws IOException, InterruptedException {//调用getRuntime()方法,获取Runtim对象Runtime runtime=Runtime.getRuntime();//获取java环境,处理器数System.out.println(runtime.availableProcessors());//获取java虚拟机中的内存总数System.out.println(runtime.totalMemory());//获取java虚拟机可用内存System.out.println(runtime.freeMemory());//启动某个程序,并返回代表程序的对象(参数是程序的路径);//注意:路径要变成双斜杠(转义字符)。返回程序对象(会报错,要抛异常)Process process=  runtime.exec("L:\\Software\\YuanShen\\Genshin Impact\\launcher.exe");//程序5秒后才向下执行(要报错,要抛异常)Thread.sleep(5000);//销毁程序,关闭打开的程序process.destroy();}
}

9、BigDecimal

作用:用于解决浮点型运算时,出现结果失真的问题。

构造器说明
public BIgDecimal ( double val ) 不推荐将 double 转换为 BigDecimal
public BigDecimal ( String val )把 String 转成 BigDecimal
常用方法名说明
public static BigDecimal valueOf ( double val )换一个double 为 BigDecimal
public BigDecimal add ( BigDecimal b )加法
public BigDecimal subtract ( BigDecimal b )减法
public BigDecimal multiply ( BigDecimal b )乘法
public BigDecimal divide ( BigDecimal b )除法
public BigDecimal divide ( 另一个BigDecimal对象 , 精准几位 , 舍入模式 )除法,可精准控制小数位数
public double doubleValue ( )将BigDecimal 转换为 double
public class BigdecimalDemo {public static void main(String[] args) {double  s1=0.1;double  s2=0.2;//通过Bigdecimal 提供的静态方法,将double类型的数据转换为 Bigdecimal 对象(也可以通过构造器传入字符串)BigDecimal a1=BigDecimal.valueOf(s1);BigDecimal a2=BigDecimal.valueOf(s2);//通过add方法进行 加法运算BigDecimal a=a1.add(a2);//通过subtract方法进行 减法运算BigDecimal b=a1.subtract(a2);//通过 mutiply方法进行 乘法运算BigDecimal c=a2.multiply(a1);//通过divide方法,进行除法运算,BigDecimal d=a1.divide(a2);//除法:可以控制小数位数,和四舍五入,如果除不尽,一定要保留小数位,不然要报错BigDecimal a3=BigDecimal.valueOf(0.3);BigDecimal e=a1.divide(a3,2, RoundingMode.HALF_UP);System.out.println(a+","+b+","+c+","+d+","+e);//结果:0.3,-0.1,0.02,0.5,0.33}
}

10、JDK8之前的日期和时间

10.1 Date

JDK8之前的日期和时间

构造器说明
public Date( )创建一个Date对象,代表的是系统当前此刻日期时间
public Date( long time )把时间毫秒值转换为,Date对象
常见方法说明
public long getTime()返回从1970年1月1日00:00:00走到此刻 的总的毫秒数
public void steTime ( long time )设置日期对象的时间为当前时间毫秒值对应的时间
public class DateDemo {public static void main(String[] args) {//创建日期对象Date date=new Date();System.out.println(date);    //输出当前时间对象//获取日期对象的时间毫秒值long  d1=date.getTime();System.out.println(d1);     //输出当前时间对象的毫秒值//将时间毫秒值转换为时间对象Date date1=new Date(d1);System.out.println(date1);     //输出当前时间毫秒值转换成的时间对象//将时间毫秒值转换为日期date1.setTime(d1);System.out.println(date1);    //输出当前时间毫秒值转换成的时间对象}
}
10.2 simpleDateFormat

定义:代表简单日期格式化,可以用来把日期对象、时间毫秒值格式化成我们想要的形式。

常用构造器说明
public SimpleDateFormat ( String pattern )创建一个简单的时间对象,并封装城建格式
常用方法说明
public final String format ( Date date )将日期格式化成日期/时间字符串
public final String format ( Object time )将时间毫秒值格式化成日期/时间字符串
public final Date parse ( String date )将字符串时间转换为时间对象

时间格式符号: y:年,M:月,d:日,H:小时,m:分钟,s:秒,EEE:星期,a:上午/下午。不能改字母大小写。

public class DateDemo {public static void main(String[] args) {//创建一个时间对象Date data=new Date();//将时间对象转换为时间毫秒值long date2=data.getTime();//定义简单时间格式: y:年,M:月,d:日,H:小时,m:分钟,s:秒,EEE:星期,a:上午/下午//可以自由定义,中间的除了特殊的字母,其他都可以修改如:"yyyy年MM月dd日"SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEE a");//通过simpleDateFormat提供的方法,可以将时间对象或时间毫秒值转换为简单格式的时间字符串String s1= simpleDateFormat.format(data);String  s2=simpleDateFormat.format(date2);System.out.println(s1);   //输出当前系统日期时间:2023-10-21 17:22:03 周六 下午System.out.println(s2);   //输出当前系统日期时间:2023-10-21 17:22:03 周六 下午//定义一个时间格式的字符串(用户前端选择日期时间时是字符串)String dateStr="2023-10-21 17:22:03";//要保证传入的时间格式的字符串的格式,要和定义的格式保持一致,才行。SimpleDateFormat simpleDateFormat12=new SimpleDateFormat("yyy-MM-dd HH:mm:ss");//通过调用parse方法将字符串转为日期对象(需要抛异常,java防止你传入的时间字符串格式,和你定义的格式不一致)Date data4= simpleDateFormat12.parse(dateStr);System.out.println(data4);    //输出:Sat Oct 21 17:22:03 CST 2023}
}
10.3 Calendar

定义:代表的是系统此刻时间对应的日历。
作用:通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。

场景:在原来的日期时间上,加一个月。

以前做法:通过将一个月转换为时间毫秒值(1000x60x60x24x30)+当前日期对象的时间毫秒值,再转为日期对象。

常用方法名说明
public static Calendar getInstance()获取当前日历对象
public int get ( int field )获取日历中的某个信息
public final Date getTime ()获取当前日期对象
public long getTimeInMillis ( )获取当前时间毫秒值
public void set ( int field , int value )修改日期中的某个信息
public void add( int field , int amout )为某个信息增加/减少指定的值
public class CalendarDemo {public static void main(String[] args) {//通过Calendar静态方法获取一个日历对象Calendar now=Calendar.getInstance();//输出当前日历的信息System.out.println(now);//获取当前日期对象Date date=now.getTime();System.out.println(date);//获取当前日期对象的时间毫秒值long datelong=now.getTimeInMillis();System.out.println(datelong);//获取日历中的信息,可以通过:Calendar.常量值,常量值可以通过输出日历对象进行查看//获取年日历中的年或其他信息System.out.println(Calendar.YEAR);//获取日历中的月份:0-11,所以要加1System.out.println(Calendar.MARCH+1);//修改当前日历中的年为2099年,格式:(日历常量,修改值)now.set(Calendar.YEAR,2099);//修改当前日历中的月份为12月,月份是:0-11now.set(Calendar.MARCH,11);//输出被修改后的日历对象信息System.out.println(now);//在日历的年份上加1,因为刚刚修改过,所以年份结果为:2100now.add(Calendar.YEAR,1);//在月份上减6,因为刚刚修改过所以,月份结果为:5,月份:0-11now.add(Calendar.MARCH,-6);//输出,加减后的日历信息System.out.println(now);}
}

在这里插入图片描述

在这里插入图片描述

11、JDK8开始新增加的日期和时间

11.1 LocalDate、LocalTime、LocalDateTime

分别代表:

①本地日期(年、月、日、星期)

②本地时间(时、分、秒、纳秒)

③代表本地时间、日期(年、月、日、星期、时、分、秒、纳秒)

获取对象静态方法名说明
public static LocalDate now( )获取本日期对象
public static LocalTime now( )获取本地时间对象
public static LocalDateTime now( )获取本地日期时间对象
//所有输出结果也自己当时的日期时间为参考,写出结果只是可以知道输出的格式是什么样的。
public class LocalDateTimeDemo {public static void main(String[] args) {//1.1、获取本地日期对象(不可变对象)LocalDate ld=LocalDate.now();System.out.println(ld);   //当时输出结果:2023-10-22int year=ld.getYear();  //获取年份:2023int  mon=ld.getMonthValue(); //获取月份(1-12):10int  day=ld.getDayOfMonth(); //获取当前月份的第几日:22int  dayofyear=ld.getDayOfYear();   //获取一年中的第几天:295int  dayofweek=ld.getDayOfWeek().getValue();  //获取一周中的第几天:7// 1.2、直接修改某个信息: withYear、withMonth、withDayOfMonth、 withDayOfYear//修改后,会返回一个新的,被修改后的对象。LocalDate ld2=ld.withYear(2099);  //修改年份System.out.println(ld2);         //输出结果:2099-10-22LocalDate ld3=ld2.withMonth(12); //修改月份System.out.println(ld3);        //输出结果:2099-12-22// 1.3、把某个信息加多少: plusYears、plusMonths、plusDays. plusWeeksLocalDate ld4=ld.plusYears(10)  //在原来的年份上加:10System.out.println(ld4);         //输出结果:2033-10-22//1.4、把某个信息减多少: minusYears、minusMonths、minusDays、minusWeeks LocalDate ld5=ld.minusYears(-10)  //在原来的年份上加:-10System.out.println(ld5);         //输出结果:2013-10-22// 1.5、获取指定日期的LocalDate对象: public static LocalDate of(int year,int month, int day)LocalDate ld6=LocalDate.of(2999,10,10); //指定一个日期对象System.out.println(ld6);   //输出结果:2999-10-10// 1.6、判断2个日期对象,是否相等,在前还是在后: equals isBefore isAfterld.isEqual(ld6);    //判断两个日期是否相等,返回结果:falseld.isAfter(ld5);    //判断ld是否在ld5后,返回结果:falseld.isBefore(ld5);    //判断ld是否在ld5前,返回结果:true/*     下面没有的方法,都是和上面的差不多(1.1,1.2,1.3,1.4,1.5,1.6) */      //2、获取本地时间对象LocalTime lt=LocalTime.now();System.out.println(lt); //当时输出结果:17:30:46.586131500int h=lt.getHour();  //获取小时:17int m=lt.getMinute(); //获取分钟:30int s=  lt.getSecond();  //获取秒钟:45int nm=lt.getNano();    //获取纳秒:586131500//3、获取本地时间日期对象LocalDateTime ldt= LocalDateTime.now();System.out.println(ldt);  //当时输出结果:2023-10-22T17:35:21.237835ldt.getYear();            //获取年:2023ldt.getMonthValue();      //获取月:10ldt.getDayOfMonth();       //获取日:22ldt.getHour();             //获取时:17ldt.getMinute();           //获取分:35ldt.getSecond();           //获取秒:21ldt.getNano();             //获取纳秒:237835}
}
11.2 ZoneId

代表时区ID

场景:想获取某个国家、某个城市的日期时间。

ZoneId 时区id,方法名说明
public static Set getAvailableZoneIds( )获取java中所有时区的集合
public static ZoneId systemDefault()获取系统默认的时区
public static ZoneId of ( String zoneId )获取指定时区对象
ZonedDateTime 带时区时间的常用方法说明
public static ZonedDateTime now ( )获取系统默认时区的日期时间
public static ZonedDateTime now ( ZoneId zone )获取指定时区的日期时间
getYear、getMonthvalue、getDayOfMonth、getDatOfYear、getDayOfWeek、getHour、getMinute、getSecond、getNano获取年、月、日、年的第几天、周、时、分、秒、纳秒
public ZonedDateTime withXxx ( 时间 )修改日期时间系列方法
public ZonedDateTime minusXxx( 时间 )对日期时间算减法系列方法
public ZonedDateTime plusXxx (时间)对日期时间算加法系列方法
public class ZoneIdDemo {public static void main(String[] args) {// 1、ZoneId的常见方法:// public static ZoneId systemDefault(): 获取系统默认的时区ZoneId zoneId=ZoneId.systemDefault();System.out.println(zoneId); //结果:Asia/ShanghaiString id=zoneId.getId(); //获取系统默认时区System.out.println(id);   // 结果:Asia/Shanghai// public static Set<String> getAvailableZoneIds(): 获取Java支持的全部时区IdSet sqList= ZoneId.getAvailableZoneIds();System.out.println(sqList);  //输出所有时区的集合// public static ZoneId of(String zoneId) :把某个时区id封装成ZoneId对象。ZoneId zoneId1=ZoneId.of("America/New_York");  //获取一个指定地区的ZoneId对象// 2、ZonedDateTime:带时区的时间。// public static ZonedDateTime now(ZoneId zone): 获取 某个时区的ZonedDateTime对象。ZonedDateTime zdt=ZonedDateTime.now(zoneId1);  //获取纽约的时间日期//获取世界标准时间(我们国家和世界标准时间相差8小时)ZonedDateTime now= ZonedDateTime.now(Clock.systemUTC());//获取当前时区的日期时间ZonedDateTime now1= ZonedDateTime.now();}
}
11.3 Instant

作用:时间线上的某个时刻/时间戳

通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成:从1970-01-01 00:00:00开始走到此刻的总秒数+不够1秒的纳秒数

场景:①做系统性能分析;②用户操作某个功能的的时间点

方法名说明
public static Instant now ()获取当前时间的Instant对象(标准时间)
public long getEpochSecond ( )获取从1970-01-01T00:00:00开始记录的秒数
public int getNeno ( )从时间线开始,获取从第二个开始的纳秒数
plusMillis、plusSeconds、plusNanos增加时间系列方法
minusMillis 、minusSeconds 、minusNanos减少时间系列方法
equals、isBefore、 isAfter判断系列的方法
public class InstantDemo {public static void main(String[] args) {//获取系统当前Instant对象,输出为当前的日期时间Instant now= Instant.now();System.out.println(now);    //2023-10-22T13:22:06.006580400Z//获取时间线到现在的秒数long s=now.getEpochSecond();System.out.println(s);   //1697980926//获取不够一秒的纳秒int nm=now.getNano();System.out.println(nm);  //6580400}
}
11.4 、DateTimeFormatter

作用:代替SimoleDateFormat(线程不安全),格式化器,用于时间的格式化、解析。

方法名说明
public static DateTimeFormatter ofPattern( 时间格式 )获取格式化器对象
public String format( 时间对象 )格式化时间
LocalDateTime方法说明
public String format( DateTimeFromatter formatter )格式化时间
public static LocalDateTime parse ( CharSequence text , DateTimeFormatter formatter )解析时间
public class DateTimeFormatterDemo {public static void main(String[] args) {//获取本地时间对象LocalDateTime now=LocalDateTime.now();System.out.println(now);   //2023-10-22T21:56:37.240579//创建一个日期时间格式化器对象出来。DateTimeFormatter dtf= DateTimeFormatter.ofPattern("yyyy年MM月dd HH时mm分ss秒");//将时间对象进行格式化String  dateTime= dtf.format(now);System.out.println(dateTime); //2023年10月22 21时56分37秒//将时间对象进行格式化(传入格式化器对象)String date2=now.format(dtf);System.out.println(date2);  //2023年10月22 21时56分37秒String date3="2099年11月11 11时11分11秒";//将字符串,转换为LocalDateTime对象,传入(时间,格式化器)LocalDateTime date5= LocalDateTime.parse(date3,dtf);System.out.println(date5);   //2099-11-11T11:11:11}
}
11.5、Period、Duration

使用场景:

11.5.1 Period

作用:可以用于计算两个LocalDate对象相差的年数、月数、天数。

方法名说明
public static Period between ( LocalDate start , LocalDate end )传入2ge日期对象,得到Period对象
public int getYears ()计算隔几年、并返回
public int getMonths ( )计算隔几个月,并返回
public int getDays ( )计算隔多少天,并返回
public class PeriodDemo {public static void main(String[] args) {//获取当前系统日期对象LocalDate date1=LocalDate.now();//将date1对象的年加10,并返回新对象LocalDate date2=date1.plusYears(10);//将两个日期对象传入,获取Period对象Period period= Period.between(date1,date2);int year=period.getYears();  // 间隔年:10//将两个日期对象传入,获取Period对象Period period2= Period.between(date2,date1);int year2=period2.getYears();  //间隔:-10int  mon=  period.getMonths();  //间隔月:0int  day=  period.getDays();     //间隔天:0}
}
11.5.2 Duration

作用:可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持LocalTime、LocalDateTime、 Instant等 时间

注意:直接使用toHours、 toMinutes等方法时是获取两个日期时间的相差的总小时、分钟等,要获取,正常的相差天数、小时数、分钟数等,要在方法后加上Part,如:toHoursPart()

方法名说明
public static Duration between( 开始时间对象1,结束时间对象2 )传入2个时间对象,得到Duration对象
public long toDays ()计算间隔多少天,并返回
public long toHours( )计算隔多少小时,并返回
public long toMinutes( )计算隔多少分,并返回
public long toSeconds( )计算隔多少秒,并返回
public long toMillis()计算隔多少毫秒,并返回
public long toNanos( )计算隔多少纳秒,并返回
toHoursPart( )、toMinutesPart( )、 toSeconds()在使用两个时间倒计时时,可以保证小时、分钟、秒钟的正确性
public class DurationDemo {public static void main(String[] args) {//获取当前的日期时间对象LocalDateTime ldt1=LocalDateTime.now();//自定义一个日期时间对象LocalDateTime ldt2=LocalDateTime.of(2099,12,12,14,30,30);//传入2个日期时间对象,并返回Duration对象Duration duration=Duration.between(ldt1,ldt2);duration.toDays();     //间隔天duration.toHours();    //间隔小时(可超过24H)duration.toMinutes();  //间隔分钟(可超过60Min)duration.toSeconds();  //间隔秒钟(可超过60S)duration.toMillis();   //间隔毫秒duration.toNanos();    //间隔纳秒}
}

12、Arrays

作用:用于操作数组的一个工具类。

方法名说明
public static String toString( 类型[] arr )将数组转换为字符串
public static int[ ] copyOfRange( 类型[ ] arr , 起始索引 , 结束索引 )拷贝数组(指定范围)包前不包后
public static copyOf ( 类型[ ] arr , int newLength )拷贝数组
public static setAll( double[ ] array , intToDoubleFunction generator )把数组中的原数据改为新数据
public static void sort ( 类型[ ] arr )将数组进行排序(默认升序)
public class ArrayDemo {public static void main(String[] args) {int[]  a={1,4,2,6,7};//将整数型数组转换为字符串String  aStr= Arrays.toString(a);System.out.println(aStr);   //[1, 4, 2, 6, 7]int[]  aCopy=Arrays.copyOfRange(a,1,4); //包前不包后System.out.println(Arrays.toString(aCopy));  // 将数组转换为字符串输出(不然要循环输出):[4, 2, 6]int[] aCopyOf=Arrays.copyOf(a,3); //指定新数组长度,如果比传入原数组短就截取,长就把长出的部分赋默认值System.out.println(Arrays.toString(aCopyOf)); //将[1, 4, 2]double[] b={10.5,2,5,3};//修改,数组里的值,传入参数为:double类型数组,一个IntToDoubleFunction匿名内部类Arrays.setAll(b, new IntToDoubleFunction(){@Override   //重写applyAsDouble方法,value为数组索引,返回值返回到原数组中对应位置。public double applyAsDouble(int value){return b[value]*2;}});System.out.println(Arrays.toString(b)); //输出修改后的数组:[21.0, 4.0, 10.0, 6.0]//修改数组b为升序排列Arrays.sort(b);System.out.println(Arrays.toString(b));  //[4.0, 6.0, 10.0, 21.0]}
}

对对象数组进行排序:

①让该对象的类实现Comparable(比较规则)接口,然后重写compareTo方法,自己来制定比较规则。

②使用下面这个sort方法,创建Comparator 比较器接口的匿名内部类对象,然后自己制定比较规则。

//测试类
public class Test {public static void main(String[] args) {Student[] studens=new Student[3];studens[0]=new Student("小明",10,173.4);studens[1]=new Student("小张",20,168.4);studens[2]=new Student("小康",7,150.8);//方法一:对对象进行按年龄排序(实体类实现:Comparable类)Arrays.sort(studens);System.out.println(Arrays.toString(studens));//输出结果:[Student{name='小康', age=7, height=150.8}, Student{name='小明', age=10, height=173.4}, Student{name='小张', age=20, height=168.4}]//方法二:对对象数组按身高降序排序(重写匿名内部类Comparator)Arrays.sort(studens, new Comparator<Student>() {//约定1:认为左边对象大于右边对象请您返回正整数//约定2:认为左边对象小于右边对象请您返回负整数//约定3:认为左边对象等于右边对象请您一定返回日@Overridepublic int compare(Student o1, Student o2) {//             if(o1.getHeight()>o2.getHeight()){
//                    return -1;
//                }else if(o1.getHeight()<o2.getHeight()){
//                    return 1;
//                }
//                return 0;//通过java提供的方法,和上面实现结果完全一致return Double.compare(o2.getHeight(),o1.getHeight());}});//输出降序排列的对象数组System.out.println(Arrays.toString(studens));//输出结果:[Student{name='小明', age=10, height=173.4}, Student{name='小张', age=20, height=168.4}, Student{name='小康', age=7, height=150.8}]}
}//学生类
//实体类实现:Comparable<Student> 类,并传入要排序的数据类型
public class Student implements Comparable<Student>{private String name;private int age;private double height;public Student() {}public Student(String name, int age,double height) {this.name = name;this.age = age;this.height=height;}@Overridepublic int compareTo(Student o) {//约定1:认为左边对象大于右边对象请您返回正整数//约定2:认为左边对象小于右边对象请您返回负整数//约定3:认为左边对象等于右边对象请您一定返回日//按照年龄升序排序。//降序排序:反过来减就可以(o.age-this.age)return this.age-o.age;}//重写toString方法,为了输出显示@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", height=" + height +'}';}public int getAge() {return age;}public double getHeight() {return height;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Docker-compose 部署达梦 DM 数据库

目录 1. 获取达梦 DM8 Docker 镜像并上传到 Harbor 服务器 2. Docker-compose 部署达梦 DM8 数据库 3. 配置 dm.ini 文件 4.完整的 dm.ini 文件 最近&#xff0c;将 MySQL 数据库迁移到了达梦 DM8 数据库。本文将分享如何通过 Docker-compose 部署达梦 DM8 数据库的过程&am…

ARM(5)内存管理单元MMU

一、虚拟地址和物理地址 首先&#xff0c;计算机系统的内存被组成一个由M个连续的字节大小组成的数组。每字节都会有一个唯一的物理地址。CPU访问内存最简单的方式就是使用物理地址。如下图&#xff1a; 图 1 物理地址,物理寻址 而现在都是采用的都是虚拟寻址的方法。CPU生成一…

gitlab保护分支设置

版本&#xff1a;gitlab10.2.2 一旦设置master分支被保护&#xff0c;除了管理员之外的任何用户都无法直接向master提交代码&#xff0c;只要提交代码就会报错 # git push -u origin master Total 0 (delta 0), reused 0 (delta 0) remote: GitLab: You are not allowed to pu…

在CentOS系统下实现准实时SFTP上传指定目录下前2分钟的文件

在CentOS系统下实现准实时SFTP上传指定目录下前2分钟的文件 引言准备工作编写Shell脚本执行脚本定时执行脚本注意事项结论引言 在企业级的文件同步和备份场景中,经常需要将本地目录中最新生成的文件(如前2分钟内生成的文件)快速上传到远程服务器的指定目录。为了实现这一目…

unity 屏幕波动反馈打击效果(附资源下载)

unity 屏幕波动反馈打击效果 一枪打出去整个屏幕都回波动的效果反馈。 知识点&#xff1a; 1、动画事件 2、屏幕后处理 效果如图&#xff1a;&#xff08;波动速度浮动都可调整&#xff09; 附件下载

【互联网业务风控】

1. 不同场景下的业务风控 1.1 账户业务风控 1.1.1账户安全 • 账号安全是所有强账号体系应用的基础&#xff0c; 强账号体系&#xff0c;如电商、网游、第三方支付、社交网络、即时通讯等&#xff1b;是需要登录后产生数据和交互的应用&#xff0c; 弱账号体, 如搜索、导航、…

关键词提取技术:TF-IDF 和 TextRank 简介

关键词提取是自然语言处理中的重要任务之一&#xff0c;用于自动提取文档中最能代表其内容的词汇。两种常用的关键词提取技术是 TF-IDF 和 TextRank。它们的工作机制和应用场景有所不同&#xff0c;下面将详细解释这两种技术。 1. TF-IDF&#xff08;Term Frequency - Inverse…

Python | Leetcode Python题解之第485题最大连续1的个数

题目&#xff1a; 题解&#xff1a; class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:maxCount count 0for i, num in enumerate(nums):if num 1:count 1else:maxCount max(maxCount, count)count 0maxCount max(maxCount, count)return …

未来智慧建筑:人工智能技术的无限可能

随着科技的不断发展&#xff0c;人工智能技术正逐渐渗透到各行各业&#xff0c;其中&#xff0c;在智能建筑领域的应用备受瞩目。智能建筑结合了传统建筑与先进科技的完美融合&#xff0c;在提高建筑效率、节能环保、增强安全性等方面发挥着重要作用。本文将探讨人工智能技术在…

MyBatis的占位符(day36)

1 学习目标 重点掌握#{}占位符的使用 2 MyBatis的占位符介绍 #{}占位符: 相当于JDBC中的问号(?)占位符&#xff0c;是为SQL语句中的值进行占位&#xff0c;如果参数值是字符串或者日期类型&#xff0c;会进行转义处理 我们使用#{}写的SQL语句: <update id"delete…

蓝牙资讯|苹果AirPods Pro 2耳机推送开发者Beta固件

科技媒体 MacRumors 报道&#xff0c;苹果公司邀请开发者&#xff0c;针对 Lightning 和 USB-C 接口的 AirPods Pro 2 耳机&#xff0c;推送了新的 7B5013d 固件版本&#xff0c;较之前的 7B5013c 有所提升。 苹果未来会向所有 AirPods Pro 2 用户推送本次固件更新&#xff0…

react18中实现简易增删改查useReducer搭配useContext的高级用法

useReducer和useContext前面有单独介绍过&#xff0c;上手不难&#xff0c;现在我们把这两个api结合起来使用&#xff0c;该怎么用&#xff1f;还是结合之前的简易增删改查的demo&#xff0c;熟悉vue的应该可以看出&#xff0c;useReducer类似于vuex&#xff0c;useContext类似…

springboot项目通过maven的profile功能实现通过不同文件夹的方式来组织不同环境配置文件

写在前面 本文看下springboot项目如何通过文件夹的方式来组织不同环境配置文件。 1&#xff1a;正文 一般的我们写springboot项目时配置文件是这个样子的&#xff1a; appliction.yaml --> 通过spring.profiles.activexxx来激活某个指定后缀的配置文件 application-evn1…

小程序项目实践(一)--项目的初始化以及前期的准备工作

目录 1.起步 1.1 uni-app 简介 1.2 开发工具 1.2.1 下载 HBuilderX 1.2.2 安装 HBuilderX 1.2.3 安装 scss/sass 编译 1.2.4 快捷键方案切换 1.2.5 修改编辑器的基本设置 1.3 新建 uni-app 项目 1.4 目录结构 1.5 把项目运行到微信开发者工具 1.6 使用 Git 管理项目 …

SpringBoot3响应式编程全套-R2DBC

目录 传送门前言一、R2DBC概念二、Spring Data R2DBC1、整合1.1、导入依赖1.2、编写配置 2、声明式接口&#xff1a;R2dbcRepository2.1、Repository接口2.2、自定义Converter2.3、配置生效 3、编程式组件 三、RBAC-SQL练习1、1-12、1-N 四、最佳实践五、附录 传送门 SpringMV…

python配合yolov11开发分类训练软件

上一篇文件写了用yolo分类模型开发分类软件&#xff0c;这边文章在上个分类软件的基础上加入训练功能环境配置:pycharm&#xff0c;PySide6 6.6.1 &#xff0c;PySide6-Addons 6.6.1&#xff0c;PySide6-Essentials 6.6.1&#xff0c;torch 2.3.1cu121&#xff0c;torchaudio 2…

Spring AI Java程序员的AI之Spring AI(三)RAG实战

Spring AI之RAG实战与原理分析 前言RAGDocumentDocumentReaderDocumentTransformerDocumentWriter VectorStoreSimpleVectorStoreRedisVectorStore元数据搜索组装提示词 前言 检索增强生成&#xff08;RAG&#xff09;是一种结合信息检索和生成模型的技术&#xff0c;用于将相…

C语言——数组

1.数组的概念 数组是一组相同类型元素的集合&#xff1b; 数组中可以存放1个或多个元素&#xff0c;但数组元素个数不能为0。 同时数组可以分为一维数组和多维数组&#xff0c;多维数组一般常见 是二维数组。 2.一维数组的创建和初始化 一维数组的创建的基本语法&#xff1a; …

大数据-168 Elasticsearch 单机云服务器部署运行 详细流程

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【C++】类和对象(类的默认成员函数)

目录 一.构造函数 二.析构函数 三.拷贝构造函数 四.赋值运算符重载 五.取地址运算符重载 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个默认成员函数。 一.构造…