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 提供了与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql中limit的用法详解

在我们使用查询语句的时候&#xff0c;经常要返回前几条或者中间某几行数据&#xff0c;这个时候怎么办呢&#xff1f;不用担心&#xff0c;mysql已经为我们提供了这样一个功能。SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SE…

Docker入门-简介

独具魅力的Docker作为一门新技术&#xff0c;它的出现有可能引起其所在领域大范围的波动甚至是重新洗牌。根据业内专业人士的看法&#xff0c;不论如何&#xff0c;Docker的出现&#xff0c;已经成为云服务市场中一枚极具意义的战略性棋子。从2013年开始在国内发力&#xff0c;…

Mysql中limit的优化

在一些情况中&#xff0c;当你使用LIMIT row_count而不使用HAVING时&#xff0c;MySQL将以不同方式处理查询。 如果你用LIMIT只选择一些行&#xff0c;当MySQL选择做完整的表扫描时&#xff0c;它将在一些情况下使用索引。 如果你使用LIMIT row_count与ORD…

Docker入门-架构

Docker 包括三个基本概念: 镜像&#xff08;Image&#xff09;&#xff1a;Docker 镜像&#xff08;Image&#xff09;&#xff0c;就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器&#xff08;Cont…

MYSQL出错代码列表大全(中文)

mysql出错了,以前往往靠猜.现在有了这张表,一查就出来了. 1005&#xff1a;创建表失败1006&#xff1a;创建数据库失败1007&#xff1a;数据库已存在&#xff0c;创建数据库失败1008&#xff1a;数据库不存在&#xff0c;删除数据库失败1009&#xff1a;不能删除数据库文件导致…

Docker入门-安装

Centos7下安装Docker docker官方说至少Linux 内核3.8 以上&#xff0c;建议3.10以上&#xff08;ubuntu下要linux内核3.8以上&#xff0c; RHEL/Centos 的内核修补过&#xff0c; centos6.5的版本就可以&#xff09; 1、把yum包更新到最新&#xff1a;yum update 2、安装需要的…

Docker原理之Namespaces

命名空间&#xff08;namespaces&#xff09;是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。 一、Namespaces 在日常使用 Linux 或者 macOS 时&#xff0c;我们并没有运行多个完全分离的服务器的需要&#xff0c;但是如果我们在服务器上启…

mysql 快速插入(insert)多条记录

方法1: INSERT INTO table(col_1, col_2,col_3) VALUES(1,11,111); INSERT INTO table(col_1, col_2,col_3)   VALUES(2,22,222); INSERT INTO table(col_1, col_2,col_3)   VALUES(3,33,333); 有没有更快捷的办法呢?答案是有(见方法2) 方法2: INSERT INTO table(col…

Docker原理之CGroups

控制组&#xff08;cgroups&#xff09;是 Linux 内核的一个特性&#xff0c;主要用来对共享资源进行隔离、限制、审计 等。只有能控制分配到容器的资源&#xff0c;才能避免当多个容器同时运行时的对系统资源的竞争。控制组技术最早是由 Google 的程序员 2006 年起提出&#x…

Mysql中的转义字符

字符串是多个字符组成的一个字符序列&#xff0c;由单引号( “”) 或双引号 ( “"”) 字符包围。(但在 ANSI 模式中运行时只能用单引号)。 例如&#xff1a; a string"another string"在一个字符串中&#xff0c;如果某个序列具有特殊的含义&#xff0c;每个序…

Docker原理之UnionFS

一、UnionFS Linux 的命名空间和控制组分别解决了不同资源隔离的问题&#xff0c;前者解决了进程、网络以及文件系统的隔离&#xff0c;后者实现了 CPU、内存等资源的隔离&#xff0c;但是在 Docker 中还有另一个非常重要的问题需要解决 - 也就是镜像。 镜像到底是什么&#…

教你精确编写高质量高性能的MySQL语法

在应用系统开发初期&#xff0c;由于开发数据库数据比较少&#xff0c;对于查询SQL语句&#xff0c;复杂视图的编写&#xff0c;刚开始不会体会出SQL语句各种写法的性能优劣&#xff0c;但是如果将应用系统提交实际应用后&#xff0c;随着数据库中数据的增加&#xff0c;系统的…

Docker使用-Hello World

1、docker pull hello-world 拉去docker远程仓库中的Hello World的镜像 [rootCarlota2 ~]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e09…

Mysql数据库引擎快速指南

如果你是个赛车手并且按一下按钮就能够立即更换引擎而不需要把车开到车库里去换&#xff0c;那会是怎么感觉呢&#xff1f; MySQL 数据库为开发人员所做的就好像是按按钮换引擎&#xff1b;它让你选择数据库引擎&#xff0c;并给你一条简单的途径来切换它。 MySQL的自带引擎肯…

Docker使用-构建MySQL

拉取官方镜像&#xff08;我们这里选择5.7&#xff0c;如果不写后面的版本号则会自动拉取最新版&#xff09; docker pull mysql:5.7 # 拉取 mysql 5.7 docker pull mysql # 拉取最新版mysql镜像MySQL文档地址 检查是否拉取成功 $ sudo docker images一般来说数据库容…

Java集合:什么是Java集合?

一、集合的由来 通常&#xff0c;我们的Java程序需要根据程序运行时才知道创建了多少个对象。但若非程序运行&#xff0c;程序开发阶段&#xff0c;我们根本不知道到底需要多少个数量的对象&#xff0c;甚至不知道它的准确类型。为了满足这些常规的编程需要&#xff0c;我们要…

Mysql截取中英数混合的字符串

在 mysql中截取字符串我们用 LEFT函数 LEFT(str,len) 返回从字符串str 开始的len 最左字符。 mysql> SELECT LEFT(foobarbar, 5); -> fooba 手册上只介绍了截取英文字符串的方法&#xff0c;中文或者中英文的怎么办呢&#xff1f;以下是截取中英混合的字符串(中国人…

Java集合:Collection接口

Collection是一个接口&#xff0c;继承自Iterable。我们先看一下Iterable接口的源码 一、Iterable package java.lang;import java.util.Iterator; import java.util.Objects; import java.util.Spliterator; import java.util.Spliterators; import java.util.function.Cons…

Java集合:List集合

List集合 List集合类中元素有序、且可重复&#xff0c;集合中的每个元素都有其对应的顺序索引。 List容器中的元素都对应一个整数型的序号记载其在容器中的位置&#xff0c;可以根据序号存取容器中的元素。 JDK API中List接口的实现类常用的有&#xff1a;ArrayList、LinkList和…

MySQL为什么要set names

大家都知道SET NAMES x相当于SET character_set_client x;SET character_set_results x;SET character_set_connection x; 以下从MySQL5.0官方文档上摘录了相关内容&#xff0c;并翻译&#xff0c;说明了相关系统变量的用处&#xff1a; What character set is the statem…