首页 > 编程语言 >Java学习笔记——第十三天

Java学习笔记——第十三天

时间:2024-03-12 13:59:08浏览次数:22  
标签:Java int 笔记 对象 static 时间 方法 public 第十三天

常用API(二)

Math

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

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) 获取两个int值中的较大值
public static int min(int a,int b) 获取两个int值中的较小值
public static double pow(double a,double b) 返回a的b次幂的值
public static double random() 返回值为double的随机值,范围[0.0,1.0)

System

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

System的常用方法

方法名 说明
public static void exit(int status) 终止当前运行的Java虚拟机,参数用作状态代码,非零状态代码表示异常终止。
public static long currentTimeMillis() 返回当前系统的时间毫秒值形式,时间毫秒值指的是从1970-1-1 00:00:00开始走到此刻的总的毫秒值

Runtime

Runtime代表程序所在的运行环境,是一个单例类。

Runtime的常用方法

方法名 说明
public static Runtime getRuntime() 返回与当前Java应用程序关联的运行时对象
public void exit(int status) 终止当前运行的虚拟机,参数用作状态代码,非零状态代码表示异常终止
public int availableProcessors() 返回Java虚拟机可用的处理器数
public long totalMemory() 返回Java虚拟机中的内存总量
public long freeMemory() 返回Java虚拟机中的可用内存
public Process exec(String command) 启动某个程序,并返回代表该程序的对象

BigDecimal

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

BigDecimal的常用构造器

构造器 说明
public BigDecimal(double val) 注意:不推荐使用这个 将 double转换为 BigDecimal
public BigDecimal(String val) 把String转成BigDecimal

BigDecimal的常用方法

方法名 说明
public static BigDecimal valueOf(double val) 推荐使用这个创建BigDecimal对象 转换一个 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

JDK8之前传统的日期、时间

Date

Date代表的是系统的日期和时间。

Date的常用构造器

构造器 说明
public Date() 创建一个Date对象,代表的是系统当前此刻日期时间。
public Date(long time) 把时间毫秒值转换成Date日期对象。

Date的常用方法

方法名 说明
public long getTime() 返回从1970年1月1日 00:00:00走到此刻的总的毫秒数
public void setTime(long time) 设置日期对象的时间为参数时间毫秒值对应的时间

SimpleDateFormat

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

SimpleDateFormat的常用构造器

构造器 说明
public SimpleDateFormat(String pattern) 创建简单日期格式化对象,并封装时间的格式

SimpleDateFormat格式化时间的方法

格式化时间的方法 说明
public final String format(Date date) 将日期格式化成日期/时间字符串
public final String format(Object time) 将时间毫秒值式化成日期/时间字符串

时间格式的常用符号

符号 意思
y
M
d
H
m
s
E 星期
a 上午/下午

SimpleDateFormat解析字符串时间称为日期对象

解析方法 说明
public Date parse(String source) 把字符串时间解析成日期对象
  • 创建SimpleDateFormat对象时指定的时间格式必须与被解析的时间格式一模一样,否则程序会出错。

Calendar

Calendar代表的是系统此刻时间对应的日历,通过它可以方便地单独获取、修改时间中的年、月、日、时、分、秒等。

获取Calendar对象的方法

Calendar 对象名 = Calendar.getInstance();

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) 为某个信息增加/减少指定的值
public final void setTime(Date date) 使用给定的Date对象设置此日历的时间
  • Calendar是可变对象,一旦修改后其对象本身表示的时间将产生变化。

  • Calendar的月份是从0开始计算的。

  • 可以通过System.out.println(Calendar对象);来查看对应的field,并通过Calendar.YEAR等来使用。

JDK8开始新增的日期、时间

为什么要学JDK8新增的时间

JDK8之前传统的时间API JDK8之后新增的时间API
设计不合理,使用不方便,很多都被淘汰了 设计更合理,功能丰富,使用更方便。
都是可变对象,修改后会丢失最开始的时间信息 都是不可变对象,修改后会返回新的时间对象,不会丢失最开始的时间
线程不安全 线程安全
只能精确到毫秒 能精确到毫秒、纳秒

