Java开发

Java是一种简单易用,完全面向对象,有平台无关性,安全可靠的,主要面向Internet的开发工具;

java技术架构的三个方面:

J2EE 企业版,是以企业为环境而开发应用程序的解决方案

J2SE 标准版,是桌面开发和低端商务应用的解决方案

J2ME 小型版, 是致力于消费产品和嵌入式设备的最佳解决方案

Java技术包含一系列工具:编译器 解释器 文档生成工具 打包工具等.另外由java 2 SDK提供的JRE还包括了一个完整的Java类集合.

java也是一个运行环境,我们可以从SUN公司提供的java 2 SDK中搭建运行环境,而这一切都是免费的

同C语言编程一样,我们首先也要编写java源程序,然后由java编译程序将java源程序编译成JVM可执行的代码,即java字节码.Java源程序编译后生成的字节码文件就相当于C源程序编译后的Windows上的exe可执行文件,JVM上运行的是Java字节码文件,也就是拓展名为.class的文件

Windows 执行 exe 可执行文件的过程,就是从exe 文件中取出一条条的计算机指令,交给CPU去解释执行。JVM 执行 Java 字节码文件的过程,也是JVM 虚拟机从Java 字节码文件中取出一条条的字节码指令交给“CPU”去执行。硬件与软件是可以相五转化的,我们可以用视霸卡硬件解码VCD 数据,也可以用超级解霸软件解码 VCD 数据。执行 Java字节码的“CPU”可以是硬件,也可以是某个系统上运行的一个软件,这个软件称为 Java字节码解释程序(也就是 Java 虚拟机)。

Java 兼顾解释性与编译性语言的特点,Java 源文件转换成class 字节码文件的过程是编译型的,.class 在操作系统上运行的过程则是解释型的,Java 虚拟机充当了解释器的作用。

javac.exe 是 Java 源文件的编译工具,Java 源文件的扩展名为.java

java.exe 是 Java 字节码解释程序,负责解释执行 Java 字节码文件,就是一个JVM。

系统环境变量就是在操作系统中定义的变量,可供操作系统上的所有应用程序使用。

还是以 path 环境变量为例进行讲解,path 环境变量的作用是设置供操作系统去寻找和执行应用程序的路径,也就是说,如果操作系统在当前目录下没有找到我们想要执行的程序和命令时,操作系统就会按照path 环境变量指定的目录依次去查找以最先找到的为准.

path 环境变量可以存放多个路径,路径和路径之间用分号 (;)隔开。在其他的操作系统下可能是用其他的符号分隔,比如在 Linux 下就是用冒号 (:)

(1)Java中的程序必须以类(class)的形式存在,一个类要能被解直接启动运行这个类中必须有main函数,Java 虚拟机运行时首先调用这个类中的man函数,main函数的写法是固定的,必须是public static void main(Stringargs),等到大家学到后面的章节就明白这个函数的各组成部分的具体意义了,由于以后的每个例子几乎都要用这个函数读者现在先硬记下来再说.

(2)如果要让程序在屏幕上打印出一串字符信息(包括一个字符),可以用System.outprintln (“填写要打印的若干字符”)语句,或是Systeoutprint (“填写要打印的若干字符”)语句。前者会在打印完的内容后再多打印一个换行符 (m),你的窗口光标的位置会移动到打印行的下一行的开始处。而后者只打印字符串,不增加换行符,你窗口的光标停留在所打印出的字符串的最后一个字符后面。printin0等于print(“m”)(3)如果在 class 之前没有使用 public 修饰符,源文件的名可以是一切合法的名称而带有 public 修饰符的类名必须与源文件名相同,如上面程序第一行改为下面的形式,源文件名必须是Testiava,但与源文件名相同的类却不一定要带有 public修饰符.

源文件名实际上是 Test,javatxt,但因为系统隐藏了后面的 t 扩展名,我们会误以为源文件名就是 Testjava。我曾经碰到过一个网站泡沫时代的“中级程序员”,因为一个类似的问题而花费了几天的时间也没有找到问题所在,后来我发现不少学员也被这个问题给绊倒了,所以建议读者取消“隐藏已知文件类型的扩展名”的设置。

第一种错误:等号和 classpath 之间有空格。这样本来应该设置变量“classpath”的值却被设置成了变量“classpath+空格”的值。

第二种错误: 等号和路径名之间有空格。把需要设置的正确路径“c:li2sdk1.4.0\bin;替换成了“空格+c:i2sdk1.4.0\bin;”的路径,导致了路径设置的错误

还有一种情况:

set classpath=C:Documents and SettingslAdministratorlMy Documents;虽然在等号的两端都没有空格,但是在路径“Documents and Settings”中却出现了空格,这在 Windows 中是没有问题的,因为 Windows 允许有带空格的目录名,也确实有这个目录。但Java 是不允许的,与 Java 有关的环境变量对空格和中文是非常敏感的,比较忌讳,初学者往往会在这些方面被弄得莫名其妙,吃了不少苦头。

SUN 公司为JDK 工具包提供了一整套文档资料,我们习惯上称之为JDK 文档。JDK文档中提供了 Java中的各种技术的详细资料,以及JDK 中提供的各种类的帮助说明。JDK文档是Java语言的完整说明,大多数书籍中的类的介绍都要参照它来完成,它是编程者们最经常查阅的资料。

可以从SUN公司的网站http//javasun.com 上下载到最新的JDK文挡。JDK文档通常有两种格式:HTML格式和CHM格式其中HTML文档属于官方文档,由SUN公司定期发布。如果想了解最新的Java 知识,建议下载HTML格式的文档。目前的CHM 格式的文档则由一些 Java 爱好者大公无私地奉献而制作出来的虽然推出时间可能会略晚于HTML格式的文档但是由于CHM文档具有独特的搜索功能更是被许多编程者所钟爱。作者在平时的开发和编写此书时所用的就是JDK 1.40的CHM文档。

