仓酷云

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

[学习教程] JAVA编程:java假造机进修条记

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

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

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

x
最后就是我对java的几点希望:首先是IDE工具,有人说java已经很好了,有jbuilder,eclipse,netBeans等等,但是我认为如果java想超越.net,那么他首先要解决的就是IDE工具的整合。条记
1.编译按次:编译器假造机假造机java源文件*.java------->字节码*.class------>类装载器--->实行引擎

一个.class文件只能包括一个类或接口。因而.java文件中界说了几类,编译时就会天生几.class文件(外部类不算)。

2.java程序能够选择两种体例会见底层体系,由程序员选择:(1).经由过程java程序挪用javaapi挪用当地办法,会见底层体系,与平台有关。(2).经由过程java程序间接挪用当地办法,会见底层体系与平台相干。当地办法即操纵体系供应的办法。

3.类装载器:装载java编译器编译好的字节码*.class和javaapi的字节码到办法区。

java有两品种装载器:(1).启动类装载器:体系独一,属于假造机的一部分,用特定言语编写(与假造机体层言语相通)利用默许体例装载类,次要用来装载中心类库

。(2).用户自界说类装载器:可有恣意多个,用java编写,属于java使用程序的一部分,能被编译成字节码,并被假造机所装载。

一个装载器装载一个类及其该类所挪用的统统类,使他们互相接洽,并构成一个定名空间(namespace),每个类装载器对应一个定名空间。

即java中名字空间的道理。

类装载器成线形分列,自底向上,顶部为启动类装载器。除启动类装载器外,其他类装载器都由用户实例化,用来装载分歧的类。当要装载一

个类时,底部的装载器试图将该类交给父装载器装载,而该父类又试图交给他的父类装载,一向向上,直到启动类装载器。若父类装载器没法

装载,则交给子类装载器装载,子类装载能装载的部分,将余下部分交给他的子类,直究竟部。如:装载器a,b,c,d,e,f,启动a--->b--->c--->d--->e--->f--->启动当有一个类fun必要被装载时,他会一向上溯到顶部即启动类装载器。假如启动类装载器没法装载fun则交给f装载,f装载能装载的部分,将其

余部分交给e,然后一向如许下往。

如上所述,运转过程当中每一个类装载器装载的类构成一个运转时包,统一运转时包里的类能够相互会见,但不克不及会见包内部的类。

4.假造机的性命周期:每一个java程序都有本人的假造机实例,跟着程序的发生和灭亡而发生与灭亡。

5.java程序运转时的内存布局:程序空间分为办法区,堆,java栈,当地办法栈。

(1)办法区寄存装载的类数据信息包含:基础信息:每一个类的全限制名。每一个类的间接超类的全限制名(可束缚范例转换)。该类是类仍是接口。该范例的会见润色符。间接超接口的全限制名的有序列表。

每一个已装载类的具体信息:运转经常量池:寄存该范例所用的统统常量(间接常量和对其他范例,字段,办法的标记援用),它们以数组情势经由过程索引被会见,是内部挪用

与类接洽及范例对象化的桥梁。它是类文件(字节码)常量池的运转时暗示。(另有一种静态常量池,在字节码文件中)。字段信息:类中声明的每个字段的信息(名,范例,润色符)。办法信息:类中声明的每个办法的信息(名,放回范例,参数范例,润色符,办法的字节码和非常表)。静态变量到类classloader的援用:即到该类的类装载器的援用。到类class的援用:假造机为每个被装载的范例创立一个class实例,用来代表这个被装载的类。

(2)堆寄存一切天生的对象及对象的实例变量。

(3)java栈以帧的形似寄存当地办法的挪用形态(包含办法挪用的参数,部分变量,两头了局等)。每挪用一个办法就将对应当办法的办法帧压进

java栈,成为以后办法帧。当挪用停止(前往)时,就弹出该帧。编译器将原代码编译成字节码(.class)时,就已将各类范例的办法的部分变

量,操纵数栈巨细断定并放在字节码中,跟着类一并装载进办法区。当挪用办法时,经由过程会见办法区中的类的信息,失掉部分变量和操纵数

栈的巨细。

java栈帧(即办法帧)由部分变量区,操纵数栈,帧数据区构成。

部分变量区为一个以字为单元的数组,每一个数组元素对应一个部分变量的值。挪用办法时,将办法的部分变量构成一个数组,经由过程索引来会见

。若为非静态办法,则到场一个隐含的援用参数this,该参数指向挪用这个办法的对象。而静态办法则没有this参数。因而,对象没法挪用静态

办法。

操纵数栈也是一个数组,但倒是经由过程栈操纵来会见。所谓操纵数是那些被指令操纵的数据。当必要对参数操纵时如a=b+c,就将行将被操纵的参

