JAVA教程之java假造机进修条记2
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也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 是一种突破用户端机器环境和CPU 是一种突破用户端机器环境和CPU 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 是一种使用者不需花费很多时间学习的语言
页:
[1]
2