Java 文档的安装非常简单,下载到硬盘上的HTML文档通常都是一个ZIP 压缩文件只需要把它解压缩到一个目录里,然后进入目录运行index.html 即可。对于CHM格式的文档,只需要运行解压缩后的CHM文件就可以了(这里我们使用的是idk140chm)

Java 编译程序将 Java 源程序翻译为JVM 可执行代码-Java 字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java 编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址这样就有效地保证了 Java 的可移植性和安全性。

运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入代码的校验和代码的执行。装入代码的工作由“类装载器” (class loader)完成。类装载器负贵装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用与特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java 很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。

随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出、非法数据类型转化等多种错误。通过校验后,代码便开始执行了

Java 字节码的执行有两种方式:(1)即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码(2)解释执行方式:解释器通过每次解释并执行一小段代码来完成 Java 字节码程序的所有操作。

通常采用的是第二种方法。由于JVM 规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了 Java 代码的可移植性和高性能。

Java 类的实例对象和数组所需的存储空间是在堆上分配的,解释器具体承担为类实例分配空间的工作。解释器在为一个实例对象分配完存储空间后,便开始记录对该实例对象所占用的内存区域的使用。一旦对象使用完毕,便将其回收到垃圾箱中。在Java语言中,除了 new 语句外没有其他方法为一个对象申请和释放内存。对内存进行释放和回收的工作是由Java 运行系统承担的,这允许Java 运行系统的设计者自己决定碎片回收的方法。在SUN 公司开发的Java 解释器和 Hot Java 环境中,碎片回收用后台线程的方式来执行,这不但为运行系统提供了良好的性能,而且使程序设计人员摆脱了自己控制内存使用的风险。Java 的自动垃圾回收功能解决了两个最常见的应用程序错误:内存泄露和无效内存的引用。

初始化的重要性是不言而喻的,程序员们都能体会到。可是清理垃圾数据的重要性常常被忽视,当程序的某个部件完成使用后,程序员往往都弃置不顾,这是很危险的,这些垃圾会占据系统资源,一直到系统资源(尤其是内存) 被耗尽。Java 提供了一种叫做垃圾回收的机制来避免程序员忽略垃圾的处理,Java 自动帮我们完成垃圾回收的工作,而不需

程序员再去考虑。在Java 程序运行过程中,一个垃圾回收器会不定时地被唤起检查是否有不再被使用的对象,并释放它们占用的内存空间。垃圾回收器的启用不由程序员控制,也无规律可循,并不会一产生了垃圾,它就被唤起,甚至有可能到程序终止,它都没有启动的机会。因此这并不是一个很可靠的机制,这或许不是件坏事,因为垃圾回收器会给系统资源带来额外负担。它被起用的几率越小,带来额外负担的儿率也就越小,当然如果它永远都不被启动,也就永远不必付出额外的代价了。

不同的 Java 虚拟机会采用不同的回收策略,一般有两种比较常用,一种叫做复制式回收策略。这种策略的执行模式是先将正在运行中的程序暂停,然后把正在被使用的所有对象从他们所在的堆内存里复制到另一块堆内存,那些不再被使用的对象所占据的内存空间就被释放掉。

FrontEnd 是专为JAD 做的一个图形化操作界面,它的反编译引擎就是jadexe,弥补了JAD只能在命令行窗口下运行的不足,是对JAD在Windows 操作系统下的扩充FrontEnd.exe 必须与iadexe 位于同一目录,如图1.23 所示如果需要使用 FrontEnd 来反编译一个class 文件,我们只需要运行 FrontEnd,然后在FrontEnd的运行界面中选择“File”一“DeCompile”,如图124所示

接着选定需要反编译的class 文件(例如这里我们使用 Sendclass),如图125 所示选择好需要反编译的.class 文件之后,单击“打开”按钮,便能够看到经过反编译之后的源文件内容了,如图1.26所示。其实从 FrontEnd 的标题栏中就能看到,Sendclass 文已经被成功地反编译成 Sendiava 文件了。到此为止,反编译成功结束

在Java中,所有的程序代码分为结构定义语句和功能执行语句,一条语句可以写在若干行上,功能执行语句的最后必须用分号 (;)结束,不必要对齐或缩进一致。可以按自己的意愿任意编排,只要每个词之间用空格、制表符、换行符或大括号、小括号这样的分隔符隔开就行。

功能执行语句的最后必须用分号)结束,但我们中国的初学者常将这个英文的()误写成中文的(;),自己却找不出错误的原因来,对于这样的情况,编译器通常会报告“illegal character” (非法字符)这样的错误信息

单行注释,就是在注释内容前面加双斜线(//),Java 编译器会忽略掉这部分信息。

多行注释,就是在注释内容前面以单斜线加一个星形标记(/*)开头,并在注释内容末尾以一个星形标记加单斜线 (*/)结束。当注释内容超过一行时一般使用这种方法,

文档注释,是以单斜线加两个星形标记 (/**) 开头,并以一个星形标记加单斜线 (*/)结束。用这种方法注释的内容会被解释成程序的正式文档,并能包含进诸如iavadoc 之类的工具程序生成的文档里,用以说明该程序的层次结构及其方法。

Java 中的包、类、方法、参数和变量的名字,可由任意顺序的大小写字母、数字、下划线()和美元符号($)组成,但标识符不能以数字开头,不能是 Java 中的保留关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值