JDK8新增的时间API(都是java.time下的包)

代替Calendar 代替Date 代替SimpleDateFormat 其他补充
LocalDate:年、月、日
LocalTime:时、分、秒
LocalDateTime:年、月、日、时、分、秒
ZoneId:时区
ZonedDateTime:带时区的时间
Instant:时间戳/时间线 DateTimeFormatter::用于时间的格式化和解析 Period:时间间隔(年,月,日)
Duration:时间间隔(时、分、秒,纳秒)

LocalDate、LocalTime、LocalDateTime

  • LocalDate:代表本地日期(年、月、日、星期)。
  • LocalTime:代表本地时间(时、分、秒、纳秒)。
  • LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)。

获取对象的方案

方法名 示例
public static Xxxx now(): 获取系统当前时间对应的该对象 LocaDate ld = LocalDate.now();
LocalTime lt = LocalTime.now();
LocalDateTime ldt = LocalDateTime.now();
public static Xxxx of(…): 获取指定时间的对象 LocalDate localDate1 = LocalDate.of(2099 , 11,11);
LocalTime localTime1 = LocalTime.of(9, 8, 59);
LocalDateTime localDateTime1 = LocalDateTime.of(2025, 11, 16, 14, 30, 01);

LocalDate的常用API(都是处理年、月、日、星期相关的)

方法名 说明
public int getYear() 获取年
public int getMonthValue() 获取月份(1-12)
public int getDayOfMonth() 获取日
public int getDayOfYear() 获取当前是一年中的第几天
Public DayOfWeek getDayOfWeek() 获取星期几:ld.getDayOfWeek().getValue();
withYear、withMonth、withDayOfMonth、withDayOfYear 直接修改某个信息,返回新日期对象
plusYears、plusMonths、plusDays、plusWeeks 把某个信息加多少,返回新日期对象
minusYears、minusMonths、minusDays,minusWeeks 把某个信息减多少,返回新日期对象
equals、isBefore、isAfter 判断两个日期对象,是否相等,在前还是在后

LocalTime的常用API(都是处理时、分、秒、纳秒相关的)

方法名 说明
public int getHour() 获取小时
public int getMinute() 获取分
public int getSecond() 获取秒
public int getNano() 获取纳秒
withHour、withMinute、withSecond、withNano 修改时间,返回新时间对象
plusHours、plusMinutes、plusSeconds、plusNanos 把某个信息加多少,返回新时间对象
minusHours、minusMinutes、minusSeconds、minusNanos 把某个信息减多少,返回新时间对象
equals、isBefore、isAfter 判断两个时间对象,是否相等,在前还是在后

LocalDateTime的常用API(可以处理年、月、日、星期、时、分、秒、纳秒相关的)

方法名 说明
getYear、getMonthValue、getDayOfMonth、getDayOfYear
getDayOfWeek、getHour、getMinute、getSecond、getNano
获取年月日、时分秒、纳秒等
withYear、withMonth、withDayOfMonth、withDayOfYear
withHour、withMinute、withSecond、withNano
修改某个信息,返回新日期时间对象
plusYears、plusMonths、plusDays、plusWeeks
plusHours、plusMinutes、plusSeconds、plusNanos
把某个信息加多少,返回新日期时间对象
minusYears、minusMonths、minusDays、minusWeeks
minusHours、minusMinutes、minusSeconds、minusNanos
把某个信息减多少,返回新日期时间对象
equals isBefore isAfter 判断两个时间对象,是否相等,在前还是在后

LocalDateTime的转换成LocalDate、LocalTime

方法名 说明
public LocalDate toLocalDate() 转换成一个LocalDate对象
public LocalTime toLocalTime() 转换成一个LocalTime对象

ZoneId、ZoneDateTime

什么是时区

由于世界各个国家与地区的经度不同,各地区的时间也有所不同,因此会划分为不同的时区。一般用洲名/城市名或国家名/城市名命名,如:Asia/Shanghai、Asia/Chongqing或America/New_York。

ZoneId

ZoneId代表时区id。

ZoneId的常用方法
方法名 说明
public static Set<String> getAvailableZoneIds() 获取Java中支持的所有时区
public static ZoneId systemDefault() 获取系统默认时区
public static ZoneId of(String zoneId) 获取一个指定时区

