日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 运行时类型_Java基础之RTTI 运行时类型识别

發布時間:2023/12/13 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 运行时类型_Java基础之RTTI 运行时类型识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

運行時類型識別(RTTI, Run-Time Type Identification)是Java中非常有用的機制,在Java運行時,RTTI維護類的相關信息。

多態(polymorphism)是基于RTTI實現的。RTTI的功能主要是由Class類實現的。

Class類

Class類是"類的類"(class of classes)。如果說類是對象的抽象和集合的話,那么Class類就是對類的抽象和集合。

每一個Class類的對象代表一個其他的類。比如下面的程序中,Class類的對象c1代表了Human類,c2代表了Woman類。

public class Test

{

public static void main(String[] args)

{

Human aPerson = new Human();

Class c1 = aPerson.getClass();

System.out.println(c1.getName());

Human anotherPerson = new Woman();

Class c2 = anotherPerson.getClass();

System.out.println(c2.getName());

}

}

class Human

{

/**

* accessor

*/

public int getHeight()

{

return this.height;

}

/**

* mutator

*/

public void growHeight(int h)

{

this.height = this.height + h;

}

private int height;

}

class Woman extends Human

{

/**

* new method

*/

public Human giveBirth()

{

System.out.println("Give birth");

return (new Human());

}

}

當我們調用對象的getClass()方法時,就得到對應Class對象的引用。

在c2中,即使我們將Women對象的引用向上轉換為Human對象的引用,對象所指向的Class類對象依然是Woman。

Java中每個對象都有相應的Class類對象,因此,我們隨時能通過Class對象知道某個對象“真正”所屬的類。無論我們對引用進行怎樣的類型轉換,對象本身所對應的Class對象都是同一個。當我們通過某個引用調用方法時,Java總能找到正確的Class類中所定義的方法,并執行該Class類中的代碼。由于Class對象的存在,Java不會因為類型的向上轉換而迷失。這就是多態的原理。

getClass: 我是誰?

除了getClass()方法外,我們還有其他方式調用Class類的對象。

public class Test

{

public static void main(String[] args)

{

Class c3 = Class.forName("Human");

System.out.println(c1.getName());

Class c4 = Woman.class

System.out.println(c2.getName());

}

}

上面顯示了兩種方式:

forName()方法接收一個字符串作為參數,該字符串是類的名字。這將返回相應的Class類對象。

Woman.class方法是直接調用類的class成員。這將返回相應的Class類對象。

Class類的方法

Class對象記錄了相應類的信息,比如類的名字,類所在的包等等。我們可以調用相應的方法,比如:

getName()???????? 返回類的名字

getPackage()????? 返回類所在的包

可以利用Class對象的newInstance()方法來創建相應類的對象,比如:

Human newPerson = c1.newInstance();

newInstance()調用默認的不含參數的構建方法。

我們可以獲得類定義的成員:

getFields()?????? 返回所有的public數據成員

getMethods()????? 返回所有的public方法

可以進一步使用Reflection分析類。這里不再深入。

Class類更多的方法可查詢官方文檔:

Class類的加載

當Java創建某個類的對象,比如Human類對象時,Java會檢查內存中是否有相應的Class對象。

如果內存中沒有相應的Class對象,那么Java會在.class文件中尋找Human類的定義,并加載Human類的Class對象。

在Class對象加載成功后,其他Human對象的創建和相關操作都將參照該Class對象。

RTTI 運行時類型識別 及異常處理

RTTI ? 運行時類型識別 typeid ?------ ?dynamic_cast dynamic_cast 注意事項: 1.只能應用于指針和引用之間的轉化 2.要轉換的類型中必須包含虛函數 3. ...

框架原理第二講,RTTI,運行時類型識別.(以MFC框架講解)

框架原理第二講,RTTI,運行時類型識別.(以MFC框架講解) 一丶什么是RTTI,以及RTTI怎么設計 通過第一講,我們知道了怎么樣升成一個窗口了,以及簡單的消息循環. 第二講則是主要講解RTTI ...

MFC原理第三講.RTTI運行時類型識別

MFC原理第三講.RTTI運行時類型識別 一丶什么是RTTI RTTI. 運行時的時候類型的識別. 運行時類型信息程序.能夠使用基類(父類)指針 或者引用 來檢查這些指針或者引用所指的對象. 實際派生 ...

RTTI(運行時類型識別)

