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.pswp.cn/news/535727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535727.shtml
英文地址,請注明出處:http://en.pswp.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…