Java提供了丰富的基础类库,Java7提供了4000多个基础类,通过这些基础类可以提高开发效率,降低开发难度,对于一个合格程序员来说,至少要熟悉Java SE大部分的类的功能。

7.1 与用户互动

如果一个程序总是按照既定的流程运行,无序处理用户动作,这个程序总是比较简单的。实际上,绝大部分程序都需要处理用户的动作,包括接收用户的键盘输入、鼠标动作等。后面会讲到图形用户接口(GUI)编程就是基于图形面板输入框的程序编程,本章主要讲解如何获得键盘的输入。

7.1.1 运行Java程序的参数

main函数详解:

public修饰符:Java类由JVM调用,为了让JVM可以自由的调用这个main方法,所以使用public修饰符把这个方法给暴漏出来。

static修饰符:JVM调用这个方法时,不会先创建该主类的对象,然后通过对象来调用该方法。而是直接通过该类来调用主方法,因此使用static修饰该方法。

void返回值:因为主方法被JVM调用,该方法的返回值将返回给JVM,这没有任何意义,因此main方法没有返回值。

举例1:

public class Test {
public static void main(String[] args) {
System.out.println(args.length);
}
}

使用java命令来调用该类,JVM会默认执行该类的main方法。java Test

在后面没有追加参数的情况下,打印长度为0

如果在调用该方法时传入参数,方式如下: java Test hello word ,在类名后面追加字符串参数,用空格隔开。

这时打印长度为2.

7.1.2 使用Scanner获取键盘输入

使用Scanner类可以很方便的获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件、输入流、字符串中解析出基本类型值和字符串值。

Scanner主要提供了两个方法来扫描输入。

hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果需要判断是否包含下一个字符串,可以省略Xxx。

nextXxx():获取下一个输入项。Xxx的含义与前一个方法中的Xxx相同。

举例1:

public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //表示标准键盘输入
while(sc.hasNext()){
System.out.println(sc.next());
}
}

使用ctrl+Z命令表示不再输入,即sc.hasNext()返回false。

举例2:读取当前文件,将文件输入到控制台

import java.util.Scanner;
import java.io.File;
public class Test{
public static void main(String args[]) throws Exception{
Scanner sn = new Scanner(new File(".\\Test.java"));
while(sn.hasNextLine()){
System.out.println(sn.nextLine());
}
}
}

(1)相对路径与绝对路径的问题:

绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
C:xyz/test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。
相对路径:相对于某个基准目录的路径。包含Web的相对路径(HTML中的相对目录)。myeclipse中的相对路径是以项目为基础作为描述的,使用相对路径直接定位到当前项目“./”,直接定位到langsin_E24这个项目下,再通过“/com/langsin/Seven/ForDemo1.java”,即可定位到指定文件。

(2)从控制台输入内容时,如果先接收一个int类型的值,再接收一个String类型的值,是会出问题的。

int a = sc.nextInt();
String str = sc.nextLine();
System.out.pritln(“a:” a+”str”+str);

怎么导致的?/r/n换行符导致的

如何解决呢?

(1) 接收一个字符后再创建一个文本扫描器。

(2) 把所有的数据都先按照字符串获取,然后要什么,再转换成对应类型的。

其实这个问题不用担心,因为学到后边的web啥的,你们压根就用不到这个东西了。

7.2 系统相关

Java程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特定的功能,Java提供了System类和Runtime类来与程序的运行平台进行交互。

7.2.1 System类

System类代表当前Java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量、类方法,允许直接通过System类来调用这些Field和方法。

static Map<String,String> getenv():返回一个不能修改的当前系统环境的字符串映射视图。
static String getenv(String name):获取指定的环境变量值。
static Properties getProperties():确定当前的系统属性。
static String getProperty(String key):获取指定键指示的系统属性。
static long currentTimeMillis():返回以毫秒为单位的当前时间。

举例1:

public static void main(String[] args) throws Exception{
Map<String,String> map = System.getenv();
for(String name : map.keySet()){
System.out.println(name+":"+map.get(name));
}
System.out.println("=====================");
System.out.println(System.getenv("JAVA_HOME"));
System.out.println(System.getenv("CLASSPATH"));
System.out.println("=====================");
Properties prop = System.getProperties();
System.out.println(prop.toString());
System.out.println(prop.getProperty("sun.boot.library.path"));
prop.store(new FileOutputStream("./props.properties"), "System properties");
}

举例2:

public static void main(String[] args) throws Exception{
long begin = System.currentTimeMillis();
Map<String,String> map = System.getenv();
for(String name : map.keySet()){
System.out.println(name+":"+map.get(name));
}
long end = System.currentTimeMillis();
System.out.println("共耗时:"+(end-begin));
}

7.2.2 Runtime类

Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。应用程序不能创建自己的Runtime实例,但可以通过getRuntime()方法获取与之关联的Runtime对象。

举例1:

public static void main(String[] args) throws Exception{
Runtime rt = Runtime.getRuntime();
System.out.println("处理器数量:"+rt.availableProcessors());
System.out.println("空闲内存数:"+rt.freeMemory());
System.out.println("总内存数:"+rt.totalMemory());
System.out.println("可用最大内存数:"+rt.maxMemory());
}
加客服微信:qiushu0517,开通VIP下载权限!