常用类

             **常用类**
  **系统相关类**
  System类
System类代表当前Java程序的运行平台。java.lang.System类对我们来说并不陌生,在前面的章节中我们经常使用System.out语句来完成输出工作。System类是一个final类,该类的所有属性和方法都是静态的。System类的属性in、out和err分别对应标准输入、标准输出和错误输出流。System类常用于纪录程序执行的时间、复制数组、确定当前的系统属性和获取系统环境变量等工作。

这里写图片描述

获取系统相关属性,可以帮助我们编写跨平台的代码。例如,假如我们要读写C盘jdk目录下的文件"1.txt",由于在Windows、Unix和Linux平台下,文件和路径分隔符有所不同,如果我们写死成"c:\jdk\1.txt",在Windows平台下运行正常,换到其它平台上就有可能运行失败。如果采用系统属性System.getProperty("file.separator")、System.getProperty("Path.separator")获取文件和路径分隔符就要安全得多。

        Runtime类
Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。应用程序不能创建自己的Runtime实例,但是可以通过Runtime类的静态方法getRuntime()获取与之关联的Runtime对象。
获取Runtime对象后,我们就可以使用Runtime类相关的方法,访问JVM相关信息,包括处理器数量、内存信息等等。
Runtime.getRuntime().maxMemory()  得到最大的JVM虚拟机内存(物理内存的1/4)
Runtime.getRuntime().freeMemory()  得到JVM虚拟机的空闲内存
Runtime.getRuntime().totalMemory()  当前程序正在使用的内存量
Runtime.getRuntime().availableProcessors()  得到处理器的数量
Runtime.getRuntime().exec()  执行一些可执行文件


                **字符串相关类**
        String类
String类包含了一个不可变的字符串。一旦一个String对象被创建,包含在这个对象中的内容就是不可改变的,直至这个对象被销毁。

在这里插入图片描述

       StringBuffer类
StringBuffer对象则代表一个内容可变的字符串。当一个StringBuffer被创建以后,通过StringBuffer提供的方法可以改变该字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
StringBuffer和String虽然都可以用于代表字符串,但是二者的内部实现方式有所不同。StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String。所以,在实际使用中,如果经常需要对字符串进行修改,使用StringBuffer性能要更好一些。
使用StringBuffer创建字符串对象,不能通过直接用字符串常量给StringBuffer类型的引用赋值的方式创建,只能通过使用StringBuffer的构造器创建。

在这里插入图片描述

             StringBuilder类
JDK5中新增了一个StringBuilder对象,它也代表字符串对象。StringBuilder和StringBuffer在很多方面是相同的,不同的地方是StringBuffer方法是线程安全的,而StringBuilder则不是。所以,StringBuilder比StringBuffer性能略高。在不考虑线程安全的情况下,如果需要创建一个内容可变的字符串对象,应该优先考虑使用StringBuilder(关于线程安全,我们在后续《多线程》一章中会详细讲解)。
String、StringBuffer和StringBuilder对字符串操作提供了众多的方法,因篇幅所限,我们这里不一一列出。但是,字符串操作在实际项目开发中是很常见的,因此请在实际开发中参考JDK API,逐步熟悉用这几个类的方法来操作字符串。


                   **日期相关类**
Date类表示特定的瞬间,精确到毫秒。该类提供了很多方法,但是很多已经过时,不推荐使用。表12-5列出了Date类中没有过时的方法。 

在这里插入图片描述

             DateFormat抽象类与SimpleDateFormat类
java.text.DateFormat是一个抽象类,我们可以使用它用预定义的本地化方式格式化和解析时间日期。因为DateFormat是一个抽象类,所以不能直接实例化,但是它提供了大量的静态方法返回一个具体的子类,让我们可以用不同的方法格式化日期时间。
DateFormat类的getDateInstance()方法返回一个将日期按照默认地区或者特定地区的方式格式化的DateFormat对象,此外,还可以使用DateFormat的常量FULL、LONG、SHORT或DEFAULT来指定格式化的风格。与此类似,DateFormat类的getTimeInstance()方法返回一个DateFormat对象格式化时间,getDateTimeInstance()方法返回一个DateFormat对象格式化日期和时间。这些方法都带有可选的格式化风格的常量以及代表地区的Locale对象的常量。最后,getInstance()方法返回一个默认的DateFormat对象,将时间和日期都按照SHORT样式格式化。
得到了DateFormat类的具体子类后,我们就可以调用具体子类的Format()方法,按照预定义的方式格式化日期时间。

