您好,欢迎访问三七文档
Java语言的产生及其特点•Java产生的历史与现状它的优点表现在:•便宜•易于使用和管理。用户不管使用何种类型的机器和操作系统,界面是统一的Intrnet浏览器,而数据库、Web页面、应用程序(用Java编的Applet)则存在服务器上,无论是开发人员,还是管理人员,抑或是用户都可以受益于该解决方案。Java语言的特点•是一种简单的面象对象的分布式的解释的健壮的安全的结构中立的可移植的性能很优异的多线程的动态的语言.–简单性主要体现在以下三个方面:•Java的风格类似于C++,因而C++程序员是非常熟悉的。从某种意义上讲,Java语言是C及C++语言的一个变种•Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。•Java提供了丰富的类库•面向对象可以说是最重要的特性–Java语言的设计完全是面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。–Java支持静态和动态风格的代码继承及重用。–单从面向对象的特性来看,Java类似于SmallTalk,但其它特性、尤其是适用于分布式计算环境的特性远远超越了SmallTalk。•分布–Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。–Java应用程序可凭借URL打开并访问网络上的对象–其访问方式与访问本地文件系统几乎完全相同–为分布环境尤其是Internet提供动态内容无疑是一项非常宏伟的任务–Java的语法特性却使我们很容易地实现这项目标。•健壮–Java致力于检查程序在编译和运行时的错误。–类型检查帮助检查出许多开发早期出现的错误。–自已操纵内存减少了内存出错的可能性。–还实现了真数组,避免了覆盖数据的可能。–大大缩短了开发Java应用程序的周期。–提供Null指针检测数组边界检测异常出口字节代码校验•结构中立–为了建立Java作为网络的一个整体,Java将它的程序编译成一种结构中立的中间文件格式–只要有Java运行系统的机器都能执行这种中间代码。现在,Java运行系统有Solaris2.4(SPARC),Win32系统(Windows95和WindowsNT)等–Java源程序被编译成一种高层次的与机器无关的byte-code格式语言,这种语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行•安全性:可从两个方面得到保证–一方面,在Java语言里,象指针和释放内存等C++功能被删除,避免了非法内存操作。–另一方面,当Java用来创建浏览器时,语言功能和浏览器本身提供的功能结合起来,使它更安全。Java语言在你的机器上执行前,要经过很多次的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型•Byte-code校验–如果byte-code通过代码校验,没有返回错误,我们可知道:代码没有堆栈上溢出和下溢出所有操作代码参数类型都是正确的没有发生非法数据转换,如将整数转换成指针。访问对象操作是合法的•类装载–ClassLoader通过将本机类与网络资源类的名称分开,来保持安全性。因为调入类时总要经过检查,这样避免了特洛伊木马现象的出现。–从网络上下载的类被调进一个与源相关的私有的名字域。–当一个私有类访问另一个类时,build-in(本机类)首先被检查,然后检查相关的类。这样就避免了破坏本机类情况的出现•可移植的–同体系结构无关的特性使得Java应用程序可以在配备了Java解释器和运行环境的任何计算机系统上运行,这成为Java应用软件便于移植的良好基础。–但仅仅如此还不够。如果基本数据类型设计依赖于具体实现,也将为程序的移植带来很大不便。例如在Windows3.1中整数(Integer)为16bits,在Windows95中整数为32bits,在DECAlpha中整数为64bits,在Intel486中为32bits。通过定义独立于平台的基本数据类型及其运算,Java数据得以在任何硬件平台上保持一致。Java语言的基本数据类型及其表示方式如下:byte8-bit二进制补码short16-bit二进制补码int32-bit二进制补码long64-bit二进制补码float32-bitIEEE754浮点数double32-bitIEEE754浮点数char16-bitUnicode字符–在任何Java解释器中,数据类型都是依据以上标准具体实现的。因为几乎目前使用的所有CPU都能支持以上数据类型、8~64位整数格式的补码运算和单/双精度浮点运算。Java编译器本身就是用Java语言编写的。Java运算系统的编制依据POSIX方便移植的限制,用ANSIC语言写成。Java语言规范中也没有任何同具体实现相关的内容。•解释的–Java解释器(运行系统)能直接运行目标代码指令。链接程序通常比编译程序所需资源少,所以程序员可以在创建源程序上花上更多的时间。•高性能–如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令。Sun用直接解释器一秒钟内可调用300,000个过程。翻译目标代码的速度与C/C++的性能没什么区别•多线程–多线程功能使得在一个程序里可同时执行多个小任务。线程--有时也称小进程--是一个大进程里分出来的小的独立的进程。因为Java实现的多线程技术,所以比C和C++更键壮–多线程带来的更大的好处是更好的交互性能和实时控制性能。当然实时控制性能还取决于系统本身(UNIX,Windows,Macintosh等),在开发难易程度和性能上都比单线程要好。任何用过当前浏览器的人,都感觉为调一副图片而等待是一件很烦恼的事情。在Java里,你可用一个单线程来调一副图片,而你可以访问HTML里的其它信息而不必等它。•动态–动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法实现的。–在C++程序设计过程中,每当在类中增加一个实例变量或一种成员函数后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。–Java从如下几方面采取措施来解决这个问题。•编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存下传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。这样,一个在存储器生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定的。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。解释执行字节码时,这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。•简化了使用一个升级的或全新的协议的方法。如果你的系统运行Java程序时遇到了不知怎样处理的程序,没关系,Java能自动下载你所需要的功能程序。Java程序开发与运行环境—JDK环境•Java不仅提供了一个丰富的语言和运行环境,而且还提供了一个免费的Java开发工具集(JavaDevelopersKits,简称JDK)。编程人员和最终用户可以利用这个工具来开发java程序或调用Java内容。•JDK包括以下工具:–javacJava语言编译器,输出结果为Java字节码–javaJava字节码解释器javapDisassembeler–Java字节码分解程序,本程序返回Java程序的成员变量及方法等信息。–javaprof资源分析工具,用于分析Java程序在运行过程中调用了哪些资源,包括类和方法的调用次数和时间,以及各数据类型的内存使用情况等。–javahC代码处理工具,用于从Java类调用C++代码–javaAppletViewer小应用程序浏览工具,用于测试并运行Java小应用程序–javaDebuggerAPIJava调试工具–APIPrototypeDebuggerJava调试工具原型Java程序开发与运行环境—JDK环境•Java开发环境还包括–Java类库(包括I/O类库、用户界面类库、网络类库等)和HotJava浏览器。其中,HotJava浏览器提供了在代码的一个运行系统,而且还为开发框架–Java解释器是面向Java程序的一个独立运行系统,它可以一种稳定、高性能方式运行那些独立于平台的Java字节码,–Java编译器则用于生成这些字节码。Java程序开发与运行环境—JDK环境•Java程序的编译–编译程序是javac.exe。javac命令将Java程序编译成字节码,然后你可用java解释器java命令来解释执行Java字节码。–Java程序源码必须存放在后缀为.java的文件里。–Java程序里的每一个类,javac都将生成与类相同名称但后缀为.class文件。编译器把.class文件放在.java文件的同一个目录里,除非你用了-d选项。当你引用到某些自己定义的类时,必须指明它们的存放目录,这就需要利用环境变量参数CLASSPATH。–环境变量CLASSPATH是由一些被分号隔开的路径名组成。如果传递给javac编译器的源文件里引用到的类定义在本文件和传递的其它文件中找不到,则编译器会按CLASSPATH定义的路径来搜索。例如:CLASSPATH=.;C:\java\classes则编译器先搜索当前目录,如果没搜索到,则继续搜索C:\java\classes目录。注意,系统总是将系统类的目录缺省地加在CLASSPATH后面,除非你用-classpath选项来编译。–javac_g是一个用于调试的未优化的编译器,功能与用法和javac一样。javac的用法如下:•javac[-g][-O][-debug][-depend][-nowarn][-verbose][-classpathpath][-nowrite][-ddir]file.java...–-classpathpath定义javac搜索类的路径。它将覆盖缺省的CLASSPATH环境变量的设置。路径一般格式如下:.;your_path例如:.;C:\java\doc\classes;C:\tools\java\classes表示编译器遇到一个新类,它先在本文件中查找它的定义,如果没有,则在本文件所处目录下其它文件中查找它的定义,如果还没有,则继续搜索C:\java\doc\classes目录中的所有文件,以此类推。–-ddirectory指明类层次的根目录,格式如下:javac-dmy_dirMyProgram.java,这样将MyProgram.java程序里的生产的.class文件存放在my_dir目录里.–-g带调试信息编译,调试信息包括行号与使用java调试工具时用到的局部变量信息。如果编译没有加上-O优化选项,只包含行号信息。–-nowarn关闭警告信息,编译器将不显示任何警告信息。–-O优化编译static,final,private函数,注意你的类文件可能更大。–-verbose让编译器与解释器显示被编译的源文件名和被加载的类名。–环境变量CLASSPATH用来提供给系统搜索用户定义的类的缺省路径。•Java程序的调试使用java调试器–jdb导游•在早期前Betal版的Java调试器jdb是命令行形式的,如用Sun公司的dbx调试器。用jdb来调试Java应用程序,在调试前要确证你的应用程序是带标志-g编译的。例如:javac-gHelloWorld.java–help命令:显示jdb里的可用命令列表。•help命令列表threads[threadgroup]--列出线程threadthreadid--设置缺省线程Suspend[threadsid(s)]--将线程挂起resume[threadid(s)]--重新启动线程where[id]|a1|--打印线程的堆栈threadgroups--列出线程组号threadgr
本文标题:JAVA基础教程
链接地址:https://www.777doc.com/doc-2878570 .html