|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,netbeans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。条记
11.数组数组也是类的对象。具有不异范例和维数的数组属于统一个类(不论长度只看维数)。数组的长度属于对象实例。多维数组也是一维数组。如二
维数组,即为一个一维数组,该一维数组的每一个元素是一个数组的援用。数组和一般对象一样也存储在堆中。数组名为数组的援用,经由过程索引即数组标号来会见数组内容。
12.非常在java栈帧的帧数据区内保留有针对该办法的非常表的援用。非常表纪录了该办法的字节码(*.class)受catch子句回护的局限(即try子句里的
字节码)。当某个办法抛出非常时,假造机在对应的非常表中寻觅婚配的catch子句,并将把持权交给catch子句中的代码。
13.java实行引擎完成平台有关性,以java办法帧里的操纵数栈为中央,将部分变量数组看成cpu的存放器。每操纵一个数据都要压人操纵数栈,然后前往至部分
变量区。java假造机划定强范例转换,即低精度能够隐式转换到高精度,高精度必需强迫转换到低精度。
14.线程线程即存在于历程中的某个实行体。每一个线程必需恪守对象锁定,线程守候和关照。对象锁定使线程互斥的会见对象资本。守候和关照则是恪守线程公道调剂以到达统一个目标。java对象经由过程指令集到达上锁目标,同过承继
object类的wait(),notify(),notifyall()办法来守候和关照。当某个线程挪用某个对象的wait()办法时,该线程被堵塞,并到场到该对象的线
程堵塞行列中,直到另外一个线程挪用统一对象的关照办法,才干叫醒堵塞行列中的线程。
15.常量池常量池用来寄存范例的各类信息,包含范例的各类间接常量,和对其他范例,字段,办法的标记援用。常量池分为两种,存储在.class字节码中的常量池和存储在办法区中的运转经常量池。常量池以出口情势(相似于中止向量表)呈现,每一个出口都指向一个表,表中存储常量的信息。但从常量池的出口的标记位就能够判别对应的表
中存储的常量范例。常量池出口以一个标记位入手下手,该标记位唆使该常量的范例。每一个出口对应一个表,该表以标记_info开头,表中寄存常量的紧缩情势。常量池除寄存间接常量外还包容以下几种标记援用:类和接口的全限制名。字段称号和形貌符(该形貌符是一个唆使字段范例的字符串。字段是一个类或接口的类变量或实例变量)。办法称号和形貌符(该形貌符唆使办法前往范例,参数范例,数目,按次)。
运转时,假造机用常量池的全限制名和办法,字段的形貌符来创建类与类的干系。
常量池仅仅是一个援用和形貌符的汇合,其实不承受任何赋值操纵。
一切对象的创立,办法和类变量的挪用均要从常量池中猎取信息,但实例变量的挪用从堆里取得。(料想)
标记援用是由假造机剖析后失掉详细的地点来利用。
常量池剖析就是将常量池中的标记援用交换成间接援用。
当要利用某个类的办法或字段时,起首从常量池中找到该办法或字段的标记援用,然落后行剖析,找到其物理地点。
把代码中呈现的各类标记援用,类与类的接洽,举行常量池剖析,叫做静态毗连。
16.常量池布局常量池由良多狠多的单位构成,每个单位都形如(出口|内容),会见常量池单位时经由过程索引找到出口,然后会见其内容。但偶然单位的内容也
多是一个常量池出口(好比类或接口的常量池单位,出口包括该类的标记援用即constant_class_info,而内容则指向一个
constant_utf8_info的常量池单位,该单位里寄存了该类的全限制名)。而间接常量如int,float等,内容处就是常量的值。
17.办法区的布局办法区存储一切关于范例,接口的信息。办法区包括:
常量池:存储范例的间接常量和一切的字段,办法,其他范例的标记援用(仅仅是援用,其实不寄存详细信息)。
字段信息:一切声明的字段(包含字段名,范例,润色符)。
办法信息:一切界说的办法(包含办法名,前往范例,润色符,办法的字节码,办法栈帧的巨细,办法的非常)。
类变量信息:假造机在办法区中为一切类变量分派空间,今后的初始化,赋值等操纵也在办法区中举行,以便为一切类实例共享。
为进步会见速率,假造机在办法区中为每一个非笼统类设置了一个办法表,该表是一个数组,每一个元素是一个办法的间接援用。当类的对象挪用
办法时,就在办法表中搜刮(笼统类没有实例,以是不必挪用办法,以是没无方法表)。
18.堆堆寄存类的实例和数组(包含实例变量,指向对应办法区中类数据的援用)。
19.一个例子classtest{publicstaticvoidmain(stringargs[]){stringa=newstring("hello");stringb=newstring("hello");stringc="hello";stringd="hello";}}则a==b前往false,c==d前往ture。由于:==对照两边是不是是统一个对象。
起首:stringa=newstring("hello")stringb=newstring("hello")a和b分离各改过建了hello的对象和援用变量,即在堆中有两个hello,他们各自的援用是a和b。
而:stringc="hello"stringd="hello"先创建一个字符串类实例hello,再创建两个字符串援用变量c和d,然后让c和d都指向入手下手创建的hello实例。因而c和d指向的是统一个对象。
多谢指点,其实我对.net和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。 |
|