在这里插入图片描述

           Calendar抽象类与GregorianCalendar类
在JDK第一次发布时,Date类是唯一的代表日期时间的类。但是由于Date类在编写的时候并没有考虑到各个国家的实际情况,在国际化方面考虑不够周到,所以从JDK1.1版本开始,Java中推荐使用Calendar类来处理日期时间,并将很多Date类的方法设置为已经过时。
Calendar类是一个抽象类,它的功能比Date类要强大很多,实现方式也比Date类要复杂。Calendar类提供了很多方法,来完成日期时间之间的相互操作功能。

在这里插入图片描述

因为Calendar类是一个抽象类,所以不能使用构造器来实例化一个Calendar对象.但是Calendar类提供了静态方法getInstance()来获取Calendar类的具体子类的对象,而它唯一一个具体子类是GregorianCalendar类,所以它的getInstance()方法返回的就是一个GregorianCalendar对象。GregorianCalendar类用来代表世界上大多数国家和地区所采用的公历日历。
GregorianCalendar类的无参数构造方法用来描述今天,用年、月、日、小时、分、秒来作为构造方法的参数时用来描述特定的一天。


                **数学运算相关类**
      Math类
Math类是一个数学工具类,在Java语言中,常用的数学常数和数学方法都在该类内部,而且无论是常数还是方法都是static类型的,可以直接通过"Math.方法名()"进行调用,方便程序员进行实际的使用。       
      随机数
在Java中,产生随机数的方法有三种:
通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字,我们可以把这个数字当作随机数。
通过Math类的静态方法random()返回一个0到1之间的double值。我们可以将这个值乘以一定的数,比如100,那么它就是一个100以内的随机数。
通过Random类来产生一个随机数。 
在这三种方法中,Random类更为专业,功能更为强大。所以,我们一般采用位于java.util包中的Random类做为随机数生成器。
在计算机中,所谓随机数生成器都是通过一定的算法,对事先选定的一个种子做复杂的运算,用产生的结果来近似地模拟完全随机数。这种随机数称为伪随机数,都是以相同的概率,从一组有限的数字中选取的无重复的数字。因此,要生成随机数,我们必须提供一个种子做为基点。
一般在计算机中,在创建随机数生成器时,如果不带种子,系统会用系统时钟来作为种子。这样,每次运行产生的随机数都是不同的,没有规律可言。如果带了种子,每次运行产生的随机数都是相同的,便于重现,也便于其他人检验分析结果。
在Java的Random类中,针对不设种子和设种子,提供了两种形式的构造器,分别是Random()和Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为生成器的种子,而Random(long seed)使用指定的seed作为生成器的种子。
随机数生成器Random对象创建后,我们就可以通过调用该对象的不同的方法,随机生成int类型、long类型、double类型、float类型、boolean类型等不同类型的随机数。


               **包装类与自动装箱拆箱**
Java做为一种面向对象的编程语言,它提倡一切皆对象。然而,我们知道八种基本数据类型不是对象。虽然使用基本数据类型也能满足大多数应用需要,但是,基本数据类型不具备对象的特性,不能满足某些特殊的需求。从JDK中可以知道,Java中很多类的参数类型是Object,即这些方法接收的参数都是对象,同时,又需要用这些方法来处理基本数据类型的数据。为了使用对象方式处理基本数据类型,Java中将这八种基本数据类型封装成类,称为包装类。

在这里插入图片描述

