如果我们在Class对象上调用getPackage方法,就可以得到描述该类所在包的Package对象(Package类是在java.lang中定义的)。我们也可以用包名通过调用静态方法getPackage或者调用静态方法getPackages(该方法返回由系统中所有已知包构成的数组)来获得Package对象。getName方法可以返回包的全名。

Package对象的使用与其他反射类型完全不同,即我们不能在运行时创建或操纵包。我们可以使用Package对象来获取有关包的信息,诸如包的用途、谁创建了包、包的版本等。我们将把这些内容延后到后面详细介绍包时再讨论。

一、类定义

public class Package implements java.lang.reflect.AnnotatedElement {}

reflect.AnnotatedElement :表示目前正在此 VM 中运行的程序的一个已注释元素。该接口允许反射性地读取注释。由此接口中的方法返回的所有注释都是不可变并且可序列化的。

二、常用方法

1、getPackage方法

一个静态方法,可以使用类名进行访问,如果尝试使用类对象访问该方法,则不会收到错误

static Package getPackage(Class<?> c) {String name = c.getName();int i = name.lastIndexOf('.');if (i != -1) {name = name.substring(0, i);ClassLoader cl = c.getClassLoader();if (cl != null) {return cl.getPackage(name);} else {return getSystemPackage(name);}} else {return null;}
}

当调用方的ClassLoader实例存在null时,将使用getPackage()方法在给定的调用方的ClassLoader实例中按给定的包名称搜索一个包,然后搜索该System ClassLoader实例加载的包的捆绑包以确定命名的包。

三、拓展

1、关于Java.lang

java.lang包是java语言的核心,它提供了java中的基础类。包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。我们介绍一下Java 8中的java.lang包。主要类如下图:

2、Java中常用包

java.lang 该包提供了Java编程的基础类,例如 Object、Math、String、StringBuffer、System、Thread等,不使用该包就很难编写Java代码了。

java.util 该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。

java.io 该包通过文件系统、数据流和序列化提供系统的输入与输出。

java.net 该包提供实现网络应用与开发的类。

java.sql 该包提供了使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API。

java.awt 这两个包提供了GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。

javax.swing是 Java 为图形界面应用开发提供的一组工具包,是 Java 基础类的一部分。Swing 包含了构建图形界面(GUI)的各种组件,如: 窗口、标签、按钮、文本框等。Swing 提供了许多比 AWT 更好的屏幕显示元素,使用纯 Java 实现,能够更好的兼容跨平台运行。

java.text 提供了与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。

JDK源码解析之 Java.lang.Package相关推荐

  1. JDK源码解析之 java.lang.Exception

    异常.是所有异常的基类,用于标识一般的程序运行问题.这些问题通常描述一些会被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable public class Exce ...

  2. JDK源码解析之 java.lang.Error

    java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable ...

  3. JDK源码解析之 java.lang.Thread

    位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态.上下文切换 ...

  4. JDK源码解析之 java.lang.Integer

    teger 基本数据类型int 的包装类 Integer 类型的对象包含一个 int 类型的字段 一.类定义 public final class Integer extends Number imp ...

  5. JDK源码解析之 Java.lang.String

    String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因 ...

  6. JDK源码解析之 Java.lang.Object

    Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起.作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现. Object类位于ja ...

  7. JDK源码解析之 Java.lang.Compiler

    Compiler类提供支持Java到本机代码编译器和相关服务.在设计上,它作为一个占位符在JIT编译器实现. 一.源码部分 public final class Compiler {private C ...

  8. JDK源码解析之 java.lang.Class

    Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识. 这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class ...

  9. JDK源码解析之 Java.lang.Byte

    byte,即字节,由8位的二进制组成.在Java中,byte类型的数据是8位带符号的二进制数,以二进制补码表示的整数 取值范围:默认值为0,最小值为-128(-27);最大值是127(27-1) By ...

最新文章

  1. 如何统计各个班级的相关数据(如班级排名、最高分等)呢?
  2. WeihanLi.Npoi 1.7.0 更新介绍
  3. php中pregmatch,php中preg_match的isU代表什么意思
  4. 【数据库系统】文件处理系统和DBMS的主要区别
  5. P3372 【模板】线段树 1
  6. 最少拦截系统 贪心
  7. 铁芯用matlab怎么仿真,Simulink的BLDC建模与仿真
  8. 计算机xp画板在哪找,xp画图工具 xp画图工具在哪里 | 帮助信息-动天数据
  9. 利用R语言实现反正弦转换(arcsine-transformed)
  10. Win8.1RTM Pro电话激活
  11. Mysql 各个版本区别及官网下载
  12. 代码阅读总结之Fitch and Mather 7.0(资源文件Resource随笔)
  13. 矢量求导之位移与速度及加速度
  14. redis的读写分离和主机宕机
  15. SpringBoot集成Redis笔记-动力节点王鹤
  16. win10动态壁纸怎么设置_教程:iPhone/Android设置动态壁纸
  17. 故障模拟的三态闭环CSTR动力学模型研究(Simulink)
  18. B端产品如何搭建用户帮助体系
  19. Day5-Python变形(DataWhale)
  20. (学习笔记)微信小程序 -- WXML模板、WXSS样式、JS逻辑交互

热门文章

  1. python后台框架_我的第一个python web开发框架(14)——后台管理系统登录功能
  2. pyqt5与html数据交互原理,pyqt5与本地html进行js交互
  3. QtCreator下使用c++标准输入cin输出cout没有阻塞等待输入
  4. python队列精灵对战_python队列Queue
  5. ruby mysql dbi_Ruby MySQL DBI实例
  6. 为什么python除法结果会有小数点0_关于python:为什么整数除法会在许多脚本语言中向下取整?...
  7. php写好程序后需要嵌套,什么是PHP嵌套函数?
  8. python linux log,linux,python 常用的处理log的命令
  9. 投票选举 算法_区块链主流共识算法一文全通
  10. python对浏览器的常用操作_Selenium元素的常用操作方法分析