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

Java別名Alias是如何工作的

 更新時間:2022年04月14日 15:08:45   作者:?sofia??????  
這篇文章主要介紹了Java別名Alias是如何工作的,別名的問題是,當(dāng)用戶寫入特定對象時,其他幾個引用的所有者不希望該對象發(fā)生更改,下文相關(guān)介紹需要的小伙伴可以參考一下

前言

在Java中,當(dāng)引用(不止一個)鏈接到同一個對象時,使用Alias(別名)。別名的問題是,當(dāng)用戶寫入特定對象時,其他幾個引用的所有者不希望該對象發(fā)生更改。在這里,包含別名的代碼可能會很快變得有點混亂,而且調(diào)試起來也非常繁瑣??偟膩碚f,別名是一個應(yīng)該避免或謹(jǐn)慎使用的過程。讓我們看看Java Alias是如何工作的。

Alias在Java中是如何工作的?

如前所述,當(dāng)多個引用鏈接到同一對象時,會使用別名。這還意味著一個位置有幾個別名可以修改,這些特定的別名有幾種類型。

讓我們舉個例子。xy是兩個變量名,有兩種類型xy。y擴(kuò)展了x。

Y[] y = new Y[10];
X[] x = y;
x[0] =  new X();
Y[0].func1();

在內(nèi)存中,它們都指向同一個位置。

Java別名是如何工作的

指向的內(nèi)存位置由x和y指向。但是,實際保存的對象選擇在運(yùn)行時調(diào)用哪個方法。

看另外一個例子:

Rectangle b1 = new Rectangle (0, 0, 50, 150);
Rectangle b2 = b1;

b1和b2都指同一個對象,或者我們可以說給定的對象有兩個名稱,比如b1和b2。與有兩個名字的人類似,對象也可以有兩個名字。

當(dāng)存在兩個別名變量時,導(dǎo)致一個變量的更改也會反映在另一個變量上,

如下所示:

System.out.println (b2.width);
b1.grow (40, 40);
System.out.println (b2.width);

在執(zhí)行代碼時,您將看到在一個矩形上引起的更改也發(fā)生在第二個矩形中。這是Java中Alias需要注意的主要問題之一。

Java別名示例

以下是Java Alias上的一些示例程序。

//class X
class X {
//function 1
public void func1()
{
System.out.println("called sample function 1");
}
}
//Class Y that extends the class X
class Y extends X
{
//function 1
public void func1()
{
System.out.println("called sample function 1");
}
//function 2
public void func2()
{
System.out.println("called sample function 2");
}
}
//main class
public class AliasExample {
//main method
public static void main(String[] args) {
Y[] y = new Y[10];
X[] x = y;
x[0] =  new X();
y[0].func1();
}
}

在執(zhí)行代碼時,可以看到發(fā)生了名為ArrayStoreException的異常。這是怎么發(fā)生的?必須改變什么?有可能解決這個問題嗎?

對出現(xiàn)這種異常的唯一原因是Java在運(yùn)行時管理別名。只有在運(yùn)行時,它才能知道第一個應(yīng)該是Y的對象,而不是X。要解決這個問題,必須更改上面的代碼。

因此,只有將示例程序更改為以下代碼時,它才能正確運(yùn)行。

//class X
class X {
//function 1
public void func1()
{
System.out.println("called sample function 1");
}
}
//Class Y that extends the class X
class Y extends X
{
//function 1
public void func1()
{
System.out.println("called sample function 1");
}
//function 2
public void func2()
{
System.out.println("called sample function 2");
}
}
//main class
public class AliasExample {
//main method
public static void main(String[] args) {
Y[] y = new Y[10];
X[] x = y;
x[0] =  new Y();
y[0].func1();
}
}

當(dāng)X的對象變?yōu)閅的對象時,在上面的第一個程序中引發(fā)了異常,但在這里沒有發(fā)生。

另外一個例子:

//main class
public class AliasExample {
//main method
public static void main(String[] args) {
//create two different arrays with same value
int a= 87;
int b=87;
//checks whether a and b are equal
System.out.println(a == b);
//assign b equal to a
b=a;
//checks whether a and b are equal
System.out.println(a == b);
}
}

在這個程序中,首先創(chuàng)建兩個整數(shù)變量a和b。然后代碼檢查a和b是否相等。在下一步中,a被分配給b。再次檢查a和b是否相似。在執(zhí)行代碼時,兩個結(jié)果都將被打印為true。

如果使用兩個數(shù)組a和b而不是整數(shù)變量,會發(fā)生什么?

