与运行环境交互(下)

与运行环境交互(下)

Math类

  • Java提供了基本的+、-、*、/、%等基本算数运算的运算符、但对于更复杂的数学运算,例如三角函数、对数运算、指数运算等则无能为力。Java提供了Math工具类来完成这些复杂的运算
  • Math类是一个工具类,它的构造器被定义成private,因此无法创建Math类的对象;Math类中所有方法都是类方法,可以直接通过类名来调用它们。

Random与ThreadLocalRandom

  • Random类专门用于生成一个伪随机数,它又两个构造器:一个构造器使用默认的种子,另一个构造器需要程序员显式传入一个long型整形的种子。
  • 相对于Math的random()方法而言,Random类的提供了更多方法生成各种伪随机数,它不仅可以生成浮点类型的伪随机数,也可以生成整数类型的伪随机数,还可以指定生成随机数的范围
  • ThreadLocalRandom是Java 7新增的,它可以在多线程环境下代替Random减少多线程资源竞争,从而提供更好的线程安全

BigDecimal类

  • float、double两种基本浮点类型的浮点数容易引起精度丢失。
  • 程序中需要对double浮点数进行加、减、乘、除基本运算,则需要先将double类型数值包装成BigDecial对象,调用BigDecimal对象的方法执行运算后再将结果转换成double型变量

Date类

  • Java提供了Date类来处理日期、时间
  • Date类从JDK 1.0起就开始存在了。但正因为它历史悠久,所以它的大部分构造器、方法都已经过时,不再推荐使用了

Calendar类

  • 因为Date类的设计上存在一些缺陷,Java提供了Calendar类来更好地处理日期和时间。Calendar是一个抽象类,它用于表示日历
  • Calendar本身是一个抽象类,它是所有日历类的模板,并提供了一些所有日历通用的方法,但它本身不能直接实例化。程序只能创建Calendar子类的实例,Java本身提供了一个GregorianCalendar类,一个代表GergorianCalendar的子类,它代表了我们通常所说的公历。
  • 开发者可以开发自己的Calendar子类

Java 8新增的日期、时间包

  • Java 8专门新增了一个Java.time包,该包下包含了如下常用的类:
  • Clock:该类用于获取指定时区的当前日期、时间。该类可取代System类的currentTimeMillis()方法,而且该类提供了更多的方法来获取当前日期、时间的方法。该类提供了大量静态方法类获取Clock对象
  • Instant:代表一个具体的时刻,它可以精确到纳秒。该类提供了静态的now()方法来获取当前时刻,也可以提供了系类minusXxx()方法在当前时刻基础减去一段时间,也提供了plusXxx()方法在当前时刻基础上加上一段时间
  • LocalDate: 代表日期,比如2020-01-14
  • LocalTime: 代表时刻,比如12:59:59
  • LocalDateTime: 代表具体时间 2020-01-12 12:22:26
  • MonthDay:该类仅代表月日,比如:-04-12
  • Year:该类仅代表年
  • YearMonth:该类仅代表年月
  • DayOfWeek:这是一个枚举类,定义了周日到周六的枚举值
  • Month:这也是一个枚举值,定义了一月到十二月的枚举值

String类的正则表达式支持

  • boolean matches(String regex):判断该字符串是否匹配指定正则表达式
  • String repaceAll(String regex,String replacement):放回该字符串中所有匹配正则表达式的子串替换成replacement后的新字符串
  • String replaceFirst(String regex,String repalcement):返回该字符串中第一个匹配正则表达式的替换成replacement后的字符串
  • String[] split(String regex):根据给定正则表达式的拆分该字符串后得到的字符串数组

创建正则表达式

  • 表达式就是一个字符串模板,可以匹配一批字符串,所以创建正则表达式就是创建一个特殊字符串