C++為了能夠在運行時正確判斷一個對象確切的類型,加入了RTTI和type_info. type_info 為每一個類型增加一個type_info對象. 為了能夠在運行時獲得對象的類型信息type_i ...

RTTI(運行時類型識別),typeid,dynamic_cast

dynamic_cast注意: 1.只能應用于指針和引用的轉換: 2.要轉換的類型中必須包含虛函數: 3.轉換成功則返回地址,如果失敗則返回NULL: 參見項目:RTTI

RTTI (Run-Time Type Identification,通過運行時類型識別) 轉

參考一: RTTI(Run-Time Type Identification,通過運行時類型識別)程序能夠使用基類的指針或引用來檢查這些指針或引用所指的對象的實際派生類型. ? RTTI提供了以下兩個 ...

MFC六大核心機制之二:運行時類型識別(RTTI)

上一節講的是MFC六大核心機制之一:MFC程序的初始化,本節繼續講解MFC六大核心機制之二:運行時類型識別(RTTI). typeid運算子 運行時類型識別(RTTI)即是程序執行過程中知道某個對象屬 ...

RTTI(運行時類型識別)

運行時類型識別(Run-time type identification , RTTI),是指在只有一個指向基類的指針或引用時,確定所指對象的準確類型的操作.其常被說成是C++的四大擴展之一(其他三個 ...

C/C++雜記:運行時類型識別(RTTI)與動態類型轉換原理

運行時類型識別(RTTI)的引入有三個作用: 配合typeid操作符的實現: 實現異常處理中catch的匹配過程: 實現動態類型轉換dynamic_cast. 1. typeid操作符的實現 1.1. ...

隨機推薦

iOS 開發筆記 -- 各種細枝末節的知識(水滴石穿)

在此總結整理,遇到的各種的小問題: 1.通過從字典(數組)中取出的NSString的length==0 作為if的判斷條件導致的carsh: 由于在字典中通過Key取出值之后直接做了length相關操 ...

我和Java的故事-------第1彈

前言:興趣是學習任何新知識最好的老師 --------------------------------------------------------------------------------- ...

【Hadoop需要的Jar包】Hadoop編程-pom.xml文件

JDK版本的要求 Hadoop 2.7 以及之后的版本,需要JDK 7: Hadoop 2.6 以及之前的版本,支持JDK 6: 對于Hadoop1.x.x版本,只需要引入1個jar: hadoop- ...

vim使用指北 ---- Advanced Editing

本節介紹vi和ex的一些高級功能. 配置vi 配置文件.exrc可以保存在你的主目錄下,在vi啟動的時候執行這個配置文件.但在當前工作目錄下可以放置一個配置文件,對當前目錄做一個自定義配置. :set ...

Swift —構造函數與存儲屬性初始化-備

構造函數的主要作用是初始化實例,其中包括:初始化存儲屬性和其它的初始化.在Rectangle類或結構體中,如果在構造函數中初始化存儲屬性width和height后,那么在定義他們時就不需要初始化了. ...

Javascript之Dom學習

1.簡介:DOM是一套對文檔的內容進行抽象和概念化的方法.在現實世界里,人們對"世界對象模型"一定不會陌生,當人們用"房子","汽車"等這一 ...

OFFICE 您正試圖運行的函數包含有宏或需要宏語言支持的內容。

故障現象:打開WORD的時候,提示“您正試圖運行的函數包含有宏或需要宏語言支持的內容.而在安裝此軟件時,您(或您的管理員)選擇了不安裝宏或控件的支持功能”. 提示現象: 解決辦法 : 1.進入“控制面 ...

Codeforces 101572 D - Distinctive Character

D - Distinctive Character 思路:bfs 使最大的匹配數最小,轉換一下,就是使最小的不匹配數最大,用bfs找最大的距離 代碼: #pragma GCC optimize(2) ...

python3學習筆記一(標識符、關鍵字)

查看Python版本 可以命令窗口,windows使用win+R調出cmd運行框,輸入以下命令: python -V 進入python的交互編輯模式,也可查看 D:\Python3.6\Scripts ...

sql server 2008 數據庫可疑的解決步驟

備份并新建同名數據庫,并替換原數據文件 1 把問題數據庫備份后直接刪除 停掉SQLSERVER服務,把服務器上出問題的數據庫, 假設名稱為 test的數據庫文件及日志文件備份到其他目錄,然后直接將其刪 ...

總結

以上是生活随笔為你收集整理的java 运行时类型_Java基础之RTTI 运行时类型识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。