最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java強(qiáng)制類型轉(zhuǎn)換原理詳解(父類轉(zhuǎn)子類、子類轉(zhuǎn)父類)

 更新時間:2023年12月27日 15:33:01   作者:lucky_fd_  
這篇文章主要給大家介紹了關(guān)于Java強(qiáng)制類型轉(zhuǎn)換原理(父類轉(zhuǎn)子類、子類轉(zhuǎn)父類)的相關(guān)資料,所謂的強(qiáng)制類型轉(zhuǎn)換,其實是自動類型轉(zhuǎn)換的逆過程,在數(shù)據(jù)類型兼容的情況下,將容量大的數(shù)據(jù)類型轉(zhuǎn)換為容量小的數(shù)據(jù)類型,需要的朋友可以參考下

前言

在Java中,對象的強(qiáng)制轉(zhuǎn)換(也稱為類型轉(zhuǎn)換)是將一個對象的引用轉(zhuǎn)換為另一個類的引用,前提是這兩個類之間存在繼承或?qū)崿F(xiàn)關(guān)系。強(qiáng)制轉(zhuǎn)換可能會導(dǎo)致運(yùn)行時異常,因為在轉(zhuǎn)換的過程中,如果對象的實際類型與轉(zhuǎn)換的目標(biāo)類型不兼容,就會拋出ClassCastException異常。

子類轉(zhuǎn)父類

Son s = new Son();
// 類型提升
Father f = (Father)s;//可以

分析: 子類繼承父類,就擁有了父類的一切。某種程度上說,兒子可以代替爸爸,爸爸能做的事兒子也可以做。子類轉(zhuǎn)父類后,父類對象f引用指向子類對象,所以其本質(zhì)任然是子類,f只能調(diào)用父類的方法,如果子類重寫了父類的方法,則調(diào)用的是子類的方法(多態(tài)性)

父類轉(zhuǎn)子類

1. 真實父類對象轉(zhuǎn)子類對象,報ClassCastException異常

Father f = new Father();
Son s = (Son)f;//出錯 ClassCastException

分析: 創(chuàng)建一個父類的實例,想要強(qiáng)制把父類對象轉(zhuǎn)換成子類的對象,是不行的。父親有的,通過繼承兒子也有,反過來兒子有的父親卻不一定有。

2. “假”父類對象轉(zhuǎn)子類對象,可以

Father f = new Son();
Son s = (Son)f;//可以

分析:只有父類對象本身就是用子類new出來的時候, 才可以在將來被強(qiáng)制轉(zhuǎn)換為子類對象。這個時候父類的本質(zhì)依然是子類對象(兒子只是裝成了爸爸),子類有的屬性f都擁有,只是f暫時不能操作子類特有的屬性,所以可以轉(zhuǎn)換回為子類對象(變回兒子本身)

底層實現(xiàn)原理

底層原理是通過虛擬機(jī)中的類型檢查和類型信息來實現(xiàn)的。當(dāng)進(jìn)行強(qiáng)制類型轉(zhuǎn)換時,虛擬機(jī)會在運(yùn)行時檢查對象的實際類型是否與轉(zhuǎn)換的目標(biāo)類型兼容。如果是兼容的,就會將對象引用轉(zhuǎn)換為目標(biāo)類型的引用,否則會拋出ClassCastException異常。

在Java中,對象的類型信息是通過兩種主要機(jī)制來處理的:對象頭和虛方法表。

  • 對象頭:每個Java對象都有一個對象頭,其中包含了一些用于虛擬機(jī)處理對象的元數(shù)據(jù)。對象頭中包含了一個指向類元數(shù)據(jù)的指針(指向?qū)ο蟮念惖男畔ⅲ?。這使得虛擬機(jī)可以在運(yùn)行時確定對象的實際類型。

  • 虛方法表:對于每個類,Java虛擬機(jī)會維護(hù)一個虛方法表,其中包含了類的虛方法的地址。虛方法表允許在運(yùn)行時動態(tài)地解析方法調(diào)用,而不是在編譯時靜態(tài)地綁定。通過虛方法表,Java虛擬機(jī)可以找到并調(diào)用對象的實際方法。

在進(jìn)行強(qiáng)制類型轉(zhuǎn)換時,虛擬機(jī)會首先檢查對象頭中指向類元數(shù)據(jù)的指針,然后查找目標(biāo)類型的類信息。如果目標(biāo)類型是源類型的子類(或?qū)崿F(xiàn)了源類型的接口),那么轉(zhuǎn)換是有效的。虛擬機(jī)會根據(jù)實際類型來調(diào)整對象引用的指針,使其指向目標(biāo)類型的類信息和虛方法表,從而實現(xiàn)類型轉(zhuǎn)換。

