【JDK源码】java.lang包常用类详解

  接下来的几天开始JDK源码的学习和总结,之前看《java编程思想》的时候看到java的基础知识有很多,其中支撑着这些基础的基础中的基础当属JDK。JDK的基础代码里面又分了很多基础的模块,今天从最基础的java.lang包开始学习。本次JDK源码学习系列以JDK1.7为准。
  观察JDK的源码,可以看到,java.lang包下面最为基础和常用的几个部分包括:常用的对象类型包,常用的异常类型包,常用的接口包,系统包,注解包,反射包,其它包。

一、常用的对象类型包
1、Object类
  类Object是类层次结构的根类。每个类都使用Object作为超类。所有对象(包括数组)都实现这个类的方法。在Object类的方法里面会经常用到hashCode()和==与equals()的区别,有关==、equals()和hashcode()的源码分析请参看本人的另一篇博文。
java中的==、equals()、hashCode()源码分析
2、字符串类
  在字符串类中,最常用到的是String、StringBuilder和StringBuffer三个类,有关这三个类的比较参看本人的一下博文: String Stringbuilder StringBuffer的区别和应用
  本次JDK源码学习的是1.7版本,在这里简单提一下,1.8版本里面String类还增加了join静态方法用来结合多个字符串,有兴趣的同学可自行搜索学习。

3、8种基本元素的包装类
八种基本类型:

六种数字类型:
      四个整数型(byte,short,int,long)
     两个浮点型(douvle,float)
一种字符类型:char
一种布尔型:boolean

包装类对每种不同类型的基本进行了包装,并提供了相应的操作方法。

二、常用的异常类型包
1、Throwable类

这里写图片描述
  Throwable类是java中所有错误或者异常的超类,只有当对象是此类(或者其子类之一)的实例时,才能通过JVM或者Java的throw语句抛出。类似的,只有Throwable类或者其子类才可以是catch子句中的参数类型。Throwable包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。
2、Error类
  Error类是Throwable类的子类,这种异常一般表示与JVM有关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。

3、Exception类
  Exception类也是Throwable类的子类,这种异常是程序可以处理、可以恢复的异常,对于这种异常应该在代码中进行处理,不应该被程序最终抛出。Exception类又被分为两类,一类是需要检查的异常,是被强制要在代码中进行处理,一类是运行时异常,是在代码运行时出现的。

三、常用的接口包
1、Comparable接口

这里写图片描述
  Comparable接口用于可以比较大小的类。此接口强行对实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序,类的comparaTo方法被称为它的自然比较方法。
  实现此接口的对象列表(和数组)可以通过Collection.sort和Arrays.sort进行自动排序。实现此接口的对象可以用做有序映射中的键或有序集合中的元素,无需指定比较器。

2、Runable接口
  Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。
  此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非你打算修改或增强类的基本行为,否则不应为该类创建子类。有关Runable和Thread的区别和使用请参看本人的另一篇博文:【Java线程】Thread && Runnable必知必会

3、Cloneable接口
  实现了Cloneable接口的类可以合法的使用Object.clone()方法对其实例进行按字段复制。 如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。 按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。
  注意,此接口不 包含 clone 方法。因此,因为某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。
  有关java对象的克隆以及属性拷贝请参看本人以下博文:Java提高—对象克隆(复制)/对象属性拷贝深复制浅复制: 深复制VS浅复制(MemberwiseClone方法介绍)

4、Iterable接口
Iterable接口表示这个类可以执行foreach循环操作。

四、系统包
1、System类
  System类包含一些有用的类字段和方法,是final类型,所以不能被实例化。在System类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分实用方法。

2、 Runtime类
   Runtime类里面可以获得应用运行时的一些状态(主要包括使用的内存和cpu个数)和在应用运行时执行一些操作(程序退出、执行gc、设置退出时的钩子函数)。

3、 Thread类
   Thread类里面包括了线程相关的操作,主要有线程属性的设置(优先级、名称、类别)和改变线程运行状态(启动、睡眠、中断等)。Thread的sleep()和wait()方法的区别

4、ThreadLocal类
  该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。每个线程都保持对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)。

五、注解包
  这个系列的提供了可以用于自定义注解方法和一些常用的注解,其中最为重要的就是FunctionalInterface注解,一个接口如果使用了这个注解,则表示了具有lambda特性的接口。

这里写图片描述
六、反射包
  这个系列使得我们可以通过反射的方式得到对象的属性或者通过反射的方式执行对象的方法。主要常用的有Field、Method、Construct、Paramter、Array、Proxy几个类。