這可以用下面給出的程序來解釋。

//main class
public class AliasExample {
//main method
public static void main(String[] args) {
//create two different arrays with same value
int []a = {81, 54, 83};
int []b = {81, 54, 83};
//checks whether a and b are equal
System.out.println(a == b);
//assign b equal to a
b=a;
//checks whether a and b are equal
System.out.println(a == b);
}
}

在這個程序中,第一步創(chuàng)建兩個數(shù)組a和b。然后,與上述程序類似,檢查a和b是否相等。之后,將a分配給b,并再次檢查兩者是否相似。在執(zhí)行代碼時,可以看到第一次檢查的輸出為false,第二次檢查的輸出為true。這是因為Java別名可以工作。

結(jié)論

當(dāng)多個對象的引用鏈接到同一個對象時,在Java中使用別名。別名的缺點是,當(dāng)用戶寫入特定對象時,其他一些引用的所有者不會猜測該對象會發(fā)生更改。

到此這篇關(guān)于Java別名Alias是如何工作的的文章就介紹到這了,更多相關(guān)Java別名Alias內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用MyBatis返回其它類對象的字段處理

    使用MyBatis返回其它類對象的字段處理

    這篇文章主要介紹了使用MyBatis返回其它類對象的字段處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java?Swing實現(xiàn)QQ登錄頁面

    Java?Swing實現(xiàn)QQ登錄頁面

    這篇文章主要為大家詳細(xì)介紹了Java?Swing實現(xiàn)QQ登錄頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 深入剖析Spring如何解決循環(huán)依賴

    深入剖析Spring如何解決循環(huán)依賴

    循環(huán)依賴(Circular?Dependency)是指兩個或多個Bean相互依賴,形成一個閉環(huán)的情況,本文將和大家深入探討一下Spring如何解決循環(huán)依賴,需要的可以參考下
    2025-04-04
  • SpringCloud Gateway 路由配置定位原理分析

    SpringCloud Gateway 路由配置定位原理分析

    本節(jié)主要了解系統(tǒng)中的謂詞與配置的路由信息是如何進(jìn)行初始化關(guān)聯(lián)生成路由對象的。每個謂詞工廠中的Config對象又是如何被解析配置的
    2021-07-07
  • 如何把本地idea上的項目上傳到github上(推薦)

    如何把本地idea上的項目上傳到github上(推薦)

    這篇文章主要介紹了如何把本地idea上的項目上傳到github上,本文通過圖文的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Jmeter?BlazeMeter實現(xiàn)web錄制過程

    Jmeter?BlazeMeter實現(xiàn)web錄制過程

    BlazeMeter是一款與Apache JMeter兼容的chrome插件,采用BlazeMeter可以方便的進(jìn)行流量錄制和腳本生成,作為接口測試腳本編寫的一個基礎(chǔ),這篇文章主要介紹了Jmeter?BlazeMeter實現(xiàn)web錄制,需要的朋友可以參考下
    2021-12-12
  • SpringBoot2底層注解@Import用法詳解

    SpringBoot2底層注解@Import用法詳解

    這篇文章主要為大家介紹了SpringBoot2底層注解@Import用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • MybatisPlus代碼生成器使用示例

    MybatisPlus代碼生成器使用示例

    MyBatis-Plus自動化的生成與數(shù)據(jù)庫表對應(yīng)的Java代碼文件,本文主要介紹了MybatisPlus代碼生成器使用示例,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • java Long==Long有趣的現(xiàn)象詳解

    java Long==Long有趣的現(xiàn)象詳解

    這篇文章主要給大家介紹了關(guān)于java Long==Long有趣的現(xiàn)象的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 使用JPA雙向多對多關(guān)聯(lián)關(guān)系@ManyToMany

    使用JPA雙向多對多關(guān)聯(lián)關(guān)系@ManyToMany

    這篇文章主要介紹了使用JPA雙向多對多關(guān)聯(lián)關(guān)系@ManyToMany,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

河东区| 永清县| 乌兰县| 年辖:市辖区| 韶关市| 博白县| 洪湖市| 南阳市| 合阳县| 崇礼县| 宁陕县| 百色市| 大连市| 商南县| 曲阜市| 舒兰市| 安龙县| 汶上县| 彭阳县| 应城市| 浮梁县| 新疆| 云安县| 马公市| 含山县| 页游| 漯河市| 张北县| 东阳市| 元阳县| 辽宁省| 恩施市| 蒲城县| 凌海市| 建宁县| 都江堰市| 朝阳市| 湘乡市| 依安县| 南乐县| 宁远县|