数压栈,如将b和c压栈,然后由操纵指令将他们弹出,并实行操纵,此处由iadd指令将b和c弹出并相加,然后压进操纵数栈(一系列均由iadd执

行)然后由i_storex指令将了局弹出,存到索引x指向的部分变量区数组内(此处索引x指向部分变量a)。假造机将操纵数栈作为事情区。

帧数据区处置常量池剖析,非常处置等。

(4)当地办法栈:与挪用的当地办法的言语相干,如挪用的是一个c言语办法则为一个c栈。当地办法能够回调java办法。如有java办法挪用当地办法,假造机就运转这个当地办法。在假造机看来运转这个当地办法就是实行这个java办法,假如当地办法抛出非常,

假造机就以为是这个java办法抛出非常。

(5)实行程序时,经由过程对象的援用在办法区中查找装载的类,若还没有装载,则查找字节码(类名.class),并将其装载进办法区。在实行过程当中,假造时机将对象的标记援用(即对象名)交换为间接的指针,以进步会见速率。

(6)因而,大致能够表述为:办法区:存储类包含接口的各类信息,字节码装载到此处。java栈:存储被挪用的办法的各类信息,只要挪用该办法时,才会将该办法帧压进java栈。堆:存储对象的信息,包含对象的实例变量,但不包含对象的办法。只要挪用对象的办法时,才将办法帧压进java栈中。

6.java数据范例:数值范例:浮点范例:floatdouble整数范例:byte,short,int,long,char(int和char能够交换)。援用范例:类范例,接口范例,数组范例。

7.java的援用范例:援用与指针。援用代表被援用的对象,它只是援用对象的代表,其实不占用内存,也不克不及修正。如援用变量没有援用对象,则该援用变量=null。指针寄存对象的地点,它是一个变量,能够被修正,和其他变量一样,占用内存。

8.办法区一切线程共享办法区,但为满意线程平安,办法区中每个类必需被设定为临界资本,即统一时候某一个类只能被一个线程会见。

9.类标识:因为一个程序能够屡次装载统一个类且该类能够存在于分歧的名字空间中(便可由分歧的装载器装载),因而必需将装载该类的装载器的标识加

上,才干独一标识一个类。

10.对象对象实例变量存储在堆中,对象标记援用则在常量池,办法属性表等大概呈现的中央。经由过程对象的援用能够会见对象的实例数据和创立该对象

的类的数据。对象的援用指向堆中的对象。实例布局有两种,见书籍98页。

当挪用对象的办法时,必要举行静态绑定。即,不克不及依据对象来断定必要挪用的办法,而是依据对象的类数据来断定必要挪用的办法。此时,

也必要经由过程对象的援用来会见类数据。静态绑定就是在运转时才绑定,而不是在编译时绑定。

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指向的是统一个对象。

再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。
小妖女 该用户已被删除
沙发
发表于 2015-1-21 16:17:24 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
海妖 该用户已被删除
板凳
发表于 2015-1-30 20:59:14 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
不帅 该用户已被删除
地板
发表于 2015-2-6 15:56:40 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
若相依 该用户已被删除
5#
发表于 2015-2-7 02:04:22 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
小女巫 该用户已被删除
6#
发表于 2015-2-7 20:10:34 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
冷月葬花魂 该用户已被删除
7#
发表于 2015-2-8 05:44:14 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
兰色精灵 该用户已被删除
8#
发表于 2015-2-24 10:05:40 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
山那边是海 该用户已被删除
9#
发表于 2015-3-1 17:00:14 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
admin 该用户已被删除
10#
发表于 2015-3-10 21:09:36 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
深爱那片海 该用户已被删除
11#
发表于 2015-3-11 11:18:38 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
金色的骷髅 该用户已被删除
12#
发表于 2015-3-18 07:44:01 | 只看该作者
是一种为 Internet发展的计算机语言
莫相离 该用户已被删除
13#
发表于 2015-3-25 13:17:03 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
第二个灵魂 该用户已被删除
14#
发表于 2015-3-25 14:16:47 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
透明 该用户已被删除
15#
发表于 2015-4-8 05:43:04 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
乐观 该用户已被删除
16#
发表于 2015-4-9 19:23:45 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
因胸联盟 该用户已被删除
17#
发表于 2015-4-12 05:42:49 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
小魔女 该用户已被删除
18#
发表于 2015-4-13 21:07:50 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
只想知道 该用户已被删除
19#
发表于 2015-4-21 00:32:48 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
飘灵儿 该用户已被删除
20#
发表于 2015-4-26 05:09:11 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-16 00:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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