在前面分开的说了下Java.lang.Thread和Java.lang.ThreadGroup。这里说下在java.lang包下其他重要的类及其函数。
附件中是在lang包下的所有类的分类截图。下面就其中比较重要的类进行说明。
1. 封装类
对Java中8种基本数据类型进行了封装,这样使得Java的面向对象思想在基本数据类型上也得到了相应的体现。如:
package com.java.lang;
public class _BasicType {
public static void main(String[] args) {
Object o = 2;// Integer temp = new Integer(2); Object o = temp;
System.out.println(o);
}
}
这样使得基本数据类型方便的与其他对象一起进行一些处理操作。
2. 字符串操作
java工程师的面试中出现的频率很高,那就是String和StringBuffer的区别,在分别在什么时候使用?而从jdk1.5中出现StringBuilder这个类之后,这个问题就变成了:Java的String,StringBuffer,StringBuilder有什么区别?
网上的答案大都是:String是不可变类,每次在String对象上的操作都会生成一个新的对象;StringBuffer和StringBuilder则允许在原来对象上进行操作,而不用每次增加对象;StringBuffer是线程安全的,但效率较低,而StringBuilder则不是,效率最高。
通过阅读JDK文档,可以更加深入得理解,如下:
String和StringBuffer,StringBuilder都是用字符数组来表示的。但是在String中这个字符数组是这样定义的:
private final char value[];
而在StringBuffer和StringBuilder中,这个字符数组都是继承于java.lang.AbstractStringBuilder中。
char value[];
这样答案就很明显了,原因就在这个final关键字上。
而同时通过源代码可以发现StringBuffer的很多方法和属性都有synchronized关键字修饰,而StringBuilder则没有。
总结一下:
(1) 在编译阶段就能够确定的字符串常量,完全没有必要创建String或StringBuffer对象。直接使用字符串常量的"+"连接操作效率最高。
(2) StringBuffer对象的append效率要高于String对象的"+"连接操作。
(3) 不停的创建对象是程序低效的一个重要原因。那么相同的字符串值能否在堆中只创建一个String对象那。显然拘留字符串能够做到这一点,除了程序中的字符 串常量会被JVM自动创建拘留字符串之外,调用String的intern()方法也能做到这一点。当调用intern()时,如果常量池中已经有了当前 String的值,那么返回这个常量指向拘留对象的地址。如果没有,则将String值加入常量池中,并创建一个新的拘留字符串对象。
3. Object 和 Class类
Object类是所有其他类的基类,而Class是对于面向对象类的抽象表示,主要用于Java中的反射机制。
package com.java.lang;
public class _ClassTest{
public void _Class(){
Class<?> clazz = this.getClass();
clazz...//省略号表示里面有很多方法,具体参考JDK文档
}
}
4. 线程
关于线程的知识,可以参考我之前的博客:Java.lang.Thread 和 Java.lang.ThreadGroup
http://hanyuanbo.iteye.com/blog/730324
5. Math
Math类的重要作用在于它使得我们在想使用一些重要的基本的操作的时候,不用再使用自己写的一些函数或者其他属性,而直接使用Java强大的工程师们给我们挑选过的更高效更安全更准确的函数、算法,便于对一些常用方法的使用。
具体的函数以及使用请参考JDK.
6. Enum类
请参阅我之前的博客java5 新特性中的Enum部分。
http://hanyuanbo.iteye.com/blog/730324
7. System类
System中常用到的属性有:
static PrintStream err |
“标准”错误输出流。 |
static InputStream in |
“标准”输入流。 |
static PrintStream out |
“标准”输出流。 |
System中常用到的方法有:
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) |
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。 |
static long currentTimeMillis() |
返回以毫秒为单位的当前时间。 |
static void exit(int status) |
终止当前正在运行的 Java 虚拟机。 |
static void gc() |
运行垃圾回收器。 |
static Properties getProperties() |
确定当前的系统属性。 |
static String getProperty(String key) |
获取指定键指示的系统属性。 |
static String getProperty(String key, String def) |
获取用指定键描述的系统属性。 |
static long nanoTime() |
返回最准确的可用系统计时器的当前值,以毫微秒为单位。 |
static void setErr(PrintStream err) |
重新分配“标准”错误输出流。 |
static void setIn(InputStream in) |
重新分配“标准”输入流。 |
static void setOut(PrintStream out) |
重新分配“标准”输出流。 |
static void setProperties(Properties props) |
将系统属性设置为 Properties 参数。 |
static String setProperty(String key, String value) |
设置指定键指示的系统属性。 |
8. Runtime类
Runtime中常用到的方法有如下:
exec(String command) |
在单独的进程中执行指定的字符串命令。 |
Process exec(String[] cmdarray) |
在单独的进程中执行指定命令和变量。 |
Process exec(String[] cmdarray, String[] envp) |
在指定环境的独立进程中执行指定命令和变量。 |
Process exec(String[] cmdarray, String[] envp, File dir) |
在指定环境和工作目录的独立进程中执行指定的命令和变量。 |
Process exec(String command, String[] envp) |
在指定环境的单独进程中执行指定的字符串命令。 |
Process exec(String command, String[] envp, File dir) |
在有指定环境和工作目录的独立进程中执行指定的字符串命令。 |
void exit(int status) |
通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机。 |
long freeMemory() |
返回 Java 虚拟机中的空闲内存量。 |
void gc() |
运行垃圾回收器。 |
static Runtime getRuntime() |
返回与当前 Java 应用程序相关的运行时对象。 |
通过Runtime便可以执行相关的命令。具体的使用实例参考我之前的博客:Java 执行系统文件。
http://hanyuanbo.iteye.com/blog/775111
9. 其他类可能涉及到更高更复杂的概念或者思想,没有深入接触过,暂不做说明。