ZonedDateTime

ZonedDateTime代表带时区时间。

ZonedDateTime的常用方法
方法名 说明
public static ZonedDateTime now() 获取当前时区的ZonedDateTime对象
public static ZonedDateTime now(ZoneId zone) 获取指定时区的ZonedDateTime对象
getYear、getMonthValue、getDayOfMonth、getDayOfYear
getDayOfWeek、getHour、getMinute、getSecond、getNano
获取年月日、时分秒、纳秒等
public ZonedDateTime withXxx(时间) 修改时间系列的方法
public ZonedDateTime minusXxx(时间) 减少时间系列的方法
public ZonedDateTime plusXxx(时间) 增加时间系列的方法

获取世界标准时间:ZonedDateTime now = ZonedDateTime.now(Clock.systemUTC());

Instant

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

作用

可以用来记录代码的执行时间,或用于记录用户操作某个事件的时间点。

Instant的常用方法

方法名 说明
public static Instant now() 获取当前时间的Instant对象(标准时间)
public long getEpochSecond() 获取从1970-01-01T00:00:00开始记录的秒数。
public int getNano() 从时间线开始,获取从第二个开始的纳秒数
plusMillis、plusSeconds、plusNanos 增加时间系列的方法
minusMillis、minusSeconds、minusNanos 减少时间系列的方法
equals、isBefore、isAfter 判断系列的方法

DateTimeFormatter

DateTimeFormatter是线程安全的。

DateTimeFormatter的常用方法

方法名 说明
public static DateTimeFormatter ofPattern(时间格式) 获取格式化器对象
public String format(时间对象) 格式化时间

LocalDateTime提供的格式化、解析时间的方法:

方法名 说明
public String format(DateTimeFormatter formatter) 格式化时间
public static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter) 解析时间

解析时间一般使用返回LocalDateTime的parse()。

Period

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

Perion的常用方法

方法名 说明
public static Period between(LocalDate start, LocalDate end) 传入两个日期对象,得到Period对象
public int getYears() 计算隔几年,并返回
public int getMonths() 计算隔几个月,年返回
public int getDays() 计算隔几天,并返回

Duration

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

Duration的常用方法

方法名 说明
public static Duration between(开始时间对象, 截止时间对象) 传入两个时间对象,得到Duration对象
public long toDays() 计算隔多少天,并返回
public long toHours() 计算隔多少小时,并返回
public long toMinutes() 计算隔多少分钟,并返回
public long toSeconds() 计算隔多少秒,并返回
public long toMillis() 计算隔多少毫秒,并返回
public long toNanos() 计算隔多少纳秒,并返回

Arrays

Arrays是用来操作数组的一个工具类。

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) 对数组进行排序(默认是升序排序)

如果数组中存储的是对象,如何排序

  • 方式一:让该对象的类实现Comparable(比较规则)接口,然后重写compareTo方法,自己来制定比较规则。
  • 方式二:使用下面这个sort方法,创建Comparator比较器接口的匿名内部类对象,然后自己制定比较规则。
public static <T> void sort(T[] arr, Comparator<? super T> c) 
自定义排序规则时,需要遵循的官方约定
  • 如果认为左边对象大于右边对象 ,应该返回正整数。
  • 如果认为左边对象小于右边对象 ,应该返回负整数。
  • 如果认为左边对象等于右边对象 ,应该返回整数0。
注意:
  • 如果类本身有实现Comparable接口,sort方法同时也重写了Comparator比较器,则默认使用sort的比较器排序。
  • 比较值为double类型时,可以直接调用Double.compare()方法。

JDK8新特性:Lambda表达式

Lambda表达式是JDK 8开始新增的一种语法形式。

作用

简化匿名内部类的代码写法。

格式

(被重写方法的形参列表) -> { 被重写方法的方法体代码 }

几点注意

  • Lambda表达式只能简化函数式接口的匿名内部类。
  • 有且仅有一个抽象方法的接口叫函数式接口。
  • 大部分函数式接口,上面都可能会有一个@FunctionalInterface的注解,有该注解的接口就必定是函数式接口。

