Java.lang包是Java中使用最广泛的一个包,它包含很多定义的类和接口。

  java.lang包包括以下这些类:

Boolean Byte Character Class ClassLoader Compiler Double Enum Float
InheritableThreadLocal Integer  Long  Math Number Object Package Process ProcessBuilder 
Runtime RuntimePermission  SecurityManager  Short StackTraceElement  StrictMath  String StringBuffer  StringBuilder
System Thread ThreadGroup ThreadLocal  Throwable void      

  java.lang包括以下这些接口:

Appendalbe Comparable Runnable CharSequence Iterable Cloneable Readable

1、在Float和Double中提供了isInfinite()和isNaN()方法,用来检验两个特殊的double和float值:无穷值和NaN(非数字)。

2、Process抽象类。抽象的Process类封装了一个进程 process, 即一个执行程序,它主要作为对象类型的超类,该对象由Runtime类中的exec()方法创建,或由ProcessBuilder类中的start()创建。

3、Runtime类。Runtime类封装运行时的环境。一般不能实例化一个Runtime对象,但是可以通过调用静态方法Runtime.getRuntime()得到一个当前Runtime对象的引用。一旦获得当前Runtime对象的引用,就可以调用几个方法来控制Java虚拟机的状态和行为。Runtime类中比较常用的几个方法:

       Process exec(String progName) throws IOException  作为一个单独的进程执行progName指定的程序。返回一个描述新进程的Process类的对象。

       long freeMemory()                                              返回Java运行时系统可以利用的空闲内存的近似字节数。

       void gc()                       开始垃圾回收。

           long totalMemory()                                            返回程序可以利用的类存总字节数。

使用exec()执行其他程序:    

 package com.hujianjie.demo;

 public class EcecDemo {

     /**
* 利用exec()打开指定的程序
*/
public static void main(String[] args) {
Runtime r = Runtime.getRuntime();
Process p = null;
try{
p = r.exec("D:\\Program Files\\Dev-Cpp\\devcpp.exe");
}catch(Exception e){
e.printStackTrace();
System.out.println("Error");
}
} }

4、System类。System类比较常用,其中容易忽略的是currentTimeMillis()方法是为程序执行计时;arraycopy()方法可以迅速从一个地方将任何类型的数组复制到另一个地方,其与等价的循环相比,该方法快很多;getProperty()方法可以得到不同环境变量的值。

5、Runnable接口、Thread和ThreadGroup类支持多线程编程。Runnable接口必须由一个可以启动单独的执行线程的类实现,Runnable接口只定义了一个抽象方法run(),它是线程的入口点,创建线程必须实现该方法。 Thread 类创建一个新的执行线程,它定义了下面常用的构造函数:

                

 Thread()
Thread(Runnable threadOb)
//threadOb是实现Runnable接口的类的一个实例,它定义了线程在何处开始执行
//线程的名称由threadName指定
Thread(Runnable threadOb, String threadName)
Thread(String threadName)
Thread(ThreadGroup groupOb, Runnable threadOb)
Thread(ThreadGroup groupOb, Runnable threadOb, String threadName)
Thread(ThreadGroup groupOb, String threadName)

下面的程序创建了两个具有线程的线程组,演示了线程组的用法:

 package com.hujianjie.demo;

 class NewThread extends Thread{
boolean suspendFlag;
NewThread(String threadname, ThreadGroup tgob){
super(tgob,threadname);
System.out.println("New thread:"+this);
suspendFlag =false;
start();//Start the thread
}
public void run(){
try{
for(int i =6;i>0;i--){
System.out.println(getName()+": "+i);
Thread.sleep(1000);
synchronized(this){
while(suspendFlag){
wait();
}
}
}
}catch(Exception e){
System.out.println("Exception in "+getName());
}
System.out.println(getName()+" exiting.");
}
void mysuspend(){
suspendFlag = true;
}
synchronized void myresume(){
suspendFlag = false ;
notify();
} } public class ThreadGroupDemo { /**
* @param args
*/
public static void main(String[] args) {
ThreadGroup groupA = new ThreadGroup("Group A");
ThreadGroup groupB = new ThreadGroup("Group B");
NewThread ob1 = new NewThread("One",groupA);
NewThread ob2 = new NewThread("Two",groupA);
NewThread ob3 = new NewThread("Three",groupB);
NewThread ob4 = new NewThread("Four",groupB);
System.out.println("\nHere is output from list():");
groupA.list();
groupB.list();
System.out.println();
System.out.println("Suspending Group A");
Thread tga[] = new Thread[groupA.activeCount()];
groupA.enumerate(tga);
for(int i=0;i<tga.length;i++){
((NewThread)tga[i]).mysuspend(); //suspend threads in group
}
try{
Thread.sleep(4000);
}catch(Exception e){
System.out.println("Main thread interrupted.");
}
System.out.println("Resuming Group A");
for(int i=0;i<tga.length;i++){
((NewThread)tga[i]).myresume(); //resume threads in group
}
try{
System.out.println("Waiting for threads to finish.");
ob1.join();
ob2.join();
ob3.join();
ob4.join();
}catch(Exception e){
System.out.println("Exception in Main thread!");
}
System.out.println("Main thread exiting!");
} }

