Android java基礎_反射

一.反射的基本概念

反射(Reflection),Java 中的反射機制是指,Java 程序在運行期間可以獲取到一個對象的全部信息。

反射機制一般用來解決Java 程序運行期間,對某個實例對象一無所知的情況下,如何調用該對象內部的方法問題。

反射的原理:

反射機制允許 Java 程序在運行時調用Reflection API取得任何類的內部信息(比如成員變量、構造器、成員方法等),并能操作類的實例對象的屬性以及方法。

在Java 程序中,JVM 加載完一個類后,在堆內存中就會產生該類的一個 Class 對象,一個類在堆內存中最多只會有一個 Class 對象,這個Class 對象包含了該類的完整結構信息,我們通過這個 Class 對象便可以得到該類的完整結構信息。

這個 Class 對象就像是一面鏡子,我們透過這面鏡子可以清楚地看到類的結構信息。因此,我們形象的將獲取Class對象的過程稱為:反射。

二.反射的例子

package a.b.c.d;class Person {private String name;void setName(String name) { this.name = name; }String getName() { return this.name; }};public class Reflect {public static void main(String args[]) {Person p = new Person();Class<?> c1 = null;try {c1 = Class.forName("a.b.c.d.Person");} catch (ClassNotFoundException e) {System.out.println(e);}Class<?> c2 = p.getClass();Class<?> c3 = Person.class;System.out.println(c1.getName());System.out.println(c2.getName());System.out.println(c3.getName());}
}

運行:

root@ubuntu:/home/topeet/guyilian# mkdir -p a/b/c/d
root@ubuntu:/home/topeet/guyilian# ls
a  Person.class  Reflect.class  Reflect.java
root@ubuntu:/home/topeet/guyilian# mv Reflect.java a/b/c/d
root@ubuntu:/home/topeet/guyilian# ls
a  Person.class  Reflect.class
root@ubuntu:/home/topeet/guyilian# javac a/b/c/d/Reflect.java 
root@ubuntu:/home/topeet/guyilian# java a/b/c/d/Reflect
a.b.c.d.Person
a.b.c.d.Person
a.b.c.d.Person

三.反射API

?調用某個類的對象的getClass()方法,即:對象.getClass();

Person p = new Person();
Class clazz = p.getClass();

?調用類的class屬性類獲取該類對應的Class對象,即:類名.class

Class clazz = Person.class;

?使用Class類中的forName()靜態方法(最安全,性能最好)即:Class.forName(“類的全路徑”)

Class clazz = Class.forName("類的全路徑");

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715335.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715335.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單源最短路的建圖方式

1129. 熱浪 - AcWing題庫 這道題可以有三種方法來做&#xff0c;樸素版的dijkstra、堆優化版的dijkstra和spfa算法 &#xff08;1&#xff09;spfa算法 這里的隊列用循環隊列&#xff0c;而不是像模板那樣用普通隊列是因為它的隊列長度不確定 import java.util.*;public class…

mysql 大數據量分批添加索引

先在測試環境測試&#xff0c;沒問題再上生產環境&#xff0c;避免生產環境數據庫負載過多而崩潰 創建存儲過程 DELIMITER //CREATE PROCEDURE batch_add_index_to_email() BEGINDECLARE done INT DEFAULT FALSE;DECLARE start_id INT DEFAULT 0;DECLARE end_id INT;DECLARE …

貝葉斯優化CNN分類(matlab代碼)

貝葉斯優化CNN分類matlab代碼 數據為Excel分類數據集數據。 數據集劃分為訓練集、驗證集、測試集&#xff0c;比例為8:1:1 數據處理: 在數據加載后&#xff0c;對數據進行了劃分&#xff0c;包括訓練集、驗證集和測試集&#xff0c;這有助于評估模型的泛化能力。 數據標準化…

13.7隊列的實戰(通過鏈表實現)

學個二叉樹&#xff0c;又要用上隊列的代碼&#xff0c;上學期學的隊列忘光光了&#xff0c;這不沒辦法回來復習咯 代碼&#xff1a; #include <stdio.h> #include <stdlib.h>typedef int ElemType; typedef struct LinkNode{ElemType data;struct LinkNode *next…

動態規劃(算法競賽、藍橋杯)--樹形DP沒有上司的舞會

1、B站視頻鏈接&#xff1a;E17 樹形DP Luogu P1352 沒有上司的舞會_嗶哩嗶哩_bilibili 題目鏈接&#xff1a;沒有上司的舞會 - 洛谷 #include <bits/stdc.h> using namespace std; const int N6010; int n; int w[N]; vector<int>a[N];//鄰接表 bool fa[N]; int…

011 Linux_線程概念與創建

前言 本文將會向你介紹線程的概念&#xff0c;以及線程是怎么被創建的 線程概念 一、進程是承擔系統資源的基本實體&#xff0c;線程是cpu調度的基本單位 首先&#xff0c;地址空間在邏輯上相當于進程的資源窗口&#xff0c; 每個進程都有這樣一個資源窗口。通過地址空間頁…

工控傳感器選型原則及舉例說明

工控傳感器選型原則及舉例說明 前言選型原則知識儲備光電傳感器接近開關和行程開關磁性開關模擬量傳感器類型及使用范圍數字量傳感器類型及使用范圍 選型舉例食品包裝箱運輸過程中的檢測有無倉庫提升伺服的極限位檢測產品高度檢測 前言 這里僅以數字量和模擬量信號的傳感器舉例…

