- 浏览: 7340038 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
package com.easyway.commons.ispace.dev.oop.grammers;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 1、数组是对象,继承自Object,因为new Object[0].getClass().getSuperClass()是
* Object.class,唯一比Object多一个成员变量length,而且应该是public的。
* 2、java.lang.reflect.Array是final的,所以数组肯定不是它的子类,这个类用来动态生成
* 数组或者操作数组(获得长度等)。
* 3、java.util.Arrays是一个数组操作应用类,主要就是排序,填充,而分查找等。注意:排序使
* 用的是快速排序,时间复杂度是o(n*log(2^n)),如果你要对数组排序Arrays绝对是首选。
* 4、数组没有对应的类文件,String对应String.class,但是数组却没有,而且他们的类名字很古怪,
* 可以这样获得 new int[2].getClass().getName(); 这是和其他对象最大的不同点,因为数组类
* 是在运行时生成的。
* @author longgangbai
* @date 2010-5-19
* @version 1.0
* @since JDK6.0
*/
public class JavaArray {
public static void main(String[] args) {
int[] x1 = new int[100];
int[] x2;
x2 = new int[100];
int[] x3 = new int[] { 1, 2, 3 };
int[][] x4;
x4 = new int[2][];
x4[0] = new int[1];
x4[1] = new int[2];
int x5[][] = new int[1][];
//会报NullPointerException,因为在定义时没未初始化,所以指向null
//System.out.println(x5[0].length);
int x6[][] = new int[][] { { 1 }, { 2, 3 } };
int x7[][] = { { 1 }, {} };
//可以重新定义某维数组
x7[1] = new int[] { 2, 3, };
//会报ArrayIndexOutOfBoundsException,因为一但某维大小定义完成
//后,是不再改变的,除非再次定义x7,让其指向另外的数组。
//x7[2] = new int[] { 2 };
System.out.println(x7[1].length);
List<String> strList=new ArrayList<String>();
for (int i = 0; i < 1000; i++) {
strList.add("sdf"+Math.round(i));
}
Arrays.sort(strList.toArray(new String[strList.size()]));
Collections.sort(strList);
System.out.println(x4.getClass().getName()); //[[I
Class clazz = x7.getClass();
System.out.println(clazz.getConstructors().length);//打印出来的结果是0;证明数组类确实没有构造方法。
//java.lang.NoSuchFieldException: length
try {
java.lang.reflect.Field fieldarr = clazz.getField("length");
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchFieldException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
System.out.println(x4.getClass().newInstance()); //java.lang.InstantiationException:
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //[[I
}
}
1、数组是对象,继承自Object,因为new Object[0].getClass().getSuperClass()是Object.class,唯一比Object多一个成员变量length,而且应该是public的。
2、java.lang.reflect.Array是final的,所以数组肯定不是它的子类,这个类用来动态生成数组或者操作数组(获得长度等)。
3、java.util.Arrays是一个数组操作应用类,主要就是排序,填充,而分查找等。注意:排序使用的是快速排序,时间复杂度是o(n*log(2^n)),如果你要对数组排序Arrays绝对是首选。
4、数组没有对应的类文件,String对应String.class,但是数组却没有,而且他们的类名字很古怪,可以这样获得 new int[2].getClass().getName(); 这是和其他对象最大的不同点,因为数组类是在运行时生成的。
---------------------------------------------------------------------------------
可以通过以下方法得到MyClass[]的Class实例:arr.getClass()或MyClass[].class。这样,我就可以向数组类里面“窥探”了。
Class clazz = MyClass[].class;
System.out.println(clazz.getConstructors().length);
打印出来的结果是0;证明数组类确实没有构造方法。
如果强行执行clazz.newInstance();就会得到下面的错误。
java.lang.InstantiationException: [Larraytest.MyClass;
证明数组类不能够通过普通的反射方式来创建一个实例。
再看看数组类的“庐山真面目”:
System.out.println(clazz);
输出是:
[Larraytest.MyClass
System.out.println(int[].class.getName());//[I
System.out.println(int[][].class.getName());//[[I
对Java Class文件结构稍有了结就知道,这个字符串的意思就是一个元素类型为arraytest.MyClass的一维数组。也就是说,数组类型不是和普通类一样,以一个全限定路径名+类名来作为自己的唯一标示的,而数组的 class 串是以 [ 加上一个或者多个L 再加上数组元素类全限定路径再加上类名来做为唯一标示的。
数组的Class类实例是java虚拟机动态创建动态加载的,其结构与普通java类的Class实例有一些不同。
对于数组的Class类实例,还有一些奇怪的现象:
在运行代码 java.lang.reflect.Field fieldarr = clazz.getField("length");的时候,会抛出异常:java.lang.NoSuchFieldException: length,这似乎在说数组类没有length这个域,而这个域其实是我们用的最多的一个(也就是说这个域是肯定存在的)。
java数组最多只能是255维的。
---------------------------------------------------------------------------------
我们要区分类型和类。可以很肯定的说数组是一种类型,但是它绝不是类。类型是编译器相关的概念,其抽象性跟面向对象无关。类是面向对象中的一个概念。他们不再同一个级别。int,byte都是类型,都对应相对的Class,系统也提供了对应的装箱类。但是要注意的是,对于他们的底层实现和操作都是 native的,跟面向对象无关,我们可以认为是“内置对象”,他们是用c来实现的,反射和Proxy也是这样的。所以可以取到Class的是任何类型,而不是类,这个Class类的本身的操作也都是native的,从这个意义上Object类本身也不是一个纯面向对象意义的类。在这个方面,我们可以说:看起来数组不是一个类。
在语法和实现方式上,数组不像一个类。在虚拟机规范和底层实现,数组是一个像类的对象。
---------------------------------------------------------------------------------
在Java 中,数组是一种完全意义上的对象,他和对象一样保存在堆中、有一个指向Class类实例的引用。所有同一维度和类型的数组拥有同样的Class,数组的长度不做考虑。对应Class的名字表示为维度和类型。比如一个整型数据的Class为“[I”,字节型三维数组Class名为“[[[B”,两维对象数据 Class名为“[[Ljava.lang.Object”。
发表评论
-
java中 避免过多的使用同步
2012-11-22 15:41 2249避免过多的使用同步 ... -
Java Thread的一点知识(III)
2011-10-28 15:32 3355同步和异步有何异同,阻塞与非阻塞,在什么情况下分别使用他们?举 ... -
Java Thread的一点知识(II)
2011-10-28 15:30 5417stop() 和 suspend() 方法为何不推荐使用? ... -
Java Thread的一点知识
2011-10-28 15:24 3706线程与进程的区别 线程和进程是不同的,每个进程 ... -
【转】Java内部类
2011-10-28 13:18 1560简单的说,内部(inner)类指那些类定义代码被置于其它类定义 ... -
【转】华为的JAVA面试题
2011-10-28 09:20 2366对我个人来说,看看 ... -
Java String 在JVM中的思考
2011-10-26 16:49 2269package com; /** * @author ... -
java Final的复习
2011-10-24 16:54 1588package com; /** *如果fina ... -
【转】 不用中间变量,实现两个变量的交换
2010-11-27 17:30 2878常见的面试题,很简单,但值得细想的问题还是很多,总结解法如下: ... -
对象池技术基本原理和分析应用(二)
2010-07-02 21:27 1963通用对象池的实现 对象池的构造和管理可以按照多种方式 ... -
对象池技术基本原理和分析应用(一)
2010-07-02 21:25 2047本文在分析对象池技 ... -
java回调机制的使用
2010-06-03 17:09 1959学习过Hibernate和Spring等童鞋,经常见到的 ... -
面向对象程序设计(OOP)的六大原则
2010-05-15 20:54 3057面向对象程序设计(OOP) ... -
Java 实例内部类的学习
2010-05-15 20:47 1758package com.easyway.commons.isp ... -
Java 匿名类的学习应用
2010-05-15 20:39 2071java 接口的匿名内部类 package com.ea ... -
java 异常的特殊的典型使用你知道吗?
2010-05-15 20:36 1595package com.easyway.commons.isp ... -
java 字符串类型知道少
2010-05-15 20:33 1779package com.easyway.commons.isp ... -
关于java 类的生命周期 深入了解
2010-05-15 20:15 2367package com.easyway.commons.isp ... -
枚举类的使用特点总结
2010-05-11 09:20 2363package com.easyway.commons.isp ... -
关于Integer的深度分析以及注意点
2010-05-10 22:20 2111在Integer中valueOf()和创建独享In ...
相关推荐
Java数组是Java编程语言中的基本数据结构之一,用于存储固定数量的同类型元素。了解和熟练掌握数组的使用是学习Java的重要环节。本篇练习题涵盖了数组的基本概念、操作和异常处理,下面是针对题目中涉及知识点的详细...
Java 数组初始化详解 Java 数组初始化是 Java 编程语言中的一种基本概念,它允许开发者创建和初始化数组,以便于存储和操作数据。在本文中,我们将对 Java 数组初始化进行详细的介绍,包括一维数组和二维数组的声明...
### Java数组与内存控制 #### 一、Java数组在内存分配方面的知识 ##### 1.1 数组初始化 - **声明数组的时候如何分配内存:** - 在Java中,数组的声明并不直接分配内存,而仅仅是创建了一个数组引用变量。例如: ...
在Java编程中,"Java数组版ATM"项目是一个典型的面向对象设计实例,它通过数组来模拟自动取款机(ATM)的功能。这个项目旨在教授如何利用Java语言中的类、对象、数组以及相关的面向对象设计原则来实现一个简单的银行...
Java数组越界问题实例解析 在Java中,数组是一种非常重要的数据结构,它广泛应用于各种场景中。然而,在使用数组时,开发者最容易遇到的问题之一就是数组越界问题。数组越界问题是指在访问数组时,索引值超出了数组...
46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip...
43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip...
22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组...
Java数组教案 Java数组是Java编程语言中的一种重要数据结构,用于存储和处理一组数据。在本教案中,我们将详细介绍Java数组的声明、表示、赋值和内存分配,帮助学生掌握数组的基本概念和应用。 一、数组的声明和...
20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间...
* 随机读取效率很高,因为数组是连续的,知道每一个数据的内存地址,可以直接找到给地址的数据。 链表 链表也是线性结构,要取第 i 个元素,只需用指针往后遍历 i 次就可。链表的元素在内存的堆区,每个元素须手动...
45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip...
44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip...
对数组的总结和分析,通过这个结构记住它,在开发的过程中使用
Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的。 2)利用数组复制方法可以变通的实现数组扩容。 3)System.arraycopy()可以复制数组。 4)Arrays.copyOf()可以简便的...
Java数组是程序设计中的基本构建块,它允许程序员存储多个相同类型的数据在一个单一的结构中。在Java中,数组是一种对象,它们具有固定的大小,并且一旦创建,就不能更改其长度。数组提供了通过索引来访问其元素的...
Java数组工具类
java中数组的自定义排序,种类繁多,简单实现,可自由操控。
在Java编程语言中,数组是一种特殊的数据结构,用于存储同类型元素的集合。它们提供了一种方式来组织和管理大量数据,使得我们可以高效地访问和操作这些数据。本章将深入探讨数组的基本概念、定义以及如何在实际编程...
在Java编程中,数据结构是基础,而数组和链表是两种常见的线性数据结构。它们各有特点,适用于不同的场景。下面将详细讨论这两种数据结构的区别。 首先,数组是一种静态分配内存的数据结构,其所有元素在内存中是...