八种包装类实际上分为两种组:一组是数值型的,包括Integer、Byte、Short、Long、Float、Double,这些类包装类都是Number类的子类,而Number类的父类是Object类;另外一组是Character和Boolean类,这两个类的父类都是Object类。
在使用包装类时,必须注意:
    所有的包装类都是final类型,不能创建它们的子类。
    包装类是不可变类。一旦创建了一个包装类的对象,那么它所包含的基本类型数据就不能改变。
包装类封装了基本数据类型的属性(例如最大值、最小值),以及大量对基本数据类型进行操作的方法(例如,数据类型转换)。
例如,如果我们想得到int类型数据的最大值和最小值,可以使用int类型对应的包装类Integer的静态属性MAX_VALUE和MIN_VALUE直接得到,省去记忆的麻烦。
使用包装类的方法,可以得到包装类所包含的基本类型的数据。我们知道,数值型的包装类都继承自Number类,也就具有Number类的方法。如果我们查看JDK文档中关于Number类的方法说明,我们会发现Number类有byteValue()、shortValue()、intValue()、longValue()、doubleValue()、FloatValue()等方法,使用这些方法,就返回包装类对应的基本类型数据。
此外,包装类一个比较有用的功能是可以将字符串转换为相应的基本数据类型。在每个数值型的包装类中,都提供了一个parseXXX(String s)的方法,将字符串转换为对应的基本数据类型。


                         **正则表达式**
在实际项目开发中,我们经常需要判断电子邮件格式是否正确、查找替换某个文档中指定字符串等。虽然我们可以通过字符串相关类中的方法来实现这些功能,但是会相当繁琐。而利用功能强大的正则表达式,则可以大大降低编码量。
所谓正则表达式,是根据一组字符串中每个字符串所共有的特征,使用特定的符号来描述该组字符串的一种方法。正则表达式可以用于搜索、编辑或操纵文本和数据。然而,我们必须学习创建正则表达式的特定语法,这些语法超出了正常的Java编程语言的语法。正则表达式看起来相当复杂,但是一旦理解了创建正则表达式的基础知识,我们就能够逐步开始编写复杂的正则表达式。
为了理解什么是正则表达式、以及如何创建和使用正则表达式,我们用一个简单的例子开始入手。
假如某个大学的学生都有一个三位数字组成的学号,第一个数字描述所在的系(例如计算机系是5),第二个数字描述学生来源(1表示省内、2表示省外、3表示国外),第三个数字描述学生居住的地点(1-7为住在学校宿舍中的编号,8为住在校外)。
现在,我们需要描述计算机专业住在校内的学生的学号,当计算机系老师录入这些住在校内学生的学号时,程序需要知道录入的学号是否正确。

要描述计算机系住在校内的学生的学号,我们首先需要理解正则表达式的规则。
前面我们介绍说,正则表达式是使用特定的符号来描述该组字符串的一种方法。实际上,正则表达式就是一个字符串模板,可以匹配一批字符串。所以,创建正则表达式就是创建一个特殊的字符串。
一般来说,正则表达式由普通字符、字符类、通配符和数量词组成。字符类、通配符和数量词是一些特殊的字符,这些特殊字符在正则表达式中有特殊的用途。

在这里插入图片描述
在这里插入图片描述

创建了正则表达式后,我们就可以使用该正则表达式,判断输入的学号是否匹配。JDK的java.util.regex包中提供了Pattern类和Matcher类用于处理正则表达式。
Pattern类表示一个编译了的正则表达式。Pattern类没有提供公用构造器,要      创建一个Pattern对象,必须先调用该类的静态方法compile(),该方法将返回一个Pattern对象。
Matcher类表示通过解析Pattern,对输入的字符串执行匹配操作的引擎。与Pattern类一样,Matcher也没有定义公用的构造器。要获得一个Matcher对象,必须调用Pattern对象的matcher()方法。得到Matcher对象后,我们就使用Matcher对象提供的方法,根据正则表达式对字符串进行相应的操作。
下面我们以示例讲解如何使用正则表达式。详细的Pattern类和Matcher类及其方法说明,请参考JDK文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值