Vue源碼系列講解——實例方法篇【二】(事件相關方法)

目錄 0.前言 1. vm.$on 1.1 用法回顧 1.2 內部原理 2. vm.$emit 2.1 用法回顧 2.2 內部原理 3. vm.$off 3.1 用法回顧 3.2 內部原理 4. vm.$once 4.1 用法回顧 4.2 內部原理 0.前言 與事件相關的實例方法有4個&#xff0c;分別是vm.$on、vm.$emit、vm.$off和vm.$o…

前端面試知識點合集

原型和原型鏈 任何函數都可以作為構造函數。當該函數通過 new 關鍵字調用的時候&#xff0c;就稱之為構造函數。 var Parent function(){}//定義一個函數&#xff0c;那它只是一個普通的函數&#xff0c;不能稱它為構造函數var instance new Parent(); //這時這個Parent就不…

C#理論 —— WPF 應用程序Console 控制臺應用

文章目錄 1. WPF 應用程序1.1 工程創建1.2 控件1.2.1 控件的公共屬性1.2.1 TextBox 文本框1.2.1 Button 按鈕 *. Console 控制臺應用1.1 工程創建 1. WPF 應用程序 1.1 工程創建 Visual Studio 中新建項目 - 選擇WPF 應用程序&#xff1b; 1.2 控件 1.2.1 控件的公共屬性 …

如何備份和恢復MySQL數據庫?有哪些常見的備份工具和策略?

如何備份和恢復MySQL數據庫&#xff1f;有哪些常見的備份工具和策略&#xff1f; 在數據庫管理中&#xff0c;備份和恢復是非常重要的環節&#xff0c;它們保障了數據的安全性和可恢復性。對于MySQL這樣的關系型數據庫管理系統&#xff0c;了解并實施有效的備份策略至關重要。…

Linux網絡編程——網絡基礎

Linux網絡編程——網絡基礎 1. 網絡結構模式1.1 C/S 結構1.2 B/S 結構 2. MAC 地址3. IP地址3.1 簡介3.2 IP 地址編址方式 4. 端口4.1 簡介4.2 端口類型 5. 網絡模型5.1 OSI 七層參考模型5.2 TCP/IP 四層模型 6. 協議6.1 簡介6.2 常見協議6.3 UDP 協議6.4 TCP 協議6.5 IP 協議6…

【兔子機器人】根據自身機器人參數修改simulink模型

關節電機 機體初始高度 &#xff01;&#xff01;&#xff01;接下來嘗試修改各腿的坐標朝向

LeetCode54題:螺旋矩陣(python3)

路徑的長度即為矩陣中的元素數量&#xff0c;當路徑的長度達到矩陣中的元素數量時即為完整路徑&#xff0c;將該路徑返回。 循環打印&#xff1a; “從左向右、從上向下、從右向左、從下向上” 四個方向循環打印。 class Solution:def spiralOrder(self, matrix: List[List[i…

怎么對App進行功能測試

測試人員常被看作是bug的尋找者&#xff0c;但你曾想過他們實際是如何開展測試的嗎&#xff1f;你是否好奇他們究竟都做些什么&#xff0c;以及他們如何在一個典型的技術項目中體現價值&#xff1f;本文將帶你經歷測試人員的思維過程&#xff0c;探討他們測試app時的各種考慮. …

Android和Linux的嵌入式開發差異

最近開始投入Android的懷抱。說來慚愧&#xff0c;08年就聽說這東西&#xff0c;當時也有同事投入去看&#xff0c;因為惡心Java&#xff0c;始終對這玩意無感&#xff0c;沒想到現在不會這個嵌入式都快要沒法搞了。為了不中年失業&#xff0c;所以只能回過頭又來學。 首先還是…

虛擬內存與mmap,brk

虛擬內存與mmap,brk 基本概念及相關術語 1.1 基本概念 虛擬內存使得應用程序認為它擁有連續的可用的內存&#xff08;一個連續完整的地址空間&#xff09;&#xff0c;而實際上&#xff0c;它通常是被分隔成多個物理內存碎片&#xff0c;還有部分暫時存儲在外部磁盤存儲器上&…

【C語言】linux內核generic_xdp_tx

一、中文注釋 /* 在執行通用XDP時&#xff0c;我們必須繞過qdisc層和網絡挖掘點&#xff0c;* 以匹配驅動內XDP的行為。*/ void generic_xdp_tx(struct sk_buff *skb, struct bpf_prog *xdp_prog) {struct net_device *dev skb->dev; // 獲取skb對應的網絡設備struct netd…

面試高頻率問答題目

索引&#xff1a; 主鍵索引&#xff1a;表的id &#xff08;唯一 且 不能為空&#xff09; 唯一索引&#xff1a;表User 假設有account 字段 &#xff0c;用戶名不重復 &#xff08;唯一 可以為空&#xff09; 復合索引&#xff1a;where() 的條件 用戶名&#xff0c;密碼 …

MySQL:函數

提醒&#xff1a; 設定下面的語句是在數據庫名為 db_book里執行的。 創建user_info表 注意&#xff1a;pwd為密碼字段&#xff0c;這里使用了VARCHAR(128)類型&#xff0c;為了后面方便對比&#xff0c;開發項目里一般使用char(32)&#xff0c;SQL語句里使用MD5加密函數 USE db…