这里写图片描述
1、AccessibleObject类
  java.lang.reflect.AccessibleObject类是Field,Method和Constructor类对象的基类。 它提供了将反射对象标记为在使用它时抑制默认Java语言访问控制检查的功能。 当使用Fields,Methods或Constructors类对象来设置或获取字段,调用方法,或创建和初始化新的类实例时,执行访问分别检查(对于public,默认(包)访问,protected和private成员) 。 在反射对象中设置可访问标志允许具有足够权限的复杂应用程序(如Java对象序列化或其他持久性机制)以被禁止的方式操作对象。

2、Array类
  java.lang.reflect.Array类提供静态方法来动态创建和访问Java数组。 Array允许在get或set操作期间扩展转换,但如果发生缩小转换,则会抛出IllegalArgumentException异常。

3、Constructor类
  java.lang.reflect.Constructor类提供了一个类的单个构造函数的信息和访问权限。 构造函数允许在将实际参数传到newInstance()与底层构造函数的形式参数进行匹配时进行扩展转换,但如果发生缩小转换,则会抛出IllegalArgumentException异常。

4、Field类
  java.lang.reflect.Field类提供有关类或接口的单个字段的信息和动态访问。反射的字段可以是类(静态)字段或实例字段。字段允许在获取或设置访问操作期间扩展转换,但如果发生缩小转换,则会引发IllegalArgumentException。

5、Method类
  java.lang.reflect.Method类提供有关类或接口上单个方法的信息和访问权限。反映的方法可以是类方法或实例方法(包括抽象方法)。 当匹配实际参数以使用底层方法的形式参数调用时,方法允许扩展转换,但如果发生缩小转换,则会引发IllegalArgumentException异常。

6、Modifier类
  java.lang.reflect.Modifier类提供了用于解码类和成员访问修饰符的静态方法和常量。修饰符集合被表示为具有表示不同修饰符的不同位位置的整数。表示修饰符的常量的值取自“Java虚拟机规范”第4.1,4.4,4.5和4.7节中的表中。

7、Proxy类
  java.lang.reflect.Proxy类提供用于创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。

  动态代理的使用在日常工作也会经常用到,如果理解不清楚,这部分的内容也是有一定的难度。通过学习源码可以加深自己对动态代理的理解,参看本人以下博文: 【动态代理】从源码实现角度剖析JDK动态代理

七、其它包
其他类包括了一些不是太常用,但是在某些场景下特别有用的工具。
(1)Ref包提供了与Java垃圾回收器密切相关的引用类。这些引用类对象可以指向其它对象,但它们不同于一般的引用,因为它们的存在并不防碍Java垃圾回收器对它们所指向的对象进行回收。其好处就在于使者可以保持对使用对象的引用,同时JVM依然可以在内存不够用的时候对使用对象进行回收。
(2)Management包提供提供管理接口,用于监视和管理Java虚拟机以及Java虚拟机在其上运行的操作系统。最常用的有MemoryMXBean、MemoryPoolMXBean、RuntimeMXBean、ThreadMXBean四个获得不同类型数据的MXBean。
(3)Instrument包提供了提供允许Java编程语言代理检测运行在JVM上的程序的服务,利用它提供的Instrumentation类和ClassFileTrasformation类,利用这两个类加上-javaagent命令,可以在程序运行之前,完成对字节码的修改,利用这个方法可以有效的对程序进行监控。

java.lang包常用类和方法的思维导图:
这里写图片描述

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源含以下jar: commons-codec-1.6.jar commons-logging-1.1.1.jar fluent-hc-4.2.5.jar httpclient-4.2.5.jar httpclient-cache-4.2.5.jar httpcore-4.2.4.jar httpmime-4.2.5.jar import org.apache.http.Header; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpRequestInterceptor; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.protocol.HttpContext; antlr-2.7.7.jar aopalliance.jar asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3.jar aspectjrt.jar aspectjweaver.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.apache.commons.logging-1.1.1.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar commons-fileupload-1.3.1.jar commons-io-2.2.jar commons-lang-2.5.jar commons-lang3-3.2.jar commons-logging-1.1.3.jar dom4j-1.6.1.jar druid-1.0.15.jar fastjson-1.1.37.jar freemarker-2.3.22.jar hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.2.0.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar jackson-annotations-2.5.0.jar jackson-core-2.5.0.jar jackson-databind-2.5.0.jar javassist-3.11.0.GA.jar javassist-3.15.0-GA.jar jboss-logging-3.1.0.GA.jar jboss-transaction-api_1.1_spec-1.0.0.Final.jar jedis-2.1.0.jar json.jar jsp-api-2.1.jar jstl.jar log4j-1.2.16.jar log4j-api-2.2.jar log4j-core-2.2.jar mybatis-3.3.0.jar mybatis-spring-1.2.3.jar mysql-connector-java-5.1.40-bin.jar og

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值