仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 676|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA教程之关于java数组的深度思索

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)数组  方才入手下手打仗java数组的人城市听到一句相似的话:java是纯面向对象的言语,他的数组也是一个对象。因而乎,笔者就依照一个对象的体例来利用数组,问心无愧。直到我打仗到C的数组后,才发明将数组作为一个类来利用在完成上是何等的“不天然”。
  
  起首我们看一下外表征象,数组创立的时分接纳的是以下语句:

  MyClass[]arr=newMyClass[9];
  而一般类接纳的是以下语句:
  MyClassobj=newMyClass();
  就是说,创立数组的时分不利用小括号传参。使得数组和一般类看起来就有良多分歧,由于小括号里的参数是传送给机关办法的,进而让人感到数组类是没有机关办法的。
  
再往深了想,另有良多让人感到不天然的工具。能够一定的是,java的确将数组作为了一个类来处置。仍是用下面的例子申明:
  能够经由过程以下办法失掉MyClass[]的Class实例:arr.getClass()或MyClass[].class。如许,我就能够向数组类内里“窥伺”了。
  
  Classclazz=MyClass[].class;
  System.out.println(clazz.getConstructors().length);
  
  打印出来的了局是0;证实数组类的确没有机关办法。
  
  假如强行实行clazz.newInstance();就会失掉上面的毛病。
  java.lang.InstantiationException:[Larraytest.MyClass;
  证实数组类不克不及够经由过程一般的反射体例来创立一个实例。
  
  再看看数组类的“庐山真脸孔”:
  System.out.println(clazz);
  输入是:
  [Larraytest.MyClass
  对JavaClass文件布局稍有了却就晓得,这个字符串的意义就是一个元素范例为arraytest.MyClass的一维数组。也就是说,数组范例不是和一般类一样,以一个全限制路径名+类名来作为本人的独一标示的,而是以[+一个大概多个L+数组元素类全限制路径+类来最为独一标示的。这个()也是数组和一般类的区分。而这个区分仿佛在某种水平上申明数组和一般java类在完成上有很年夜区分。由于java假造机(java指令集)在处置数组类和一般类的时分,一定会做出辨别。笔者料想,大概会有专门的java假造机指令来处置数组。
  既然我们能够失掉数组的Class类实例,就申明一定必要挪用ClassLoader的defineClass(纷歧定非如果loadClass办法)办法,来机关一个Class实例。java假造机标准划定,任何一个能够被加载的类,假如其类文件存储在文件体系上,那末一个*.class文件只能存储一个类信息,也就是说,数组类的信息不成能以类文件的情势存储在当地磁盘上(不然恣意一个类都要配有255个数组类了.....),既然如许,那就申明java假造机一定内置了一块用来声明数组类的数据(不论是几级数组)。这是切合java假造机标准的,标准划定class类数据能够来自恣意介质,包含当地磁盘、收集、数据库、内存等等。
  剖析到这里,我基础上能够一定:java对数组对象化的操纵的撑持是指令级的,也就是说java假造机有专门针对数组的指令。数组的Class类实例是java假造灵活态创立静态加载的,其布局与一般java类的Class实例有一些分歧。
  JDKAPI中有一个java.lang.reflect.Array类,这个类供应了良多办法(尽年夜多半是native办法,这在另外一个方面证实了java对数组的撑持是公用指令撑持的,不然用当地办法干吗^_^),用来填补我们对数组操纵的范围性。
  上面这句话用来创立一个一维的、长度为10的、范例为arraytest.MyClass的数组:
  arraytest.MyClass[]arr=(arraytest.MyClass[])Array.newInstance(arraytest.MyClass,10);
  上面这句话用来创立一个二维的、3乘5的、范例为arraytest.MyClass的数组:
  int[]arrModel=newint[]{3,5};
ObjectarrObj=Array.newInstance(Sub.class,arrModel);
  固然你能够用一个数组的援用指向下面的二维数组,这里我们用一个Object的援用指向他。
利用的时分,我们也是能够使用Array类供应的办法来完成:
  System.out.println(Array.getLength(arrObj);//第一维长度为3
  System.out.println(Array.getLength(Array.get(arrObj,2)));//第二维长度为5,这里假如写3,就会失掉你意想当中的java.lang.ArrayIndexOutOfBoundsException
  打印了局是如我们所想的:
  3
  5
  关于数组的Class类实例,另有一些奇异的征象:
  在运转代码java.lang.reflect.Fieldfieldarr=clazz.getField("length");的时分,会抛出非常:java.lang.NoSuchFieldException:length,这仿佛在说数组类没有length这个域,而这个域实际上是我们用的最多的一个(也就是说这个域是一定存在的)。笔者以为关于数组的Class类实例、数组的完成等,另有良多“猫腻”在内里。

  特地说一句,java数组最多只能是255维的。这个让人看到了C的影子,嘿嘿。“Java把数组看成一个java类来处置”提及来简单,用起来天然,可是细细想来,仍是有良多不复杂的中央。

自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。
因胸联盟 该用户已被删除
沙发
发表于 2015-1-19 19:30:51 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
爱飞 该用户已被删除
板凳
发表于 2015-1-24 15:39:44 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
只想知道 该用户已被删除
地板
发表于 2015-2-1 23:09:35 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
灵魂腐蚀 该用户已被删除
5#
发表于 2015-2-7 15:48:45 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
兰色精灵 该用户已被删除
6#
发表于 2015-2-12 06:51:32 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
分手快乐 该用户已被删除
7#
发表于 2015-3-2 23:46:05 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
飘灵儿 该用户已被删除
8#
发表于 2015-3-4 10:03:30 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
莫相离 该用户已被删除
9#
发表于 2015-3-6 17:41:43 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
海妖 该用户已被删除
10#
发表于 2015-3-9 00:49:14 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
精灵巫婆 该用户已被删除
11#
发表于 2015-3-11 10:18:48 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
蒙在股里 该用户已被删除
12#
发表于 2015-3-18 04:47:09 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
乐观 该用户已被删除
13#
发表于 2015-3-25 12:05:21 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 21:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表