首頁  >  文章  >  Java  >  Java 別名

Java 別名

PHPz
PHPz原創
2024-08-30 15:45:29834瀏覽

在 Java 中,當使用多個引用來引用同一個物件時,通常將其稱為「別名」。別名的問題是當使用者向特定物件及其擁有者寫入多個其他參考時,不期望該物件發生變化。在這裡,包含別名的程式碼很快就會變得混亂,而且調試起來也非常乏味。讓我們看看 Java Alias 是如何運作的。

廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

別名在 Java 中如何運作?

正如我們之前所討論的,當多個引用與同一物件關聯時,就會發生別名。這也意味著一個位置有多個可以修改的別名,而這些特定別名有多種類型。

讓我們舉個例子。 x 和 y 是兩個變數名,有兩種類型:X 和 Y。 Y 擴充 X。

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

在記憶中,它們都指向同一個位置。

Java 別名

x 和 y 所指向的記憶體位置。然而,實際保存的物件會選擇在運行時呼叫哪個方法。

讓我們來看另一個例子。

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

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

當存在兩個別名變數時,導致一個變數的變更也會反映在另一個變數上,如下所示。

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

執行程式碼時,您將看到在一個矩形上引起的變更也發生在第二個矩形上。這是 Java 中 Alias 需要注意的主要事項之一。

Java 別名範例

以下是 Java Alias 的一些範例程式。

範例#1

代碼:

//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();
}
}

輸出:

Java 別名

這是如何發生的?需要改變什麼?這個問題能解決嗎?

是的! !出現此異常的唯一原因是 Java 在執行時間管理別名。只有在運行時它才能知道第一個應該是 Y 的物件而不是 X。

//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();
}
}

輸出:

Java 別名

範例#2

代碼:

//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);
}
}

輸出:

Java 別名

如果使用兩個陣列 a 和 b 來取代整數變數會發生什麼事?

//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);
}
}

輸出:

Java 別名

在此程式中,第一步建立了兩個陣列 a 和 b。然後,與上面的程序類似,a和b檢查它們是否相等。執行程式碼時可以看到,第一次檢查的輸出為 false,第二次檢查的輸出為 true。這是因為 Java Alias 有效。

結論

別名的缺點是當使用者寫入特定物件時,而擁有者對於其他一些引用,無法猜測該物件會發生變更。

以上是Java 別名的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:Java驗證器下一篇:Java驗證器