JDK源码解析之 Java.lang.Package
如果我们在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相关推荐
- JDK源码解析之 java.lang.Exception
异常.是所有异常的基类,用于标识一般的程序运行问题.这些问题通常描述一些会被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable public class Exce ...
- JDK源码解析之 java.lang.Error
java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable ...
- JDK源码解析之 java.lang.Thread
位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态.上下文切换 ...
- JDK源码解析之 java.lang.Integer
teger 基本数据类型int 的包装类 Integer 类型的对象包含一个 int 类型的字段 一.类定义 public final class Integer extends Number imp ...
- JDK源码解析之 Java.lang.String
String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因 ...
- JDK源码解析之 Java.lang.Object
Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起.作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现. Object类位于ja ...
- JDK源码解析之 Java.lang.Compiler
Compiler类提供支持Java到本机代码编译器和相关服务.在设计上,它作为一个占位符在JIT编译器实现. 一.源码部分 public final class Compiler {private C ...
- JDK源码解析之 java.lang.Class
Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识. 这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class ...
- JDK源码解析之 Java.lang.Byte
byte,即字节,由8位的二进制组成.在Java中,byte类型的数据是8位带符号的二进制数,以二进制补码表示的整数 取值范围:默认值为0,最小值为-128(-27);最大值是127(27-1) By ...
最新文章
- 如何统计各个班级的相关数据(如班级排名、最高分等)呢?
- WeihanLi.Npoi 1.7.0 更新介绍
- php中pregmatch,php中preg_match的isU代表什么意思
- 【数据库系统】文件处理系统和DBMS的主要区别
- P3372 【模板】线段树 1
- 最少拦截系统 贪心
- 铁芯用matlab怎么仿真,Simulink的BLDC建模与仿真
- 计算机xp画板在哪找,xp画图工具 xp画图工具在哪里 | 帮助信息-动天数据
- 利用R语言实现反正弦转换(arcsine-transformed)
- Win8.1RTM Pro电话激活
- Mysql 各个版本区别及官网下载
- 代码阅读总结之Fitch and Mather 7.0(资源文件Resource随笔)
- 矢量求导之位移与速度及加速度
- redis的读写分离和主机宕机
- SpringBoot集成Redis笔记-动力节点王鹤
- win10动态壁纸怎么设置_教程:iPhone/Android设置动态壁纸
- 故障模拟的三态闭环CSTR动力学模型研究(Simulink)
- B端产品如何搭建用户帮助体系
- Day5-Python变形(DataWhale)
- (学习笔记)微信小程序 -- WXML模板、WXSS样式、JS逻辑交互
热门文章
- python后台框架_我的第一个python web开发框架(14)——后台管理系统登录功能
- pyqt5与html数据交互原理,pyqt5与本地html进行js交互
- QtCreator下使用c++标准输入cin输出cout没有阻塞等待输入
- python队列精灵对战_python队列Queue
- ruby mysql dbi_Ruby MySQL DBI实例
- 为什么python除法结果会有小数点0_关于python:为什么整数除法会在许多脚本语言中向下取整?...
- php写好程序后需要嵌套,什么是PHP嵌套函数?
- python linux log,linux,python 常用的处理log的命令
- 投票选举 算法_区块链主流共识算法一文全通
- python对浏览器的常用操作_Selenium元素的常用操作方法分析