java clone数组_Java中的数组有对应的类么,为什么数组可以直接调用clone()方法?...
该问题从clone()方法开始引出。
clone()是基类Object类中的一个protected方法。
对该方法做以下测试
1. 在类A中调用类A实例a的clone()方法
public class A implements Cloneable {
public static void main(String[] args) throws CloneNotSupportedException {
A a = new A();
// 调用正确
A a2 = (A) a.clone();
}
}
以上调用成功,因为A是object的子类,继承了Object中的clone()方法,所以可以直接调用。
2. 在类B中调用类A实例a的clone()方法
public class B {
public static void main(String[] args) {
A a = new A();
// 调用失败
a.clone();
}
}
错误信息:
以上调用出错,A和B都是Object的子类,都继承了clone()方法,但不能在一个子类中调用另一个子类的protected方法。
如果需要在类B中实现对实例a的clone,类A需要重写clone方法,并且申明为public,如下:
类A:
public class A implements Cloneable {
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
类B:
public class B {
public static void main(String[] args) throws CloneNotSupportedException {
A a = new A();
// 调用成功
a.clone();
}
}
以上调用成功,因为类A重写了clone方法,并且申明为public。
3. 提出问题,数组为什么可以直接调用clone()方法
public class ArrayClone {
public static void main(String[] args) {
int[] array = {1, 1, 4, 7};
// 调用成功
array.clone();
}
}
如果把array理解成为Object的子类,那么该array应该不能在类ArrayClone中调用clone()方法。但是可以调用成功。
此外:
章节1中,直接在类A中调用实例a的clone()方法时,IDE明确指出clone()方法是protected的,智能提示上有个小钥匙。
而在章节3中,调用数组的clone()方法时,IDE提示该方法是public的,智能提示上有个打开的锁。
4. 提问
1. Java中是否有一个类对应数组?数组在jvm中是一个怎样的存在?
2. 数组的clone()方法是怎么实现的?为什么可以直接调用?为什么是public的?
3. 数组的.length方法是怎么实现的?为什么IDE点不进去源码?
java clone数组_Java中的数组有对应的类么,为什么数组可以直接调用clone()方法?...相关推荐
- java中集合类的转换_Java中的两个常用工具类及集合数组的相互转换
为了编程人员的方便及处理数据的安全性,Java特别提供了两个非常有用的工具类: 一.Collections 1.Collections类的特点: 集合框架的工具类.里面定义的都是静态方法. 2.Col ...
- java 递归 堆栈_Java中的堆栈安全递归
java 递归 堆栈 在本文中,摘自< Java中的函数编程 >一书,我解释了如何使用递归,同时避免了StackOverflow异常的风险. Corecursion正在使用第一步的输出作为 ...
- java cas 实现_Java中CAS 基本实现原理
一.前言 了解CAS,首先要清楚JUC,那么什么是JUC呢?JUC就是java.util.concurrent包的简称.它有核心就是CAS与AQS.CAS是java.util.concurrent.a ...
- java ftp 教程_Java 中两种ftp操作方式
最近看到几篇关于java中操作ftp的文章,所以想写一个总结贴,标记一下,方便以后应用. 首先,我们可以应用java中的ftp库,java中提供了一个ftpclient的类,提供了很多操作ftp的方法 ...
- java 数组对象属性数组_Java中数组的特性
数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间.在C,C++等语言中,数组的定义简洁清晰,而在java中确有一些会让人迷惑的特性. ...
- java中的数组_Java中的数组
数组是在内存中存储相同数据类型的连续的空间 声明一个数组就是在内存空间中划出一串连续的空间 数组名代表的是连续空间的首地址 通过首地址可以依次访问数组所有元素 元素在数组中的排序叫做下标从零开始 数组 ...
- java int byte数组_Java 中int与byte数组转换详解
1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...
- java声明和初始化数组_Java 中初始化数组
数组是一种有用的数据类型,用于管理在连续内存位置中建模最好的集合元素.下面是如何有效地使用它们. -- Chris Hermansen(作者) 有使用 C 或者 FORTRAN 语言编程经验的人会对数 ...
- java stringbuffer数组_Java中字符数组、String类、StringBuffer三者之间相互转换
一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...
- java不等长二维数组_Java中关于二维数组的理解与使用
今天练习的时候遇到一个题目,题目需求是这样的: 需求说明: 根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩 分析: 要实现这个功能需要存储两个信息: 一个是班级信息 ...
最新文章
- Kerberos验证过程
- Python的oop概述
- RE:SB的SDOISB记
- GCCEE全球华人电脑教育应用大会
- [导入]Myeclipse中XML不出智能提示
- 安卓倒计时 listview默认选中一项
- 霍强:创新研究到底应该怎么做?
- PLSQL 的简单命令之三
- 2023计算机毕业设计SSM最新选题之javaOA办公系统y7x0p
- android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导出App、支付宝AR扫码效果等源码
- 【学习点滴】游戏后台开发-tx
- Python案例1—人民币与美元的汇率兑换V_6.0
- 机房动环监控解决方案!
- 最有特点的、最有深度的网名分享:2012╰菿來啲那天
- 【MM模块】Physical Inventory 库存盘点流程
- 构建基于 MCU 安全物联网系统
- 【叮咚买菜】叮咚抢菜使用教程
- Directional库的学习记录
- 2016年 团体程序设计天梯赛——题解集
- 只允许微信浏览器访问
热门文章
- PHP超级全局变量、魔术变量和魔术函数
- IMU、INS、DGPS和POS
- Android开发指南(39) —— Testing Fundamentals
- (三十六)让常量只读——const限定符
- SDOI2015 约数个数和
- [转]关于管理的经典故事(员工激励)
- mysql导出数据库方法_mysql导出数据库几种方法
- mysql count group by_MySQL中使用count与group by 的统计问题
- python标准库math中用来计算平方根的函数是_Python程序设计的复习题资料合集免费下载...
- 为什么我keepalive配置的vip不能通_企业十大应用-Keepalived-配置详解