我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java别名Alias是如何工作的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java别名Alias是如何工作的

前言

在Java中,当引用(不止一个)链接到同一个对象时,使用Alias(别名)。别名的问题是,当用户写入特定对象时,其他几个引用的所有者不希望该对象发生更改。在这里,包含别名的代码可能会很快变得有点混乱,而且调试起来也非常繁琐。总的来说,别名是一个应该避免或谨慎使用的过程。让我们看看Java Alias是如何工作的。

Alias在Java中是如何工作的?

如前所述,当多个引用链接到同一对象时,会使用别名。这还意味着一个位置有几个别名可以修改,这些特定的别名有几种类型。

让我们举个例子。xy是两个变量名,有两种类型xyy扩展了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上的一些示例程序。

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

在执行代码时,可以看到发生了名为ArrayStoreException的异常。这是怎么发生的?必须改变什么?有可能解决这个问题吗?

对出现这种异常的唯一原因是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();
}
}

当X的对象变为Y的对象时,在上面的第一个程序中引发了异常,但在这里没有发生。

另外一个例子:

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

在这个程序中,首先创建两个整数变量a和b。然后代码检查a和b是否相等。在下一步中,a被分配给b。再次检查a和b是否相似。在执行代码时,两个结果都将被打印为true。

如果使用两个数组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);
}
}

在这个程序中,第一步创建两个数组a和b。然后,与上述程序类似,检查a和b是否相等。之后,将a分配给b,并再次检查两者是否相似。在执行代码时,可以看到第一次检查的输出为false,第二次检查的输出为true。这是因为Java别名可以工作。

结论

当多个对象的引用链接到同一个对象时,在Java中使用别名。别名的缺点是,当用户写入特定对象时,其他一些引用的所有者不会猜测该对象会发生更改。

到此这篇关于Java别名Alias是如何工作的的文章就介绍到这了,更多相关Java别名Alias内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java别名Alias是如何工作的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Flex是如何工作的

小编给大家分享一下Flex是如何工作的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Flex是如何工作的该部分文档的内容是为用户提供关于Adobe?Flex工作机
2023-06-17

cdn是如何工作的

CDN(内容分发网络)是一种通过在全球分布式网络中放置服务器来加速内容传输的技术。它的工作原理如下:1. 缓存内容:CDN将原始内容(如网页、图片、视频等)缓存在离用户最近的服务器上。这些服务器通常被称为边缘节点。2. 内容路由:当用户请求
2023-08-25

Python中import是如何工作的

这篇“Python中import是如何工作的”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中import是如何工
2023-07-06

java中NIO通道和缓冲区是如何工作的

这篇文章将为大家详细讲解有关java中NIO通道和缓冲区是如何工作的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通道 和 缓冲区 是 NIO 中的核心对象,几乎在每一个 I/O 操作中都要使用它们。通道
2023-06-17

React中Hooks是如何工作的

React中Hooks是如何工作的?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. React Hooks VS 纯函数React Hook 说白了就是 Re
2023-06-15

Cassandra的索引是如何工作的

Cassandra 使用基于哈希的分布式哈希表来存储数据,并使用索引来快速查找数据。Cassandra 的索引工作方式如下:Secondary Indexes:Cassandra 支持二级索引,允许用户在表的非主键列上创建索引。当在非主键列
Cassandra的索引是如何工作的
2024-04-09

java是如何操作redis的

本文详细介绍了使用Java语言操作Redis的三种方法:Jedis:轻量级、高性能客户端库,提供同步API。SpringDataRedis:基于SpringFramework,提供Spring风格的抽象。Redisson:功能丰富的客户端,提供原子操作和分布式功能。选择方法时,应考虑同步或异步操作需求、功能丰富性、与其他框架的集成等因素。本文还提供了代码示例,演示如何使用这些方法连接Redis、获取键值对和创建分布式锁。
java是如何操作redis的
2024-04-02

Node.js Socket.io库:它是如何工作的?

Node.js Socket.io库是一个用于创建实时应用程序的JavaScript库。它允许应用程序在客户端和服务器之间建立双向通信。
Node.js Socket.io库:它是如何工作的?
2024-02-11

Android中服务是如何工作的

在Android中,服务是一种可以在后台运行的组件,可以执行长时间运行的操作或监听外部事件。服务可以在应用程序中启动,停止或绑定到其他组件。服务可以通过以下方法启动:使用startService()方法启动服务。该方法会调用服务的onSt
Android中服务是如何工作的
2024-04-03

Python中的列表是如何工作的?

Python中的列表是一种非常常用的数据结构。它可以用于存储一系列的元素,并且允许进行各种操作,如添加、删除、修改和访问元素等。在本文中,我们将详细介绍Python中的列表是如何工作的,并附上具体的代码示例。Python中的列表是一个有序的
2023-10-22

Python中的字典是如何工作的?

Python中的字典是如何工作的?字典是Python中一种非常重要的数据结构,它以键值对的形式存储数据,并且可以根据键快速地获取对应的值。本文将详细介绍字典的使用方法和底层实现机制,为读者深入理解字典提供帮助。创建字典在Python中,我们
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录