与Java运行环境交互
Sun为Java提供了丰富的基础类库,Java SE提供了三千多个基础类(包括第7章介绍的集合框架),通过这些基础类库可以提高开发效率,降低开发难度。对于合格的Java程序员而言,至少要熟悉Java SE中70%以上的类(当然,笔者并不是让读者去背诵Java API文档),但在反复查阅API文档的过程中,大脑会自动记住大部分类的功能、方法,因此程序员一定要多练,多敲代码。
Java提供了String、StringBuffer和StringBuilder来处理字符串,它们之间存在少许差别,本章会详细介绍它们之间的差别,以及如何选择合适的字符串类。Java还提供了Date和Calendar来处理日期、时间,其中Date是一个已经过时的API,通常推荐使用Calendar来处理日期、时间。
正则表达式是一个强大的文本处理工具,通过正则表达式可以对文本内容查找、替换、分割等操作。从JDK1.4以后,Java也增加了对正则表达式的支持,包括新增的Pattern和Matcher两个类,并改写了String类,让String类增加了正则表达式支持,增加了正则表达式功能后的String类更加强大。
Java还提供了非常简单的国际化支持,Java使用Locale对象封装一个国家、语言环境,再使用ResourceBundle根据Locale加载语言资源包,当ResourceBundle加载了指定Locale对应的语言资源文件后,ResourceBundle对象就可调用getString方法来取出指定key所对应的消息字符串。
与用户互动
如果一个程序总是按既定的流程运行,无须处理用户动作,这个程序总是比较简单的。实际上,绝大部分程序都需要处理用户动作,包括接受用户的键盘输入、鼠标动作等。因为现在还未涉及图形用户接口(GUI)编程,故本节主要介绍程序如何获得用户的键盘输入。
运行Java程序的参数
回忆Java程序的入口:main方法的方法签名:
//Java程序入口:main方法
public static void main(String[] args){….}
现在可以详细讲解main方法为什么采用这个方法签名:
1、public修饰符:Java类由JVM调用,为了让JVM可以自由调用这个main方法,所以使用public修饰符把这个方法暴露出来。
2、static修饰符:JVM调用这个主方法时,不可能先创建该主类的对象,然后通过对象来调用该主方法。JVM直接通过主类来调用主方法,因此使用static修饰该主方法。
3、void返回值:因为主方法被JVM调用,该方法的返回值将返回给 JVM,这没有任何意义,因此main方法没有返回值。
上面方法中还包括一个字符串数组形参,根据前面介绍方法调用的规则:谁调用方法,谁负责为形参赋值。也就是说,main方法由JVM调用,即args形参应该由JVM负责赋值。但JVM怎么知道如何为args数组赋值呢?我们先看下面程序:
程序清单:codes/09/9- 1/TestArgs.java
public class TestArgs
{
public static void main(String[] args)
{
//输出args数组的长度
System.out.println(args.length);
//遍历args数组的每个元素
for(String arg:args)
{
System.out.pringln(arg);
}}}
上面程序几乎是最简单的“HelloWorld”程序,只是这个程序增加了输出args数组的长度,遍历args数组元素的代码。使用java TestArgs命令运行上面程序,看到程序仅仅输出一个0,这表明args数组是一个长度为0的空数组—这是合理的:因为计算机是没有思考能力的,它只能忠实地执行用户交给它的任务,既然我们没有给args数组设定参数值,那么JVM就不知道args数组的元素,所以JVM以将args数组设置成一个长度为。的数组。
改为如下命令来运行上面程序:
java TestArgs Java Spring
看到如图9.1所示的运行结果:
图9.1为main方法的形参数组赋值
从图9.1中可以看出,如果运行Java程序时在类名后紧跟一个或多个字符串(多个字符串之间以空格隔开),JVM就会把这些字符串依次赋给args数组元素。运行Java程序时的参数与args数组之间的对应关系如图9.2所示:
图9.2运行Java程序时参数和args数组的关系
如果某参数本身包含了空格,则应该将该参数用双引号(“)括起来,否则JVM会把这个空格当成参数分隔符,而不是当成参数本身。例如采用如下命令来运行上面程序:
java TestArgs “Java Spring”
运行上面命令,看到args数组的长度是1,只有一个数组元素,其值是Java Spring。
摘自《疯狂java讲义》