Lambda表达式的省略规则

  • 参数类型可以省略不写。
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略。
  • 如果Lambda表达式中的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号!此时,如果这行代码是return语句,也必须去掉return不写。

JDK8新特性:方法引用

方法引用用于进一步简化Lambda表达式,其标志性符号是“ :: ”。

静态方法的引用

类名::静态方法。

使用场景

如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。

实例方法的引用

对象名::实例方法

使用场景

如果某个Lambda表达式里只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用。

特定类型方法的应用

类型::方法

使用场景

如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用。

构造器引用

类名::new

使用场景

如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用。

标签:Java,int,笔记,对象,static,时间,方法,public,第十三天
From: https://www.cnblogs.com/zgg1h/p/18068130

相关文章

  • scikit-opt学习笔记
    1.差分约束算法'''minf(x1,x2,x3)=x1^2+x2^2+x3^2s.t.x1*x2>=1x1*x2<=5x2+x3=10<=x1,x2,x3<=5'''defobj_func(p):x1,x2,x3=preturnx1**2+x2**2+x3**2c......
  • 深入浅出Java多线程(十一):AQS
    引言大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十一篇内容:AQS(AbstractQueuedSynchronizer)。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!在现代多核CPU环境中,多线程编程已成为提升系统性能和并发处理能力的关键手段。然而,当多个线程共享同一资源......
  • JavaScript 高阶技巧
    0x01深浅拷贝开发中经常需要拷贝(复制)一个对象,如果直接赋值,则对拷贝对象的修改会影响到源对象consto1={a:1,b:2}consto2=o1console.log(o2)//{a:1,b:2}o2.a=3console.log(o1)//{a:3,b:2}console.log(o2)//{a:3,b:2}原因在于,直......
  • A接口实现类中a方法调用了c方法,B接口的实现类b方法也需调用A接口的实现类中的c方法,在j
    1.情景展示在实际开发过程中,往往会存在这样的情况:在A接口的实现类a方法实现了某个功能,现在B接口的实现类b方法也需要实现此功能,两者大致相同。为了提高代码的复用性,我们可以把A接口的实现类a方法的具体实现过程进行封装成c方法,供A、B两个接口的实现类调用。2.具体分析第一......
  • 跨端轻量JavaScript引擎的实现与探索
    一、JavaScript1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史:时间版本说明1997年7月ES1.0发布当年7月,ECMA262标准出台1998年6月ES2.0发布该版本修改完全符合ISO......
  • Vue学习笔记46--scoped样式 + less
    scoped样式<!--组件的默认样式css写法--><!--<stylescoped>.demo{background-color:cadetblue;}</style>--><stylelang="less"scoped>.demo{background-color:cadetblue;.myfontsize{font-size:40px;}......
  • Java集合面试高频问题---集合框架体系(3)
    HashMap源码分析HashMap常见属性扩容默认为数组容量加载印子即160.75put方法put添加数据流程图每次添加数据之后都判断是否需要扩容......
  • 熟悉又陌生的JavaWeb 第5天
    传送门AJAX入门建议引入JQuery的封装来使用AJAX,现在基本没有需要原生创建AJAX请求的场景,JQuery封装了对不同浏览器的处理,无需自己判断<scriptsrc="https://code.jquery.com/jquery-3.6.0.min.js"></script>$.ajax({url:'your_url_here',//替换成你要发送请求的UR......
  • Java如何在树结构上做模糊查询
    开发企业后台管理应用时,经常会遇到一种场景:在树结构上做模糊查询。比如:公司组织架构树、分类树等,通常是在页面上的文本框中输入一个关键字,例如"数据",然后在公司组织架构树中过滤出名字包含数据的部门,且保持树结构不变。公司的一级部门、二级部门、三级部门等等,名字都有可能包含"......
  • 数据结构——线段树 学习笔记
    数据结构——线段树学习笔记classseg_t{private:structemm{intl,r;structv;};vector<emm>a;voidpush_up(intk){}voidaction(intk,intv){}voidpush_down(intk){}voidbuild(vector<any>q,intk,intl,intr){a[k].l=......