Oracle为Java提供了丰富的基础类库,一共4000多个基础类,通过反复查阅API文档过程中,记住大部分类的功能即可。
一.与用户互动
1.运行Java程序的参数
2.使用Scanner获取键盘输入
使用Scanner类可以从文件,输入流,字符串中解析出基本类型值和字符串值,Scanner类提供了多个构造器,不同的构造器可以接收文件,输入流,字符串作为数据源,用于从文件,输入流,字符串中解析数据。
import java.util.*;
import java.io.*;
public class ScannerFileTest
{
public static void main(String[] args)
throws Exception
{
//System.in代表标准输入,就是键盘输入
//Scanner sc = new Scanner(System.in);
// 将一个File对象作为Scanner的构造器参数,Scanner读取文件内容
Scanner sc = new Scanner(new File("ScannerFileTest.java"));
System.out.println("ScannerFileTest.java文件内容如下:");
// 判断是否还有下一行
while(sc.hasNextLine())
{
// 输出文件中的下一行
System.out.println(sc.nextLine());
}
}
}
二.系统相关
Java提供了System类和Runtime类来与程序的运行平台进行交互。
1.System类:
System类代表当前java程序的允许平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法。
System类提供了代表标准输入,标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量,系统属性的方法,还提供了加载文件和动态链接库的方法。
1> 加载文件和动态链接库
主要针对native方法有用,对于一些特殊的功能(如访问操作系统底层硬件设备等)Java程序无法实现,必须借助C语言来完成,此时需要使用C语言为Java提供实现。
具体步骤:
Step1: Java程序中声明native修饰的方法,类似于abstract方法,只有方法签名,没有实现。编译该Java程序,生成一个class文件;
Step2: 用javah编译第一步生成的class文件,将产生一个.h文件;
Step3: 写一个.cpp文件实现native方法,这一步需要包含第二步产生的.h文件(这个.h文件中又包含了JDK带的jni.h文件);
Step4:将第三步的.cpp文件编译成动态链接库文件;
Step5: 在Java中用System类的loadLibrary()方法或Runtime类的loadLibrary()方法加载第4步产生的动态链接库文件,
此时Java程序中就可以调用这个native方法了。
2.Runtime类:
代表java程序运行时的环境,每个java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。应用程序不能创建自己的Runtime实例,但可以通过getRuntime()方法获取与之关联的Runtime对象。
Runtime类代表Java程序的运行时环境,可以访问JVM的相关信息,如处理器数量,内存信息等。
也可以直接单独启动一个进程来运行操作系统的命令exec()。
三.常用类
Java提供的一些常用类,如String, Math,BigDecimal等用法。
1 Object类
所有的Java类都是Object类的子类,所以任何Java对象都可以调用Object类的方法。
2 String StringBuffer和StringBuilder类
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁。
StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append(), insert(),
reverse(),setCharAt(),setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
StringBuilder类和StringBuffer基本相似,不同的是StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。
3 Math类
Math类是一个工具类,它的构造器被定义为private的,因此无法创建Math类的对象,Math类中的所有方法都是类方法。可以直接通过类名来调用他们。
4 Java7的ThreadLocalRandom与Random
Random类专门用于生成一个伪随机数,它有两个构造器:一个构造器使用默认的种子,另一个构造器需要程序员显式传入一个long型整数的种子。
ThreadLocalRandom类是Java7新增的一个类,是Random的增强版,在并发访问的环境下,使用ThreadLocalRandom来代替Random可以减少多线程资源竞争,最终保证系统具有更好的线程安全性。
四.Java8的日期,时间类
1.Date类
2.Calendar类
五.国际化与格式化
1.Java国际化的思路
将程序中的标签,提示等信息放在资源文件中,程序需要支持哪些国家,语言环境,就对应提供相应的资源文件。资源文件是key-value对,每个资源文件中key是不变的,但value则随不同的国家,语言而改变。
Java程序的国际化主要通过如下三个类完成
1> java.util.ResoureBundle: 用于加载国家,语言资源包;
2> java.util.Locale : 用于封装特定的国家区域,语言环境;
3> java.text.MessageFormat: 用于格式化带占位符的字符串。
为了实现程序的国际化,必须先提供程序所需要的资源文件,资源文件的内容是很多key-value对,其中key是程序使用的部分,而value则是程序界面的显示字符串。
baseName_language_country.properties
baseName_language.properties
baseName.properties
2.Java支持的国家和语言
可用Locale类的getAvailableLocales()方法。