该问题从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()方法?...相关推荐

  1. java中集合类的转换_Java中的两个常用工具类及集合数组的相互转换

    为了编程人员的方便及处理数据的安全性,Java特别提供了两个非常有用的工具类: 一.Collections 1.Collections类的特点: 集合框架的工具类.里面定义的都是静态方法. 2.Col ...

  2. java 递归 堆栈_Java中的堆栈安全递归

    java 递归 堆栈 在本文中,摘自< Java中的函数编程 >一书,我解释了如何使用递归,同时避免了StackOverflow异常的风险. Corecursion正在使用第一步的输出作为 ...

  3. java cas 实现_Java中CAS 基本实现原理

    一.前言 了解CAS,首先要清楚JUC,那么什么是JUC呢?JUC就是java.util.concurrent包的简称.它有核心就是CAS与AQS.CAS是java.util.concurrent.a ...

  4. java ftp 教程_Java 中两种ftp操作方式

    最近看到几篇关于java中操作ftp的文章,所以想写一个总结贴,标记一下,方便以后应用. 首先,我们可以应用java中的ftp库,java中提供了一个ftpclient的类,提供了很多操作ftp的方法 ...

  5. java 数组对象属性数组_Java中数组的特性

    数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间.在C,C++等语言中,数组的定义简洁清晰,而在java中确有一些会让人迷惑的特性. ...

  6. java中的数组_Java中的数组

    数组是在内存中存储相同数据类型的连续的空间 声明一个数组就是在内存空间中划出一串连续的空间 数组名代表的是连续空间的首地址 通过首地址可以依次访问数组所有元素 元素在数组中的排序叫做下标从零开始 数组 ...

  7. java int byte数组_Java 中int与byte数组转换详解

    1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...

  8. java声明和初始化数组_Java 中初始化数组

    数组是一种有用的数据类型,用于管理在连续内存位置中建模最好的集合元素.下面是如何有效地使用它们. -- Chris Hermansen(作者) 有使用 C 或者 FORTRAN 语言编程经验的人会对数 ...

  9. java stringbuffer数组_Java中字符数组、String类、StringBuffer三者之间相互转换

    一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...

  10. java不等长二维数组_Java中关于二维数组的理解与使用

    今天练习的时候遇到一个题目,题目需求是这样的: 需求说明: 根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩 分析: 要实现这个功能需要存储两个信息: 一个是班级信息 ...

最新文章

  1. Kerberos验证过程
  2. Python的oop概述
  3. RE:SB的SDOISB记
  4. GCCEE全球华人电脑教育应用大会
  5. [导入]Myeclipse中XML不出智能提示
  6. 安卓倒计时 listview默认选中一项
  7. 霍强:创新研究到底应该怎么做?
  8. PLSQL 的简单命令之三
  9. 2023计算机毕业设计SSM最新选题之javaOA办公系统y7x0p
  10. android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导出App、支付宝AR扫码效果等源码
  11. 【学习点滴】游戏后台开发-tx
  12. Python案例1—人民币与美元的汇率兑换V_6.0
  13. 机房动环监控解决方案!
  14. 最有特点的、最有深度的网名分享:2012╰菿來啲那天
  15. 【MM模块】Physical Inventory  库存盘点流程
  16. 构建基于 MCU 安全物联网系统
  17. 【叮咚买菜】叮咚抢菜使用教程
  18. Directional库的学习记录
  19. 2016年 团体程序设计天梯赛——题解集
  20. 只允许微信浏览器访问

热门文章

  1. PHP超级全局变量、魔术变量和魔术函数
  2. IMU、INS、DGPS和POS
  3. Android开发指南(39) —— Testing Fundamentals
  4. (三十六)让常量只读——const限定符
  5. SDOI2015 约数个数和
  6. [转]关于管理的经典故事(员工激励)
  7. mysql导出数据库方法_mysql导出数据库几种方法
  8. mysql count group by_MySQL中使用count与group by 的统计问题
  9. python标准库math中用来计算平方根的函数是_Python程序设计的复习题资料合集免费下载...
  10. 为什么我keepalive配置的vip不能通_企业十大应用-Keepalived-配置详解