网站建设 需求分析报告,网站打开速度变慢,网站建设top图,友链之家对于常见API的学习#xff0c;主要学习了关于时间和日期的传统和新增APi
目录
1.Math
2.System 3.Runtime
4.日期和时间
#xff08;1#xff09;JDK8前传统时间API [1] Date [2] SimpledateFormat [3]Calendar
#xff08;2#xff09;JDK8后新增时间API
[1]代替… 对于常见API的学习主要学习了关于时间和日期的传统和新增APi
目录
1.Math
2.System 3.Runtime
4.日期和时间
1JDK8前传统时间API [1] Date [2] SimpledateFormat [3]Calendar
2JDK8后新增时间API
[1]代替Calendar
[2]代替Date
[3]代替SimpleDateFormat
[4]其他补充
5.Arrays
6.*Lambda 表达式
7.方法引用略 1.Math 代表数学一个工具类提供一些对数据操作的静态方法 常用方法
方法名 说明 public static int abs(int a)获取参数绝对值poublic 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)获取两个int值中的较大值public static double pow(double a,double b)返回a 的b次幂的值public static double random()返回值为double的随机值范围为[0.0.,1.0] package API_2;public class Text {public static void main(String[] args) {//目标了解Math类的常见方法//1.public static int abs(int a) 获取参数绝对值(返回一定是正数)System.out.println(Math.abs(-12));System.out.println(Math.abs(-3.14));//2.public static double ceil(double a) 向上取整System.out.println(Math.ceil(4.00001));System.out.println(Math.ceil(4.0));//3.public static double floor(double a) 向下取整System.out.println(Math.floor(4.99999));//4.public static int round(float a) 四舍五入System.out.println(Math.round(3.4999));//5.public static int max(int a,int b) 获取两个int值中的较大值// public static int min(int a,int b)System.out.println(Math.max(10, 20));System.out.println(Math.min(10, 20));//6.public static double pow(double a,double b) 返回a 的b次幂的值System.out.println(Math.pow(2, 3));//7.public static double random() 返回值为double的随机值范围为[0.0.,1.0]System.out.println(Math.random());}
}2.System 代表系统所在的系统也是一个工具类 常见方法
方法名说明public static void exit(int status)终止当前运行的java虚拟机public static long currentTimeMillis()返回当前系统的时间毫秒形式 package API_2;public class Text1 {public static void main(String[] args) {//目标了解System类的常见方法//1.public static void exit(int status) 终止当前运行的java虚拟机//该参数作用状态按照惯例非零状态码表示异常终止//System.exit(0); //一般不必使用System.out.println(---------);//2.public static long currentTimeMillis() 返回当前系统的时间毫秒形式long time System.currentTimeMillis();//测试程序执行时间for (int i 0; i 1000000; i) {System.out.println(输出了i);}long time1 System.currentTimeMillis();System.out.println(运行时间:(time1-time)/1000.0S);}
}3.Runtime 代表程序的运行环境是一个单例类 package API_2;import java.io.IOException;public class Text2 {public static void main(String[] args) throws IOException, InterruptedException {//目标“了解Runtime的用法//1.返回与当前java应用程序关联的运行时对象Runtime r Runtime.getRuntime();//2.终止当前运行的的虚拟机 exit() 终止异常//3.public int availableProcessors;获取虚拟机能够使用的处理器数System.out.println(r.availableProcessors());//4.public long totalMemory() 返回java虚拟机中的可用内存System.out.println(r.totalMemory() /1024.0/1024.0MB);//5.public long freeMemory()返回java虚拟机中的可用内存System.out.println(r.freeMemory()/1024.0/1024.0MB);//6.public Process exec(String command)启动某个程序 并返回代表该程序的对象// r.exec(C:\\Users\\22935\\AppData\\Local\\Programs\\Xmind\\Xmind.exe);Process p r.exec(QQ);Thread.sleep(5000);p.destroy();}
}4.BigDecimal 用于解决浮点型运算时出现结果失真的问题 运算失真
常用构造器
构造器说明public BigDecimal (double val)不推荐使用将double转换为BigEecimalpublic BigDecimal (String val)将String转换为BigDecimal
常用方法
方法名说明public static BigDecimal valueof(double val)转换一个double成BigDecimalpublic BigDecima add(BigDecima b)加法public BigDecima subtract (BigDecima b)减法public BigDecima multiply (BigDecima b)乘法public BigDecima divde (BigDecima b)除法public BigDecima divide (BigDecima b )另一个BigDecimal对象精确几位舍入模式除法 可以控制到小数点后几位public double doubleValue() 将BigDecimal转换为double package API_2;import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;public class Text3 {public static void main(String[] args) {double a 0.1;double b 0.2;double c ab;System.out.println(c);//1.把他变成字符串封装成BigDecimal的对象来运算//BigDecimal a1 new BigDecimal(Double.toString(a));//BigDecimal b1 new BigDecimal(Double.toString(b));//推荐以下方式 把小数转换为BigDecimal对象来使用BigDecimal a1 BigDecimal.valueOf(a);BigDecimal b1 BigDecimal.valueOf(b);BigDecimal c1 a1.add(b1); //加法//BigDecimal c1 a1.subtract(b1); //减法//BigDecimal c1 a1.multiply(b1); //乘法//BigDecimal c1 a1.divide(b1); //除法System.out.println(c1);BigDecimal i BigDecimal.valueOf(0.1);BigDecimal j BigDecimal.valueOf(0.3);BigDecimal k i.divide(j,2, RoundingMode.HALF_UP);k.doubleValue(); //转换为double返回System.out.println(k);}
}4.日期和时间
1JDK8前传统时间API [1] Date 代表的是时间和日期 常用构造器
构造器说明public Date()创建一个Date对象代表的是系统当前此刻日期时间public Date(long time)把时间毫秒值转换为Date日期对象
常用方法
常见方法说明public long getTime()返回从1970年1月1日 00:0000走到此刻的总毫秒数public void setTime(long time)设置日期对象的时间为当前时间毫秒值对应的时间 package API_2;import java.util.Date;public class Time {public static void main(String[] args) {//目标掌握Date日期类的使用//1.创建一个Date的对象代表系统当前时间信息的Date d new Date();System.out.println(d);//2.拿到时间毫秒值long time d.getTime();//3.时间毫秒值转换为日期对象 2S后的时间是多久time 2000;Date d2 new Date(time);System.out.println(d2);//4.直接把日期对象的时间通过setTime方法进行修改Date d3 new Date();d3.setTime(time);System.out.println(d3);}
}[2] SimpledateFormat 简单日期格式化可以用来把日期对象时间毫秒值格式化成我们想要的形式 常见构造器
常见构造器说明public SimpleDateFormat(String patterrn) 创建简单日期格式化对象并封装时间等待格式
常用方法
格式化时间的方法说明public final String format (Date date)将日期格式化成日期/时间字符串public final String format(Object time)将时间毫秒值化成日期/时间字符串public Date parse(String source)把字符串解析成日期对象 package API_2;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Time1 {public static void main(String[] args) throws ParseException {//目标掌握SimpletDateFormat//1.准备时间Date d new Date();System.out.println(d);long time d.getTime();System.out.println(time);//2.格式化日期对象和时间毫秒值SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss EEE a); //年 月 日 时 分 秒 星期几 上下午String t sdf.format(time);System.out.println(t);//3.SimpDateFormat解析字符串成为日期对象String dateStr 2023-04-17 17:23:00;//1.创建简单日期格式化对象,指定的时间格式必须与被解析的时间格式一模一样否则程序会出bugSimpleDateFormat sdf2 new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);Date d2 sdf2.parse(dateStr);System.out.println(d2);}
}[3]Calendar 抽象类代表的是系统此刻对应的日历通过它可以单独获取修改时间中的年月日时分秒等。 常用方法
方法名说明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 amount)为某个信息增加/减少指定的值 package API_2;import java.util.Calendar;
import java.util.Date;public class Time3 {public static void main(String[] args) {//目标掌握Calendar的使用和特点//1.得到系统此刻时间对应的日历对象Calendar now Calendar.getInstance();System.out.println(now);//2.获取日历中的某个信息int year now.get(Calendar.YEAR);System.out.println(year);//通过字段信息获取信息//3.拿到日历中记录的日期对象Date d now.getTime();System.out.println(d);//4。拿到时间对象的时间毫秒值long time now.getTimeInMillis();System.out.println(time);//5.修改日历中的某个信息now.set(Calendar.MONTH,4);//月份是从0开始System.out.println(now);//6.为某个信息增加或者减少多少now.add(Calendar.DAY_OF_YEAR,100);now.add(Calendar.DAY_OF_YEAR,-100);}
}2JDK8后新增时间API 传统时间API的不足 设计不合理使用不合理很多都淘汰了都是可变对象修改后会丢失最开始的时间信息线程不安全只能精确到毫秒 [1]代替Calendar LocalDate: 代表本地日期年月日星期 LocalTime:代表本地时间时分秒纳秒 LocalDateTime:代表本地日期时间年月日星期时分秒 方法名示例public static Xxxx now();获取系统当前时间对应的对象 LocaDate ld LocalDate.now(); LocalTime lt LocalTime.now(); LocalDateTime ldt LoacDateTime.now(); 常用方法
方法名说明public int getYear()获取年public int getMonthValue()获取月份1-12public int getDayofMonth()获取日public int getDayofYear()获取当前是一年中的第几天public DayOfWeek getDayOfWeek()获取星期几;ld.getDayoOfWeek().getValue()
方法名说明withYear,withMonth,withDayofMonth,withDayOfYear直接修改某个信息返回新日期对象piusYears,plusMonths,plusDays,plusWeeks把某个信息加多少返回新日期对象minusYears,minusMonths,minusDays把某个信息减多少返回新日期对象equals,isBeffore,isAfter判断两个日期对象是否相等在前还是在后 package API_2;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;public class Time4 {public static void main(String[] args) {//0.获取日期对象中的信息LocalDate ld LocalDate.now(); // 年 月 日LocalTime lt LocalTime.now(); // 时 分 秒 纳秒 不可变的 //基本用法与LocalDate是基本一致的LocalDateTime ldt LocalDateTime.now(); //上述的信息都有//1. 获取日期对象中的信息int year ld.getYear(); //年int month ld.getMonthValue();//月int day ld.getDayOfMonth(); //日int dayOfYear ld.getDayOfYear();//一年中的第几天int dayOfWeek ld.getDayOfWeek().getValue(); //星期几//2.直接修改某个信息 withYear withMonth withDayOfMonth withDayOfYear// 修改后可以返回一个新的日期对象LocalDate ld2 ld.withYear(2099);LocalDate ld3 ld.withMonth(12);//3.把某个信息加多少 plusYears plusMonths plusDays plusWeeks//修改后可以返回一个新的日期对象LocalDate ld4 ld.plusYears(2);LocalDate ld5 ld.plusMonths(3);//4.把某个信息减多少minusYears minusMonths minusDays minusWeeksLocalDate ld6 ld.minusYears(1);LocalDate ld7 ld.minusMonths(5);//5.获取指定日期的LocalDate对象 public static LocalDate of(int year,int month,int ady)LocalDate ld8 LocalDate.of(2023, 4, 17);//6.判断两个日期对象 是否相等 在前还是在后 equals isBefore isAfterSystem.out.println(ld6.equals(ld));System.out.println(ld6.isBefore(ld));System.out.println(ld6.isAfter(ld));//*7.可以把LocalDateTime转换成LocalDate和LocalTimeLocalDate ld9 ldt.toLocalDate();LocalTime lt1 ldt.toLocalTime();//也可以合并LocalDateTime ldt1 LocalDateTime.of(ld9,lt1);}
}ZoneId时区 ZonedDateTime 带时区的时间 package API_2;import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.TimeZone;public class Time5 {public static void main(String[] args) {//目标了解时区和带时区的时间//1.ZoneI的常见方法//public static ZoneId systemDefault(); 获取系统默认的时区ZoneId zoneId ZoneId.systemDefault();System.out.println(zoneId.getId());System.out.println(zoneId);System.out.println(zoneId.toString());//public static SetString getAvailableZoneIds; 获取java支持的全部时区System.out.println(ZoneId.getAvailableZoneIds());//public static ZoneId of(String zoneId):把某个时区id封装成ZoneId对象ZoneId zone zoneId.of(America/New_York);//2.ZoneDateTime 带时区的时间//public static ZoneDateTime now (ZoneId Zone);获取某个时区的ZonedDateTime对象ZonedDateTime now ZonedDateTime.now(zoneId);System.out.println(now);ZonedDateTime now1 ZonedDateTime.now(Clock.systemUTC());System.out.println(now1);//public static ZoneDateTime now();获取系统默认时区的ZonedDateTime对象ZonedDateTime now2 ZonedDateTime.now();System.out.println(now2);Calendar.getInstance(TimeZone.getTimeZone(zoneId));}
}ZoneId常用方法
方法名说明public static setString getAvailableZoneIds()获取java中支持的所有时区public static zoneld systemDefault()获取系统默认时区public static Zoeld of(String zoneld)获取一个指定时区 ZonedDateTime常用方法
方法名说明public static ZonedDateTime获取当前时区的ZonedateTime对象public static ZoneddDateTime now(Zoneld zone)获取指定时区的ZonedDateTime对象getYear getMonthValue获取年月日时分秒纳秒等public ZonedDateTime withXxx(时间)修改时间系列的方法public ZoneDateTime minusXxx(时间)减少时间系列的方法public ZoneDateTime plusXxx(时间)增加时间系列的方法 [2]代替Date Instant时间线上的某个时刻/时间戳 方法名说明public static Instant now()获取当前时间的Instant对象标准时间public long getEpochSecond() 获取从1970-01-01T00:00开始记录的秒数 public int getNano()从时间线开始获取从第二个的纳秒数plusMilis plusSconds plsuNanos判断系列的方法minusMillis minnsSconds minusNanos减少时间系列的方法equals isBefore isAfter增加时间系列的方法 package API_2;import java.time.Instant;public class Text6 {public static void main(String[] args) {//1.创建Instant的对象 获取此刻的时间信息Instant now Instant.now();//2.获取总秒数long second now.getEpochSecond();System.out.println(second);//3.不到1秒的纳秒数int nano now.getNano();System.out.println(nano);//4.加法功能Instant i now.plusNanos(111);Instant j now.minusNanos(11);//Instant对象的作用做代码的性能分析或者记录用户操作的时间点Instant now1 Instant.now();//代码执行Instant now2 Instant.now();}
}[3]代替SimpleDateFormat DateTimeFormatter:格式化器用于时间的格式化解析线程安全 方法名说明public static DateTimeFormatter ofpattter(时间格式)获取格式器对象public String fornat(时间对象)格式化时间 LocaDateTime提供的格式化解析时间的方法 方法名说明public String format(DateTimeFormatter formatter)格式化时间public static LocalDateTime parse(CharSequence text,DateTimeFormatter formatter)解析时间 [4]其他补充 Period :计算日期间隔年月日用于计算两个LocalDate对象的相差年数月数天数 Duration:计算时间间隔时分秒纳秒支持LocalTime LocalDateTime Instant Period常用方法 方法名 说明Public static Period between(LocalDate start,LocalDate end)传入2个日期对象得到Period对象public int getYears()计算隔几年并返回public int getMonths()计算隔几个月并返回public int getDays()计算隔多少天并返回 package API_2;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;public class Time6 {public static void main(String[] args) {//目标掌握Period的用法LocalDate start LocalDate.of(2023,4,17);LocalDate end LocalDate.of(2024,8,6);//1.创建period对象 封装两个日期对象Period period Period.between(start,end);//2.通过period对象获取两个日期对象相差的信息System.out.println(period.getYears());System.out.println(period.getMonths());System.out.println(period.getDays());}
}Duration常用方法
方法名说明public static Duration between(start,end)传入2个时间对象得到Duration对象public long toDays()计算隔多少天并返回public long toHours()计算隔多少小时并返回public long toMinutes()计算隔多少分并返回public long toSeconds()计算隔多少秒并返回public long toMillis()计算隔多少毫秒并返回public long toNanos()计算隔多少纳秒并返回 package API_2;import java.time.Duration;
import java.time.LocalDateTime;public class Time7 {public static void main(String[] args) {//1.得到Duration对象LocalDateTime start LocalDateTime.of(2024,9,22,11,11,11,11);LocalDateTime end LocalDateTime.of(2024,9,22,15,10,0,1);Duration duration Duration.between(start,end);//2.获取两个时间对象间隔的信息System.out.println(duration.toDays());System.out.println(duration.toHours());System.out.println(duration.toMillis()); //毫秒}
}5.Arrays Arrays 用来操作数组的一个工具类 常用方法
方法名说明public static String toString(类型[ ] arr)返回数组的内容public static int [] copyOfRange(类型[] arr,起始索引结束索引)拷贝数组指定范围public static opyOf(类型[] arr, int newLength)拷贝数组public static setAll(double [] array,intToDoubleFunction generator )把数组的原数据改为新数据public static void sort(类型 [] arr)对数组进行排序默认是升序 package API_2;import java.util.Arrays;
import java.util.function.IntToDoubleFunction;public class ArraysText {public static void main(String[] args) {//public static String toString(类型[ ] arr) 返回数组的内容int[] arr {1,2,3,4,5};String rs Arrays.toString(arr);System.out.println(rs);//public static int [] copyOfRange(类型[] arr,起始索引结束索引) 拷贝数组指定范围 包前不包后int[] arr1 Arrays.copyOfRange(arr,0,2);System.out.println(Arrays.toString(arr1));//public static copyOf(类型[] arr, int newLength) 拷贝数组// (可以指定新数组的长度 如果新数组长度小于原数组长度 则会截取)int[] arr2 Arrays.copyOf(arr,10);System.out.println(Arrays.toString(arr2));//public static setAll(double [] array,int ToDoubleFunction generator ) 把数组的原数据都改为新数据double[] score {100.0,80.0,46.0,56.0,85.5};Arrays.setAll(score, new IntToDoubleFunction() {Overridepublic double applyAsDouble(int value) {return score[value] * 0.8; //浮点数精度错误}});System.out.println(Arrays.toString(score));//public static void sort(类型 [] arr) 对数组进行排序默认是升序int[] arr3 {10,9,8,7,6,5,4,3,1,2};System.out.println(Arrays.toString(arr3));Arrays.sort(arr3);System.out.println(Arrays.toString(arr3));}
}数组中存储的是对象怎么进行排序 方式一让对象的类实现Comparable比较规则接口然后重写compareTo方法自己制定比较规则。 方式二使用sort方法创建Comparatorr比较器的匿名内部类对象然后自己制定比较规则。 package API_2;public class Student implements ComparableStudent{private String name;private double high;private int age;public Student() {}public Student(String name, double high, int age) {this.name name;this.high high;this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}public double getHigh() {return high;}public void setHigh(double high) {this.high high;}public int getAge() {return age;}public void setAge(int age) {this.age age;}//指定比较规则Overridepublic int compareTo(Student o) {//约定 1 左边大于右边 返回正整数//预定 2 小于 负整数//约定 3 等于 0//按照年龄升序排序//if(this.age o.age){return 1;}//else if (this.age o.age) {return -1;}// return 0;return this.age - o.age;}public String toString(Student o){return name o.getName()High o.getHigh()age o.getAge();}
}package API_2;import java.util.Arrays;
import java.util.Comparator;public class ArraysText1 {public static void main(String[] args) {//目标掌握数组中元素的排序Student[] students new Student[4];students[0] new Student(陈平安,175.0,19);students[1] new Student(宁姚,170,20);students[2] new Student(刘羡阳,182,20);students[3] new Student(郑居中,180,40);//1.对数组进行排序// Arrays.sort(students);// System.out.println(Arrays.toString(students));//2.staticT void sort(T[] arr,Comparator ? super T c)//排序数组//比较规则Arrays.sort(students, new ComparatorStudent() {Overridepublic int compare(Student o1, Student o2) {//制定比较规则//约定 1 左边大于右边 返回正整数//预定 2 小于 负整数//约定 3 等于 0//按照年龄升序排序/* if(o1.getHigh() o2.getHigh()){return 1;}else if (o1.getHigh() o2.getHigh()) {return -1;}return 0;*/return Double.compare(o1.getHigh(),o2.getHigh());}});System.out.println(Arrays.toString(students));}
}6.*Lambda 表达式 Lambda表达式是JDK8后新增的一种语法形式作用是简化匿名内部类的代码写法 注意只能简化函数式接口的匿名内部类有且只有一个抽象方法方法的接口 package API_2;public class Lambda {public static void main(String[] args) {//目标认识Lambda 表达式Animal a new Animal(){Overridepublic void run(){System.out.println(跑动);}};a.run();//Animal b ()-{System.out.println(跑动);} b.run();// 报错 简化只能简化函数式接口的匿名内部类接口 只有一个抽象方法的Swimming s ()-{System.out.println(开始游泳);};}
}
interface Swimming{void swim();
}abstract class Animal{public abstract void run();
}简化规则 参数类型可以省略不写。如果只有一个参数参数类型可以省略。同时()也可以省略.如果Lambda的表达式的方法体代码只有一行代码,可以省略大括号不写同时要省略分号! 此时如果这行代码是return语句也必须去掉return不写。 Arrays.setAll(score, new IntToDoubleFunction() {Overridepublic double applyAsDouble(int value) {return score[value] * 0.8; //浮点数精度错误}});//简化到一行Arrays.setAll(score,value - score[value]*0.8); 7.方法引用略
静态方法的引用
实例方法的引用
特定类型方法的引用
构造器引用