Java语言程序设计张雷yi88han@hotmail.com第一章概论2019/9/122学习目标了解java语言产生的历史和工作原理掌握java语言作为一门面向对象编程语言的基本编程思路掌握java程序的结构、编程规范学习阅读java帮助文档安装java开发环境和帮助文档学会编写小的java程序并生成相应的帮助文档。2019/9/123学习指南跳过面向过程的编程思路直接进入到面向对象的编程方式2019/9/124难点和重点java虚拟机无用内存自动回收器java语言的特点面向对象的编程思路java编程规范java类库帮助文档的浏览和生成2019/9/125课前思考一门新的语言的产生是否需要借鉴以前的编程语言?在java语言出现之前是否存在其它跨平台的语言?有哪些编程语言是面向对象的?而哪些编程语言是面向过程的?从编程思路上存在着哪些本质差别?C++语言是面向对象的还是面向过程的?一段优秀的程序代码是否应该是可读性极强的?程序员之间是否应该遵循相同的编程规范?一个程序员编好的代码如果需要让别的程序员使用,如何提供该代码的使用说明?2019/9/126Java语言的产生1991年,SUN公司为消费电子产品开发一个名为oak的软件,在安全性和可移植性方面有所增强。2019/9/127关于OaK语言OAK是Sun公司1991年开发的一种称为机顶盒语言。命令可以迅速的从有线电视公司传到用户的机顶盒上,反之亦然;(小巧)可以应用于不同的有线电视公司;(便携)2019/9/128Java语言的产生1994年下半年,Internet发展迅猛,SUN把oak的技术应用于网络,命名为Java。1995年,SUN正式发布Java语言,Microsoft,IBM,NETSCAPE,NOVELLAPPLE,DEC,SGI等公司纷纷购买Java语言的使用权。1996年,SUN公司专门成立Javasoft分公司来发展Java。2019/9/129Java的最新发展动态•Java+XML为电子商务提供解决方案•分布式计算:Jini•向消费电子领域进军:KVM,PersonalJava,EmbbededJava•交互式电视:JavaTV•实时Java:RealTimeJava•Peer2peer:JXTA•J2EE和J2ME的广泛应用2019/9/1210Java的设计目标1.创建一种面向对象的程序设计语言,而不是面向过程的语言;2.提供一个解释执行的程序运行环境,使程序代码独立于平台;3.吸收C和C++的优点,使程序员容易掌握;4.去掉C和C++中影响程序健壮性的部分,使程序更安全,例如指针、内存申请和释放;5.实现多线程,使得程序能够同时执行多个任务;6.提供动态下载程序代码的机制;7.提供代码校验机制以保证安全性;2019/9/1211Java语言的特点简单面向对象分布式健壮结构中立安全可移植可解释的高性能2019/9/1212三个实现机制Java虚拟机(JavaVirtualMachine)无用内存收集机制(GarbageCollection)代码安全性检测(CodeSecurity)2019/9/1213Java虚拟机在一台计算机上由软件模拟的假想的计算机。Java虚拟机的代码存储在class文件中(也称为字节码文件)。Java编译器针对Java虚拟机产生class文件,因此是独立于平台的。Java解释器负责将Java虚拟机的代码在特定的平台上运行。2019/9/1214Java虚拟机2019/9/1215任何一个编译器,不是JVM的内容。JVM执行步骤Step1:编辑源代码Step2:JAVA编译器将其编译为class文件(JVM规范的字节码)Step3:JAVA解释器负责将class文件解释运行(解释器有两个功能:执行字节码、对底层硬件平台做适合调用)加载代码:由classloader完成校验代码:由bytecodeverifier完成执行代码:由runtimeinterpreter完成2019/9/1216Java虚拟机的建立Java虚拟机的建立需要针对不同的软硬件平台做专门的实现。2019/9/1217无用内存自动回收机制2019/9/1218代码安全性检查机制检验类文件是否符合类文件规范检查类文件中的代码是否存在非法操作VTM采用“沙箱”运行模式将代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存。2019/9/1219Java平台-不断扩展的计算平台企业计算:Java2EnterpriseEditionJ2EE桌面计算:Java2StandardEditionJ2SE嵌入计算:Java2MicroEditionJ2ME2019/9/1220Java平台-不断扩展的计算平台2019/9/1221建立Java开发环境安装JavaDevelopKit(JDK)浏览。在出现的窗口里面选择合适的版本。选择Windows版本JDK下载。在下载结束以后,进入安装过程。2019/9/12222019/9/1223环境变量的配置右击“我的电脑”打开快捷菜单,选择“属性”命令,打开“系统特性”对话框。选择“高级”选项卡,单击“环境变量”按钮,将会弹出对话框。单击“…的用户变量”选项组下的“新建”按钮,打开“新建用户变量”对话框。在“变量名”文本框中输入JAVA_HOME,在“变量值”文本框中输入E:\Java。假设JDK的安装路径为E:\Java。在“变量名”文本框中输入PATH,在“变量值”文本框中输入E:\Java\bin。2019/9/1224验证jdk安装情况在命令行方式下分别输入命令:javacjava2019/9/1225构建java程序2019/9/1226编译和运行java程序2019/9/1227Java源程序结构package语句//0或1条,必须放在文件开始import语句//0或多条,必须放在所有类定义之前publicclassDefinition//0或1个。文件名必须与该类的类名完全相同classDefinition//类定义,个数不限interfaceDefinition//接口定义,个数不限2019/9/1228Java程序结构示例packagejavawork.helloworld;/*把编译生成的所有.class文件放到包javawork.helloworld中*/importjava.awt.*;//告诉编译器本程序中用到系统的AWT包importjavawork.newcentury;/*告诉编译器本程序中用到用户自定义的包javawork.newcentury*/publicclassHelloWorldApp{......}/*公共类HelloWorldApp的定义,名字与文件名相同*/classTheFirstClass{......}//第一个普通类TheFirstClass的定义classTheSecondClass{......}//第二个普通类TheSecondClass的定义......//其它普通类的定义interfaceTheFirstInterface{......}//第一个接口TheFirstInterface的定义......//其它接口定义2019/9/1229package语句包(package)用于管理生成的java字节码文件(.class)其对应于文件系统中的目录,目的是把编译生成的.class文件放入该目录。例如:javawork.helloworld对应于目录“path\javawork\helloworld,其中path需在编译时指定,且该目录须存在;如果javawork\helloworld不存在则创建该目录。例如:javac-df:\javaprojectHelloWorldApp.java则生成的HelloWorldApp.class文件将放在目录f:\javaproject\javawork\helloworld\中如果程序中没有package语句,或者有package语句但是在编译时不用-d选项,则生成的.class文件放入当前目录。2019/9/1230Import语句import语句在程序中用到了标准类库或自定义包中的类,需要用import来声明。可以声明一个包:importjava.awt.*在引用到类或者包时,将沿着类路径classpath开始寻找相应的.class文件,因此需要事先设置环境变量classpath:classpath=.;e:\java\lib\2019/9/1231Java程序结构源文件的命名规则如果.java文件包含一个public类,它必须按该类名命名。一个源文件中最多只能有一个public类,其他类的个数不限。2019/9/1232Java编程规范包名全小写,一般为名词,如:java.awt.event;类名首字母大写,每个单词的首字母大写,如:classHelloWorldApp;接口名同类名,如:interfaceCollection;方法名一般为动词,小写字母开头,每个单词的首字母都要大写,如:balanceAccount,isButtonPressed;变量名全小写,一般为名词,如:length;常量名基本类型的常量名为全大写,如:intYEAR,intWEEK_OF_MONTH;对象常量大小写混合。2019/9/1233本章小结Java的产生Java的特点Java虚拟机和java平台Java开发环境的建立构建java程序Java的编程规范2019/9/1234课后习题1.下载并且安装JavaDevelopKit(JDK)。2.下载并且安装java帮助文档。3.配置类路径。4.参照本章例子,创建一个名为HelloWorldApp的javaapplication,在屏幕上简单的显示一句话“HelloWorld!”。2019/9/12355.下面这段程序,有哪些行是不符合java编程规范的?1/**2*Sampleapplicationusingthesimpletexteditorcomponentthat3*supportsonlyonefont.4*@authorTimothyPrinzing5*@version1.1609/23/996*/78packageMyProject.theFirstApp;9classnotepadextendsJPanel{10finalintMAX_NUM=1000;11finallongrate=999;12StringSTR;13chartheFirstcharacter;1415publicstaticvoidmain(String[]args){16try{17Stringvers=System.getProperty(java.version);18if(vers.compareTo(1.1.2)0){......}19}2021privateComponentCreateToolbar(){22......23}24}362019/9/1237