运行的结果如下:

 New thread:Thread[One,5,Group A]
New thread:Thread[Two,5,Group A]
One: 6
New thread:Thread[Three,5,Group B]
Two: 6
New thread:Thread[Four,5,Group B]
Three: 6 Here is output from list():
Four: 6
java.lang.ThreadGroup[name=Group A,maxpri=10]
Thread[One,5,Group A]
Thread[Two,5,Group A]
java.lang.ThreadGroup[name=Group B,maxpri=10]
Thread[Three,5,Group B]
Thread[Four,5,Group B] Suspending Group A
Four: 5
Three: 5
Four: 4
Three: 4
Four: 3
Three: 3
Resuming Group A
Two: 5
Waiting for threads to finish.
One: 5
Four: 2
Three: 2
Two: 4
One: 4
Four: 1
Three: 1
Two: 3
One: 3
Four exiting.
Three exiting.
Two: 2
One: 2
Two: 1
One: 1
One exiting.
Two exiting.
Main thread exiting!

Java.lang的研究(分析包含的重要类和接口)的更多相关文章

  1. java.lang.ArrayIndexOutOfBoundsException异常分析及解决

    这是一个非常常见的异常,从名字上看是数组下标越界错误,解决方法就是查看为什么下标越界. 下面是一个错误示例: Exception in thread "main" java.lan ...

  2. java.lang.ArrayIndexOutOfBoundsException 异常分析及解决

    参考:http://blog.csdn.net/javaeeteacher/article/details/4485834 这是一个非常常见的异常,从名字上看是数组下标越界错误,解决方法就是查看为什么 ...

  3. “java.lang.NullPointerException”异常分析

    1.父类定义的某个属性,没有被子类使用,或者在子类中,又重新定义一次. 2.因为调用了一个object的方法,且此object的reference为null:比如说:String a=null; // ...

  4. java.lang.ExceptionInInitializerError异常分析

    今天在项目开发时遇到一个问题,整个项目是使用Spring等框架搭建起来的在运行项目时不报任何的异常信息,就是找不到某个类信息,各方查找该类确实是存在的,最后通过断点跟踪时在异常栈内发现java.lan ...

  5. java.lang.UnsupportedOperationException 异常分析

    今天将一个数组转换成 List 然后进行 remove 操作时却抛出 java.lang.UnsupportedOperationException 异常. String pattern = &quo ...

  6. 一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制

    这个是可以的,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一致. 每个编译单元只能有一个public 类.这么做的意思是,每个编译单元只能有一个公开 ...

  7. java.lang.OutOfMemory总结分析

    OOM浅析 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识 ...

  8. 一个“.java”文件中是否可以包含多个类(不是内部类)?有什么限制?

    可以,若这个类的修饰符是public则,其类名须与文件名相同.

  9. 一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?

    可以,但一个源文件中最多只能有一个公开类(public class)而且文件名必须和公开类的类名完全保持一致.

随机推荐

  1. 周末大礼:jQuery技巧总结

    一.简介 1.1.概述 随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype.YUI.jQuery.mootools.Bindows ...

  2. 关于C++输出中文乱码的解决方案

    把页面编码转换为UTP-8的编码 1.打开G:\vs2013way\VC\vcprojectitems目录 在 file.h newc++file.cpp 中写两句话 #pragma once#pra ...

  3. 写给大忙人的JavaSE 8 - 学习

    前面有提到过lambda和函数式接口,但是JavaSE 8 除了这两个新特性之后还提供了很多有用的东西.例如Stream. 摸索了几天,终于弄明白Stream的应用了. 先推荐一篇文章:Java 8 ...

  4. 类的数据成员加前缀 m_(表示 member)

    类的数据成员加前缀 m_(表示 member),这样可以避免数据成员与 成员函数的参数同名. 例如: void Object::SetValue(int width, int height) { m_ ...

  5. C++ 程序可以定义为对象的集合

    C++ 基本语法C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互.现在让我们简要地看一下什么是类.对象,方法.即时变量. 对象 - 对象具有状态和行为.例如:一只狗的状态 - 颜色 ...

  6. ImportError: No module named Crypto.Cipher

    from Crypto.Cipher import AES 报错: ImportError: No module named Crypto.Cipher 解决方法: pip install pycry ...

  7. Spark-Hadoop、Hive、Spark 之间是什么关系?(转)

    大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可 ...

  8. linux下mysql 启动命令

    1,使用service 启动.关闭MySQL服务 service mysql start service mysql stop service mysql restart 运行上面命令,其实是serv ...

  9. cocos2d 中使用jni C++ 调用 Java 方法

    1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...

  10. Java类的设计----方法的重写、覆盖

    方法的重写.覆盖 在子类中可以根据需要对从父类中继承来的方法进行改造—覆盖方法(方法的重置.重写),在程序执行时,子类的方法将覆盖父类的方法. 覆盖方法必须和被覆盖方法具有相同的方法名称.参数列表和返 ...