正则表达式所支持的合法字符

  • x字符:x(x可代表任何合法的字符)\0mnn:8进制数0mnn所表示的字符
  • \xhh:16进制0xhh所表示的字符
  • \uhhhh:16进制值0xhhhh所表示的UNICODE字符
  • \t:制表符
  • \n:新行(换行)符(‘\u000A’)
  • \r:回车符(‘\u000A’)
  • \f:换页符(‘\u000c’)
  • \a:报警(bell)符(‘\u0007’)
  • \e:Escape符(‘\u001B’)
  • \cx:对应的控制符。例如,\cM:匹配Ctrl-M。x值必须为A-Z或a-z之一

使用正则表达式

  • 一旦在程序中定义了正则表达式之后,就可以使用Pattern和Matcher来使用正则表达式
  • Pattern对象是正则表达式的编译后在内存中的表示形式,因此,正则表达式必须先被编译为Pattern对象,然后再利用该Pattern对象 创建对应的Matcher对象。执行匹配所涉及的状态保留再Matcher对象中,多个Matcher对象可共享同一个Pattern对象

方法处理和变量处理

  • 通过VarHandle和MethodHandle类,允许Java像动态语言逸一样引用变量、引用方法,并调用它们
  • MethodHandles.Lookup对象可以根据类、方法名、方法类型来获取MethodHandle对象,这意味着通过MethodHandle可以让Java动态调用某个方法。
  • VarHandle主要用于动态操作数组的元素或对象的成员变量。VarHandle与MethodHandle非常相似,它也需要通过MethodHandles来获取实例,接下来调用VarHandle的方法即可动态操作指定数组的元素或指定对象的成员变量。
  • VarHandle与MethodHandle一样,它也是一种动态滴哦也能够机制,当程序通过MethodHandles.Lookup来获取成员变量时,可根据字符串名称来获取成员变量,这个字符串名称同样可以是同台改变的,因此非常灵活。

处理带占位符的消息

  • 此时需要使用MessageFormat类,该类包含一个有用的静态方法:
    —format(String pattern,Object…values):返回后面的多个参数值填充前面的pattern的字符串,其中pattern字符串不是正则表达式,而是一个带占位符的字符串

使用NumberFormat格式化

  • NumberFormat和DateFormat都包含了format和parse方法,其中format用于将数字、日期格式化成字符串,parse用于将字符串解析成数值、日期

  • NumberFormat也是一个抽象基类,所以无法通过它的构造器来创建NumberFormat对象,它提供了如下几个工厂方法来得到

    NumberFormat对象:

    —getCurrenyInstance:返回默认Locale的货币格式器。也可以再调用该方法传入指定Loale,则获取指定Locale的货币格式器

    —getIntegerInstance:返回默认Locale的整数各时期。也可以再调用该方法传入指定的Locale,则获取指定的Locale的整数格式器

    —getNumberInstance:返回默认Locale的通用数值各时期。也可以在调用该方法传入指定Locale,则获取指定Locale的通用数值格式器

    —getPercentInstance:返回默认Locale的百分数格式器。也可以在调用该方法传入指定Locale,则获取指定Loale的百分数格式器

使用DateFormat

  • 与NumberFormat相似的是:DateFormat也是一个抽象类,它也提供了几个工厂方法用于获取DateFormat对象:
  • getDateInstance:返回一个日期格式器,它格式化后的字符串只有日期,没有时间。该方法可以传入多个参数,用于指定日期样式和Locale等参数。如果不指定这些参数,则使用默认的参数
  • getTimeInstance:返回一个时间格式器,它格式化后的字符串只有时间,没有日期。该方法可以传入多个参数,用于指定日期样式、时间样式和Locale等参数。如果不指定这些参数,则使用默认参数

使用SimpleDateFormat

  • SimpleDateFormat是DateFormat的子类,正如它的名字所暗示的,它是”简单“的日期格式器。很多读者对”简单“的日期格式器不屑一顾,实际上SimpleDateFormat比DateFormat更简单、功能更强大。
  • SimpleDateFormat可以非常灵活地输格式化Date,可可以非常接卸各种格式的日期字符串。创建SimpleDateFormat对象时需要传入一个pattern字符串,这个pattern不是正则表达式,而是一个日期模板字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值