然而,如果目標(biāo)類型不是源類型的子類(或未實現(xiàn)源類型的接口),虛擬機(jī)將無法進(jìn)行有效的轉(zhuǎn)換,這時會拋出ClassCastException異常。

總結(jié):Java對象的強(qiáng)制類型轉(zhuǎn)換是通過虛擬機(jī)在運(yùn)行時檢查對象的實際類型,并根據(jù)類型信息來調(diào)整對象引用的指針來實現(xiàn)的。這樣的機(jī)制使得Java具有動態(tài)類型的特性,但也需要開發(fā)人員在進(jìn)行類型轉(zhuǎn)換時注意類型的兼容性,以避免ClassCastException異常。

總結(jié)

到此這篇關(guān)于Java強(qiáng)制類型轉(zhuǎn)換原理的文章就介紹到這了,更多相關(guān)Java強(qiáng)制類型轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于@Transactional事務(wù)嵌套使用方式

    關(guān)于@Transactional事務(wù)嵌套使用方式

    Spring框架通過@Transactional注解來管理事務(wù),它可以作用于類和方法上,用于聲明事務(wù)的屬性,如傳播行為、隔離級別、超時時間等,Spring事務(wù)是基于AOP實現(xiàn)的,它在運(yùn)行時為加了@Transactional注解的方法或類創(chuàng)建代理
    2024-11-11
  • Java 提取照片的EXIF信息批量重命名

    Java 提取照片的EXIF信息批量重命名

    這篇文章主要介紹了Java 提取照片的EXIF信息批量重命名的方法,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-04-04
  • Java類成員訪問權(quán)限控制知識總結(jié)

    Java類成員訪問權(quán)限控制知識總結(jié)

    這篇文章主要介紹了Java類成員訪問權(quán)限控制知識總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • 使用lombok@Data啟動項目報錯問題及解決

    使用lombok@Data啟動項目報錯問題及解決

    在使用Lombok時,可能會遇到實體類中的@Data注解不生效,導(dǎo)致get方法找不到的問題,解決這一問題通常需要三個步驟:首先,檢查項目設(shè)置中編譯規(guī)則是否勾選;其次,確認(rèn)IDE中是否安裝了Lombok插件
    2024-10-10
  • Java 數(shù)組迭代你會用嗎

    Java 數(shù)組迭代你會用嗎

    Java 數(shù)組是我們學(xué)習(xí)或工作中常用到的數(shù)據(jù)結(jié)構(gòu),我們會經(jīng)常寫數(shù)組迭代的代碼,本文介紹三種數(shù)組迭代的方式,感興趣的可以了解一下
    2021-09-09
  • Java中實現(xiàn)接口與繼承的區(qū)別及說明

    Java中實現(xiàn)接口與繼承的區(qū)別及說明

    這篇文章主要介紹了Java中實現(xiàn)接口與繼承的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 基于Maven導(dǎo)入pom依賴很慢的解決方案

    基于Maven導(dǎo)入pom依賴很慢的解決方案

    這篇文章主要介紹了Maven導(dǎo)入pom依賴很慢的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java Builder模式實現(xiàn)原理及優(yōu)缺點(diǎn)解析

    Java Builder模式實現(xiàn)原理及優(yōu)缺點(diǎn)解析

    這篇文章主要介紹了Java Builder模式實現(xiàn)原理及優(yōu)缺點(diǎn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 使用Java生成和識別二維碼的簡易教程

    使用Java生成和識別二維碼的簡易教程

    在當(dāng)今瞬息萬變的商業(yè)和技術(shù)環(huán)境中,二維碼已成為快速、高效信息傳遞的代名詞,本文將為您介紹 Spire.Barcode for Java 這一強(qiáng)大工具,它能幫助您輕松應(yīng)對Java應(yīng)用程序中的二維碼生成與識別挑戰(zhàn),需要的朋友可以參考下
    2025-09-09
  • 淺談SpringBoot如何正確攔截thymeleaf異常

    淺談SpringBoot如何正確攔截thymeleaf異常

    Thymeleaf是一個模板引擎工具,主要用于頁面渲染操作,本文主要介紹了淺談SpringBoot如何正確攔截thymeleaf異常,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09

最新評論

和林格尔县| 扬中市| 安吉县| 赤峰市| 西峡县| 剑阁县| 柳州市| 和平县| 平原县| 上高县| 祁门县| 镶黄旗| 昭苏县| 海城市| 湟源县| 临澧县| 青州市| 海安县| 孝义市| 台中市| 理塘县| 宜城市| 兴和县| 德江县| 霞浦县| 吉木乃县| 桂平市| 敦化市| 景宁| 景德镇市| 浮梁县| 阜康市| 二连浩特市| 苗栗县| 德州市| 日土县| 固镇县| 临泽县| 北票市| 新泰市| 扶绥县|