JVM处理java数组的方法
来源:互联网 发布:c js混淆工具 编辑:程序博客网 时间:2024/05/18 08:16
一丶什么是数组
在我印象中的数组一般都是 int[] a = new int[4]; 通过new关键字创建并组装他们,然后通过整数索引值来访问其中的元素。 后来我又明白 数组是一个特殊的对象,在《java编程思想》中说 “数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性序列,这使得元素访问非常快速。但是这种速度所付出的代价是数组对象的大小被固定,并且在其生命周期中不可改变”
二丶数组对象的类是什么?
public static void main(String[] args) {int a[][] = new int[10][10];Class clazz = a.getClass();System.out.println(clazz.getName());}
在jdk1.7中输出的是 [I
这个输出不属于任何包,而且名称还不是合法的标识 ('['的数目代表了数组的维度,后面的是数组中存放的元素类型)
三丶数组的类有哪些成员呢?
既然数组是个类 类中就可能存在成员方法或者成员变量等等一系列类中应该有的东西。 这一切我们都可以用java的反射性质一探究竟。
public static void main(String[] args) {int[] a = new int[3];Class clazz = a.getClass();System.out.println(clazz.getName());System.out.println(clazz.getDeclaredFields().length); //类中字段的个数System.out.println(clazz.getDeclaredMethods().length); //类中方法的个数System.out.println(clazz.getDeclaredConstructors().length); //类中构造方法的个数System.out.println(clazz.getDeclaredAnnotations().length); //类中的注解System.out.println(clazz.getDeclaredClasses().length); System.out.println(clazz.getSuperclass());}
输出:[I 0 0 0 0 0 class java.lang.Object
[I 就是一个空类,连length这个成员变量都没有,但是你在使用的过程能用length这个成员变量呢。
四丶数组的类在哪里声明的?
让我们先看看字节码
public static void main(String[] args) { int a[] = new int[2]; int i = a.length; }
iconst_2 //将int型常量2压入操作数栈 newarray 10 (int) //将2弹出操作数栈,作为长度,创建一个元素类型为int, 维度为1的数组,并将数组的引用压入操作数栈 astore_1 //将数组的引用从操作数栈中弹出,保存在索引为1的局部变量(即a)中 aload_1 //将索引为1的局部变量(即a)压入操作数栈 arraylength //从操作数栈弹出数组引用(即a),并获取其长度(JVM负责实现如何获取),并将长度压入操作数栈 istore_2 //将数组长度从操作数栈弹出,保存在索引为2的局部变量(即i)中 return //main方法返回
通过这段字节码,根本就没有看见length这个成员变量,获取数组长度的只能是一条arraylength实现,是由jvm底层实现,和我们没有什么关系。编译器对Array.length()这样的语法做了特殊处理,直接编译成了arraylength指令。另外,JVM创建数组类,应该就是由newarray这条指令触发的了。
参考:http://developer.51cto.com/art/201001/176671.htm
阅读全文
0 0
- JVM处理Java数组方法的思考
- JVM处理Java数组方法的思考
- JVM处理java数组的方法
- 有关JVM处理Java数组方法的思考
- 有关JVM处理Java数组方法的思考
- 有关JVM处理Java数组方法的思考
- 有关JVM处理Java数组方法的思考
- Error: could not open `C:/Program Files/Java/jre6/lib/i386/jvm.cfg' 的处理方法
- Error: could not open 'C:/Program Files/Java/jre6/lib/i386/jvm.cfg' 的处理方法
- Error: could not open 'C:/Program Files/Java/jre6/lib/i386/jvm.cfg' 的处理方法
- 内存分析方法和JVM的java heap space问题处理
- JVM 对Java异常的处理原理
- JVM对Java异常的处理原理
- 数组相关的处理方法
- jquery处理数组的方法
- javascript 数组的一些处理处理方法
- JVM java.lang.OutOfMemoryError: PermGen space处理方法
- java字符数组的处理
- 动态规划--背包问题(0-1背包,完全背包,多重背包)
- 操作系统(一)进程与线程
- 飞翔
- Go的类型与变量
- 用MATLAB做聚类分析
- JVM处理java数组的方法
- fdisk分区命令
- 虚拟机使用脚本安装测试DPDK
- 使用Picasso加载图片的内存优化实践
- L1 002-打印沙漏
- 从标准输入中读取两个字符串 name:表示姓名,hobby:爱好;name作为key;hobby作为Value存入Map 然后根据姓名取得Value并打印,再根据name值删除map中的数据再打印ma
- Qt实现图像旋转
- C语言中返回的0和1
- Code Vs-problem-1205 单词翻转