程序设计语言 中山大学逻辑与认知研究所_第1页
程序设计语言 中山大学逻辑与认知研究所_第2页
程序设计语言 中山大学逻辑与认知研究所_第3页
程序设计语言 中山大学逻辑与认知研究所_第4页
程序设计语言 中山大学逻辑与认知研究所_第5页
已阅读5页,还剩175页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计语言 中山大学逻辑与认知研究所2012年2月 第一章导论 现代逻辑创始于19世纪末叶和20世纪早期 其发展动力主要来自于数学中的公理化运动数理逻辑的发展和计算机的产生密切有关数理逻辑是计算理论的基础 而计算理论又是计算机科学的核心基础数理逻辑学家的工作对于通用计算机的产生是决定性的 许多计算机科学家都是逻辑学家 现代计算机的产生和现代逻辑的发展 阿兰 麦席森 图灵AlanMathisonTuring 6月23日生于英国伦敦 是英国著名的数学家和逻辑学家 被称为计算机科学之父 人工智能之父 是计算机逻辑的奠基者 提出了 图灵机 和 图灵测试 等重要概念 人们为纪念其在计算机领域的卓越贡献而设立 图灵奖 在图灵的设计思想指导下 1950年制出了ACE样机 1958年制成大型ACE机 1948年 图灵接受了曼彻斯特大学的高级讲师职务 并被指定为曼彻斯特自动数字计算机 Madam 项目的负责人助理 具体领导该项目数学方面的工作 作为这一工作的总结 1950年图灵编写并出版了 曼彻斯特电子计算机程序员手册 Theprogrammers handbookfortheManchesterelectroniccomputer 现代计算机的产生和现代逻辑的发展 约翰 冯 诺依曼 JohnVonNeumann 1903 1957 美藉匈牙利人在第二次世界大战前 他主要从事算子理论 集合论等方面的研究冯 诺依曼对人类的最大贡献是对计算机科学 计算机技术和数值分析的开拓性工作 EDVAC方案明确奠定了新机器由五个部分组成 包括 运算器 逻辑控制装置 存储器 输入和输出设备 并描述了这五部分的职能和相互关系 报告中 诺伊曼对EDVAC中的两大设计思想作了进一步的论证 为计算机的设计树立了一座里程碑 设计思想之一是二进制 逻辑代数的应用已成为设计电子计算机的重要手段 现代计算机的产生和数理逻辑的发展 逻辑学专业有必要学习程序设计的有关知识目的意义 逻辑学与程序设计 考试 考试成绩 期末考试成绩 70 平时成绩 30 教材参考资料 教材 叶核亚等 Java2程序设计实用教程 第3版 电子工业出版社 2010年2月Java编程思想 BruceEckel 著 JAVA2核心技术卷I 基础知识 CayS Horstmann 著 JavaTutorial 软件的基本组成部分是完成其功能的程序 程序设计语言 也被称为 编程语言 ProgrammingLanguage 是人们编制程序所使用的语言 程序描述了计算机处理数据 解决问题的过程 这是程序的实质 但程序的描述形式却可以是多种多样的 可以用不同的方式表述 不同的程序设计语言 程序设计语言 程序设计语言 程序设计语言的种类 机器语言 机器指令 直接执行汇编语言 符号化 汇编器 Assembler 高级程序设计语言 编译型 高级程序设计语言 解释型 高级语言中用于描述计算的结构采用类似于数学中代数运算公式的形式 这种结构被称为 表达式 程序中基本的动作单位被称为 语句 不同的语句实现不同的功能 用高级语言书写的程序不可能直接地在计算机上执行 要在计算机上执行高级语言书写的程序 有两种基本方法 编译 Compilation 执行 这种方法是设法把高级语言程序 也称为 源程序 转换成为机器语言的可以由计算机直接执行的程序 即转变为 可执行 Executable 程序 解释 Interpretation 执行 这种方法是即时把源程序转换为机器可执行的指令 有时为了提高效率 也可以先编译成一种中间代码 程序设计语言 高级程序设计语言 对于 编译执行 方式 人们实现了高级语言 编译器 Compiler 完成这种转换工作 编译器把高级语言程序看成是符合一定语法结构的符号串 对它进行加工变换 编译器对源程序的加工一般分为两个阶段 源程序首先被翻译成机器语言 这种翻译结果称为 目标码 objectcode 目标码构成的程序片段称为目标模块 第二步 这些目标模块被与其他一些基本模块 由编译软件提供 连接在一起 最终形成 可执行程序 executableprogram 这样的程序就可以在计算机上实际运行了 第一个加工步骤称为 编译 compiling 第二个步骤称为 连接 linking 程序设计语言 高级程序设计语言 程序设计语言 高级程序设计语言 编译过程 对于 解释执行 方式 人们实现了一种称为 解释器 Interpreter 的软件来完成转换工作 解释器在工作方式上与编译器不同 它不对源程序进行翻译 而是直接对源程序的语句进行分析和解释 实现源程序所描述的功能 程序设计语言 高级程序设计语言 解释过程 程序设计语言 高级程序设计语言 高级语言写出的程序是独立于任何具体的计算机的 但是 编译器 和 解释器 则是与机器相关的 同一种语言 对于不同的机器 需要不同的 编译器 和 解释器 人们已经开发出了许多不同的高级程序设计语言 不同的语言有各自不同的规范 因此需要专门的 编译器 和 解释器 FORTRAN FORmularTRANslation 语言 HPF IBM 1950Pascal语言 N Wirth 1968 Delphi Borland COBOL COmmonBusinessOrientedLanguage 语言 美国国防部 1960C和C 语言 DennisRetchie 1972 BjarneStroustrup 1983 BellBasic Beginner sAll purposeSymbolicInstructionCode 语言 美国国防部 1964Ada语言 军用程序设计语言 美国国防部 1983Java语言 1991年 SUNMicroSystem公司 程序设计语言 高级程序设计语言 计算机语言发展史 适应软件需求量增加的发展20世纪70年代MartinRichards设计的BCPL语言发展的结果导致了结构化程序设计语言 C语言的产生C 程序的复杂性导致了C 的产生1979年 BjarneStroustrup发明了 带类的C C 它是对一个已经高度成功的语言的改进C 对抗JavaMS为了对抗Java 全力推出了C 和 net平台 两虎相争 孰能取胜 且让我们拭目以待 Java的发展历史 1991 OakJameGosling SUN 为开发家电产品而设计Oak Java 爪哇 太平洋上一个盛产咖啡的岛屿的名字 1992 1993 一个客户也没找到1994 Internet的迅猛发展 需要一个中性的浏览器 它不依赖于任何硬件平台和软件平台 并且实时性较高 可靠安全 有交互功能的 Gosling决定用Java开发Web浏览器 HotJava 1996 Java1 02版发布 可以创建动态网页1998 JavaOne会议的最大新闻是Java1 2版现在 Java1 6版 Java的起源 Java来自于Sun公司的一个叫Green的项目 其原先的目的是为家用消费电子产品开发一个分布式代码系统 这样我们可以把E mail发给电冰箱 电视机等家用电器 对它们进行控制 和它们进行信息交流 开始 准备采用C 但C 太复杂 安全性差 最后基于C 开发了一种新的语言Oak Java的前身 Oak是一种用于网络的精巧而安全的语言 Sun公司曾以此投标一个交互式电视项目 但结果被SGI打败 可怜的Oak几乎无家可归 恰巧这时MarkArdreesen开发的Mosaic和Netscape启发了Oak项目组成员 他们用Java编制了HotJava浏览器 得到了Sun公司首席执行官ScottMcNealy的支持 触发了Java进军Internet Java的取名也有一则趣闻 有一天 几位Java成员组的会员正在讨论给这个新的语言取什么名字 当时他们正在咖啡馆喝着Java 爪哇 咖啡 有一个人灵机一动说就叫Java怎样 得到了其他人的赞赏 于是 Java这个名字就这样传开了 Java的起源 http www sunxin orgDownload Java的现状 开发桌面应用程序开发大规模的企业应用开发移动通信设备 21 Java与Internet Internet使Java成为网上最流行的编程语言Java对Internet的影响也意义深远在Java出现以前 几乎没有什么工具可以在Internet上执行动态交互程序Applet程序可以对用户的输入和操作做出响应 对Java学习者 你们在学习一门体现了最新的软件开发技术的语言 就业前景广阔 学Java面向对象的理论基础最重要 学好Java需要掌握设计模式理论 如何学好Java语言多上机编程实践多看书和资料 每次上完课后要复习有机会多参加实际项目和参加各种培训 我们为什么要用Java 因为Java是简单的面向对象的健壮的安全的解释的与平台无关的多线程的动态的语言 http www sunxin orgDownload 我们为什么要用Java 简单的Java最初是为对家用电器进行集成控制而设计的一种语言 因此它必须简单明了 Java语言的简单性主要体现在三个方面 1 Java的风格类似于C 因而C 程序员初次接触Java语言 就会感到很熟悉 从某种意义上讲 Java语言是C及C 语言的一个变种 因此 C 程序员可以很快地掌握Java编程技术 2 Java摒弃了C 中容易引发程序错误的一些特性 如指针 结构 枚举以及内存管理等 3 Java提供了丰富的类库 可以帮助我们很方便的开发Java程序 http www sunxin orgDownload 我们为什么要用Java 面向对象的面向对象可以说是Java最重要的特性 所以它支持继承 重载 多态等面向对象的特性 Java语言的设计是完全面向对象的 它不支持类似C语言那样的面向过程的程序设计技术 http www sunxin orgDownload 我们为什么要用Java 健壮的Java致力于检查程序在编译和运行时的错误 Java也是一种强类型的语言 其类型检查比C 还要严格 类型检查帮助我们检查出许多开发早期出现的错误 Java自己负责内存管理 提供了垃圾内存回收机制 有效的避免了C 中最头疼的内存泄漏问题 http www sunxin orgDownload 我们为什么要用Java 安全的Java的安全性可从两个方面得到保证 一方面 在Java语言里 删除了指针和释放内存等C 功能 避免了非法内存操作 另一方面 通过Java的安全体系架构来确保Java代码的安全性 当我们从网上下载Java代码在本地执行时 Java的安全架构能确保恶意的代码不能随意访问我们本地计算机的资源 例如 删除文件 访问本地网络资源等操作都是被禁止的 http www sunxin orgDownload Java语言的特点 安全性 我们为什么要用Java 解释的Java代码是解释执行的 我们使用Java编译器将Java代码编译成字节码 这是一种中间代码 然后由Java解释器解释执行 而C 程序是编译执行的 C 程序代码被编译为本地机器指令 然后执行 http www sunxin orgDownload 我们为什么要用Java 与平台无关的Java作为一种网络语言 其源代码被编译成一种结构中立的中间文件格式 只要有Java运行系统的机器都能执行这种中间代码 Java源程序被编译成一种与机器无关的字节码格式 在Java虚拟机上运行 http www sunxin orgDownload Java语言的特点 平台无关性 我们为什么要用Java 多线程的Java语言的一个重要特性就是在语言级支持多线程的程序设计 多线程就好像我们做一张桌子 如果你一个人完成这张桌子 就好像单线程 那么你需要先做桌面 做完桌面后 再做4个桌子腿 如果现在有5个人来做桌子 在程序中开辟5个线程 其中1个人做桌面 另外4个人分别做4个桌子腿 那么这两种方式效率的高低 相信大家都能区分出来 http www sunxin orgDownload 我们为什么要用Java 动态的Java的动态特性是其面向对象设计方法的扩展 它允许程序动态地装入运行过程中所需要的类 这是我们采用C 语言进行面向对象程序设计所无法实现的 在C 程序设计过程中 每当在类中增加一个实例变量或一个成员函数后 引用该类的所有子类都必须重新编译 否则将导致程序崩溃 Java从以下几个方面采取措施来解决这个问题 Java编译器不是将对实例变量和成员函数的引用编译为数值引用 而是将符号引用信息在字节码中保存下来 传递给解释器 再由解释器在完成动态连接类后 将符号引用信息转换为数值偏移量 一个在存储器中生成的对象不在编译过程中决定 而是延迟到运行时由解释器确定 这样 对类中的变量和方法进行更新时就不至于影响现存的代码 解释执行字节码时 这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次 随后代码便可以全速执行 在运行时确定引用的好处是可以使用已被更新的类 而不必担心会影响原有的代码 如果程序连接了网络中另一系统中的某一类 该类的所有者也可以自由地对该类进行更新 而不会使任何引用该类的程序崩溃 Java还简化了使用一个升级的或全新协议的方法 如果你的系统运行Java程序时遇到了不知怎样处理的程序 Java能自动下载你所需要的功能程序 http www sunxin orgDownload Java跨平台的原理 Java的跨平台是通过Java虚拟机 JVM 来实现的 http www sunxin orgDownload Java跨平台的原理 Java源文件的编译过程Java应用程序的开发周期包括编译 下载 解释和执行几个部分 Java编译程序将Java源程序翻译为JVM可执行代码 字节码 这一编译过程同C C 的编译有些不同 当C编译器编译生成一个对象的代码时 该代码是为在某一特定硬件平台运行而产生的 因此 在编译过程中 编译程序通过查表将所有对符号的引用转换为特定的内存偏移量 以保证程序运行 Java编译器却不将对变量和方法的引用编译为数值引用 也不确定程序执行过程中的内存布局 而是将这些符号引用信息保留在字节码中 由解释器在运行过程中创建内存布局 然后再通过查表来确定一个方法所在的地址 这样就有效的保证了Java的可移植性和安全性 http www sunxin orgDownload Java跨平台的原理 Java解释器的执行过程运行JVM字节码的工作是由解释器来完成的 解释执行过程分三步进行 代码的装入 代码的校验和代码的执行 装入代码的工作由 类装载器 classloader 完成 类装载器负责装入运行一个程序需要的所有代码 这也包括程序代码中的类所继承的类和被其调用的类 当类装载器装入一个类时 该类被放在自己的名字空间中 除了通过符号引用自己名字空间以外的类 类之间没有其他办法可以影响其它类 在本台计算机上的所有类都在同一地址空间内 而所有从外部引进的类 都有一个自己独立的名字空间 这使得本地类通过共享相同的名字空间获得较高的运行效率 同时又保证它们与从外部引进的类不会相互影响 当装入了运行程序需要的所有类后 解释器便可确定整个可执行程序的内存布局 解释器为符号引用同特定的地址空间建立对应关系及查询表 通过在这一阶段确定代码的内存布局 Java很好地解决了由超类改变而使子类崩溃的问题 同时也防止了代码对地址的非法访问 随后 被装入的代码由字节码校验器进行检查 校验器可发现操作数栈溢出 非法数据类型转换等多种错误 通过校验后 代码便开始执行了 http www sunxin orgDownload Java跨平台的原理 Java字节码的两种执行方式1 即时编译方式 解释器先将字节码编译成机器码 然后再执行该机器码 2 解释执行方式 解释器通过每次解释并执行一小段代码来完成Java字节码程序的所有操作 通常采用的是第二种方法 由于JVM规格描述具有足够的灵活性 这使得将字节码翻译为机器代码的工作具有较高的效率 对于那些对运行速度要求较高的应用程序 解释器可将Java字节码即时编译为机器码 从而很好地保证了Java代码的可移植性和高性能 http www sunxin orgDownload Java跨平台的原理 JVM规格描述JVM的设计目标是提供一个基于抽象规格描述的计算机模型 为解释程序开发人员提供很好的灵活性 同时也确保Java代码可在符合该规范的任何系统上运行 JVM对其实现的某些方面给出了具体的定义 特别是对Java可执行代码 即字节码 Bytecode 的格式给出了明确的规格 这一规格包括操作码和操作数的语法和数值 标识符的数值表示方式 以及Java类文件中的Java对象 常量缓冲池在JVM的存储映象 这些定义为JVM解释器开发人员提供了所需的信息和开发环境 Java的设计者希望给开发人员以随心所欲使用Java的自由 JVM是为Java字节码定义的一种独立于具体平台的规格描述 是Java平台独立性的基础 http www sunxin orgDownload Java跨平台的原理 Java程序执行与C C 程序执行的对比分析如果把Java源程序想象成我们的C 源程序 Java源程序编译后生成的字节码就相当于C 源程序编译后的80 x86的机器码 二进制程序文件 JVM虚拟机相当于80 x86计算机系统 Java解释器相当于80 x86CPU 在80 x86CPU上运行的是机器码 在Java解释器上运行的是Java字节码 Java解释器相当于运行Java字节码的 CPU 但该 CPU 不是通过硬件实现的 而是用软件实现的 Java解释器实际上就是特定的平台下的一个应用程序 只要实现了特定平台下的解释器程序 Java字节码就能通过解释器程序在该平台下运行 这是Java跨平台的根本 当前 并不是在所有的平台下都有相应Java解释器程序 这也是Java并不能在所有的平台下都能运行的原因 它只能在已实现了Java解释器程序的平台下运行 http www sunxin orgDownload Java应用分类 1 应用程序典型的通用程序可以在具备Java运行环境的设备中独立运行 它又分为 GUI应用程序 即图形用户界面程序 可实现丰富的输入界面和输出显示 命令行程序 无需界面 只需在命令行下运行 运行结果只在后台发生变化 可以将输出存放到文件中 嵌入式应用程序 Java语言的平台独立性决定了它可以嵌入到不同的设备中 且只需具备必要的运行环境即可 1 4JDK包的下载与安装 JavaDevelopKit简称为JDK 是Sun公司免费发行的软件包 可以从Sun网站免费下载 也可以从其它国内地址下载 JDK版本从1 02开始 目前版本发展到1 4 其中高级版本对低级版本实现向下兼容 运用这个软件包 就可以对Java源程序进行编译和运行 本书中下载使用的JDK包为j2sdk 1 4 0 012 windows i586 exe 下载后双击图标 即可进行安装 默认的安装目录为C j2sdk1 4 0 01 本书作者将安装目录改为D j2sdk1 4 0 01 1 5Java环境配置 JDK包安装完成后 需要设置环境变量 用鼠标右键单击桌面上的图标 我的电脑 选择 属性 项 出现标题为 系统特性 的对话框 点击 高级 标签 可以看见有一个 环境变量 按钮 如图1 1所示 图1 1 系统特性 对话框 单击 环境变量 按钮 可以看见本机环境变量 如图1 2所示 上面为用户变量 下面为系统变量 随着操作系统或用户环境的不同 变量名 值有所不同 这里需要修改三个用户变量 include lib和path 分别将JDK包安装之后的相应路径包含到这三个用户变量中 图1 2 环境变量 对话框 选中include变量 单击 编辑 按钮 弹出标题为 编辑用户变量 的对话框 如图1 3所示 在变量值一栏的最后添加 D j2sdk1 4 0 01 include 表示与前面的各项隔开 后面的路径是JDK包的安装路径下的include目录 图1 3为作者修改include变量的情况 注意你的安装路径可能与作者的有所不同 要以你的安装路径为基准进行修改 图1 3编辑include变量 选中lib变量 单击 编辑 按钮 弹出标题为 编辑用户变量 的对话框 如图1 4所示 在变量值一栏的最后添加 D j2sdk1 4 0 01 lib 表示与前面的各项隔开 后面的路径是JDK包的安装路径下的lib目录 图1 4为作者修改lib变量的情况 注意你的安装路径可能与作者的有所不同 要以你的安装路径为基准进行修改 图1 4编辑lib变量 选中path变量 单击 编辑 按钮 弹出标题为 编辑用户变量 的对话框 如图1 5所示 在变量值一栏的最后添加 D j2sdk1 4 0 01 bin 表示与前面的各项隔开 后面的路径是JDK包的安装路径下的bin目录 图1 5为作者修改path变量的情况 注意你的安装路径可能与作者的有所不同 同样要以你的安装路径为基准进行修改 图1 5编辑path变量 Java开发工具包括 Javac Java编译器 用来将java程序编译成Bytecode Java Java解释器 执行已经转换成Bytecode的java应用程序 Jdb Java调试器 用来调试java程序 Javap 反编译 将类文件还原回方法和变量 Javadoc 文档生成器 创建HTML文件 Appletviwer Applet解释器 用来解释已经转换成Bytecode的java小应用程序 Java开发环境 C Jdk bin lib javac java appletviewer 用户类文件所在目录c java examples applications 当前目录 jre demo Java开发环境 多数编程语言都有预选编译好的类库以支持各种特定的功能在Java中 类库以包 package 的形式提供不同版本的Java提供不同的包 以面向特定的应用Java2平台包括标准版 J2SE 企业版 J2EE 和微缩版 J2ME 三个版本 Java开发类库组成 StandardEditionJ2SE包含那些构成Java语言核心 标准版 的类 数据库连接 接口定义 输入 输出 网络编程EnterpriseEditionJ2EE包含J2SE中的类 并且还包 企业版 含用于开发企业级应用的类 EJB servlet JSP XML 事务控制MicroEditionJ2ME包含J2SE中一部分类 用于 微缩版 消费类电子产品的软件开发 呼机 智能卡 手机 PDA 机顶盒 Java开发类库组成 Java2的三个版本 Java提供了丰富的标准类来帮助程序设计者更方便快捷地编写程序 这些标准类组成了类包 主要有 java util 除了java lang之外 其余类包都不是java语言所必须的 Java开发类库组成 J2SE的类包 Languagejava lang构成Java语言核心的类Object Math String Number Exception System Runtime Utilitiesjava util提供实用的数据结构Vector Stack Hashtable Colloection List Set Map I Ojava io提供多种类型的输出 输出InputStream OutputStream Reader Writer RandomAccessFile File Textjava text文本 日期 数字 消息的本地化支持NumberFormat DateFormat andCollator Mathjava math提供任意精度的整数和浮点数运算AWTjava awt用户接口设计和事件处理Swingjavax swing提供全Java的 在任何平台上表现都相同的轻量级构件 Java开发类库组成 J2SE的类包 Javaxjavax对Java语言的扩展Appletjava applet用于创建Applet的类Beansjava beans用于开发JavaBeans的类Reflectionjava lang reflect用于动态获取类信息的类SQLjava sql提供对数据库中数据的访问和处理Connection ResultSet Statement RMIjava rmi支持分布式编程Networking支持开发网络应用的类Socket URL URLConnection Securityjava security支持访问控制和信息安全的类用于访问控制 防止非信任代码执行关键操作认证相关的类 实现了消息摘要和数字签名与数字认证等 Java开发类库组成 J2SE的类包 1 java lang本类包中包含了各种定义java语言时必须的类 这些类能够以其他类不能使用的方式访问java的内部 任何java程序都将自动引入这个包 其中的类包括 Object类 java中最原始 最重要的类 每个java类都是它的子类 它实现了每个类都必须具有的基本方法 基本类型包装器 Boolean Character Number Double Float Integer Long String类 字符串类 Math类 数学函数的集合 执行线程 类Thread ThreadGroup 接口Runable 异常和错误 类Exception Error 接口Throwable Java开发类库组成 J2SE的类包 1 java lang运行环境 可以通过类Runtime和System访问外部系统环境 System类的两个常用功能就是访问标准输入 输出流和错误流 退出程序 其他类 接口Cloneable 运行时的类等 2 java appletJavaApplet是Java编程的一个主要魅力 java applet类包提供了Applet的运行机制以及一些编写Applet非常有用的方法 Java开发类库组成 J2SE的类包 3 java awt本类包是各种窗口环境的统一界面 AWT代表AbstractWindowsToolkit 即抽象窗口工具包 其中的类使得创建诸如窗口 菜单 滚动条 文本区 按钮以及复选框等图形用户界面 GUI 的元素变得非常容易 4 java awt image类包能够以独立于设备的方式加载并过滤位图图象 5 java awt peerjava awt peer是全部awt组件的对等对象接口的集合 每个接口都提供了机器相关基本的方法 awt使用这些方法来实现GUI 而不必关心是何种机器或操作系统 Java开发类库组成 J2SE的类包 6 java ioJava的输入 输出模式是完全建立在流的基础之上的 流是一种字节从一个地方到另一个地方的单向流动 可以把流附加于文件 管道和通信链路等 java io类包中定义的许多种流类通过继承的方式进行组织 其中也包括一些用来访问本地文件系统上的文件的流类 7 类包用来完成与网络相关的功能 URL WWW连接以及更为通用的Socket网络通信 8 java utiljava util类包包含了一些实用类和有用的数据结构 如字典 Dictionary 散列表 Hashtable 堆栈 Stack 向量 Vectro 以及枚举类 Enumeration 等 Java开发类库组成 J2SE的类包 编写源文件 1 源文件的组成使用一个文字编辑器 如Edit或记事本 来编写源文件 不可使用Word编辑器 因它含有不可见字符 Java是面向对象编程 Java应用程序的源文件是由若干个书写形式互相独立的类组成 见例子1 第一个Java应用程序 应用程序的主类 一个Java应用程序必须有一个类含有publicstaticvoidmain Stringargs 方法 称这个类是应用程序的主类 args 是main方法的一个参数 是一个字符串类型的数组 注意String的第一个字母是大写的 以后会学习怎样使用这个参数 源文件的命名规则 源文件有几个类 源文件名 该类类名 有public类 源文件名 类名之一 有几个public类 源文件名 该Public类名 这是不允许的 包 类 变量 方法等命名 要体现各自的含义 包名全部小写 io awt类名第一个字母要大写 HelloWorldApp变量名第一个字母要小写 userName方法名第一个字母要小写 setName程序书写格式 保证良好的可读性 使程序一目了然 大括号 的使用与对齐语句段的对齐在语句段之间适当空行程序注释 帮助了解程序的功能 类注释变量注释方法注释语句注释语句段注释建议 一个类一个 java文件 程序示例 Java程序 程序书写规范 第一个Java应用程序 1 编写程序 创建源代码文件 HelloWorldApp java TheHelloWorldAppclassimplementsanapplicationthat simplydisplays HelloWorld tothestandardoutput classHelloWorldApp publicstaticvoidmain String args System out println HelloWorld Displaythestring 第一个Java应用程序 2 进入到源文件所在的目录 第一个Java应用程序 3 编译源文件输入指令 javacHelloWorldApp java 如果成功将在当前目录下产生文件HelloWorldApp class 第一个Java应用程序 4 运行程序输入指令 javaHelloWorldApp Java开发工具包 JDK 字节码编译器 javac exe 将Java文件 java 编译为字节码文件 class 用法示例 javacHellow java 文件名 字节码解释器 java exe 解释执行字节码文件 class 用法示例 javaHellow 类名 Applet浏览器 appletviewer exe 用于Applet开发过程中的测试用法示例 appletviewerHellow html 网页文件名 Java语言编译执行流程 编译器 解释器 编译一次 但每次执行时均需解释 Java程序的开发流程 Application 程序分析 thisisasimpleJavaprogram CallthisfileExample java publicclassExample mainfunctionpublicstaticvoidmain String args System out println Hellowworld 程序分析 注释 注释的作用 程序执行时会忽略所有的注释注释用于说明程序开发者的意图 不是语法说明 注释可以提高程序可读性 单行注释 多行注释多行注释 多行注释多行注释 不能嵌套 xx yy zz 注释可以跟在一行代码的后面 javadoc使用该类注释产生程序文档 程序分析 类 classExample 开始定义类HelloWorldApp每一个Java程序至少有一个用户自定义的类关键字 专供Java本身使用的词关键字class后紧跟类名类名规范 每个单词的首字母大写 例如 SampleClassName 77 分析程序 程序从main 方法开始执行关键字public是一个访问说明符 控制类成员的可见度和作用域关键字static允许调用main 方法 而无需创建类的实例关键字void告诉编译器main 方法在执行时不返回任何值 程序分析 程序的入口 main函数必须严格象下面那样定义main函数是Java程序的入口 由main函数调用其它函数 它是每一个Java应用程序 application 的必备部分方法 函数 用于完成某个任务并返回结果信息void表明main方法不返回任何结果由 开始方法定义 由 结束方法定义 publicstaticvoidmain Stringargs 程序分析 输出语句 命令计算机执行一个指令打印一个字符串字符串 由双引号包围的一系列字符字符串中的空白符会被编译器保留下来 System out标准输出对象在MS DOS窗口中输出内容System out printlnSystem out对象的一个方法 显示一行文本括号中是参数这一行被称为语句语句必须用 结束 System out println Javadrivestheweb 程序分析 语句 所有的语句以 结束一个单独的语句可以被分为多行不能在一个标识符中间或字符串内部断开一个语句 System out println HelloWorld System out println HelloWorld X System out println HelloWorld X 第二个简单程序 publicclassExample2 publicstaticvoidmain String args intvar1 声明变量var1intvar2 声明变量var2var1 1024 将1024赋值给变量var1System out println var1中存放的数字是 var1 var2 var1 2 System out print var2中存放的数字是var1 2 System out println var2 程序分析 变量 变量就是内存单元的名字定义 类型名变量名 强类型语言 变量要先定义再使用变量名必须是合法的标识符Java中区分大小写 sun与Sun不同 变量和内存 变量每个变量都有一个名字 数据类型 所占内存单元数和一个值名字对应于内存中的位置当新值被赋给变量老值将被取代从内存中读数据不会破坏数据 内存概念 sum 0 number1 1 number2 2 sum number1 number2 执行之后 第一次使用Java时常见的问题 编译时运行时 使用 作为目录名分割符 yourhome javacexamples ch1 Welcome1 java错误 不能读 examples ch1 Welcome1 java1个错误解决办法 yourhome javacexamples ch1 Welcome1 java或者 yourhome javacexamples ch1 Welcome1 java Java编译时常见的问题 1 Java编译时常见的问题 2 忘记文件后缀 java yourhome javacexamples ch1 Welcome1javac 无效的参数 examples ch1 Welcome1用法 javac 解决办法 yourhome javacexamples ch1 Welcome1 java或者 yourhome javacexamples ch1 Welcome1 java Java运行时常见的问题 1 使用 最为包名的分割符 yourhome javaexamples ch1 Welcome1Exceptioninthread main java lang NoClassDefFoundError examples ch1 Welcome1 wrongname examples ch1 Welcome1 atjava lang ClassLoader defineClass0 NativeMethod 解决办法 yourhome javaexamples ch1 Welcome1或者 yourhome javaexamples ch1 Welcome1 Java运行时常见的问题 2 没有把当前目录加到classpath环境变量中 yourhome javaexamples ch1 Welcome1Exceptioninthread main java lang NoClassDefFoundError examples ch1 Welcome1解决办法 setclasspath classpath 或者 yourhome java classpath examples ch1 Welcome1 Java编译小窍门 命令行 javac java可以编译当前目录下所有的 java文件命令行 javacyourpackage java编译yourpackage目录下所有的 java文件 第2章Java基本语法 2 1Java程序的构成2 2数据类型 变量和常量2 3运算符和表达式2 4流程控制2 5数组的使用习题 2 1Java程序的构成 2 1 1逻辑构成Java源程序逻辑构成分为两大部分 程序头包的引用和类的定义 1 程序头包的引用主要是指引用JDK软件包自带的包 也可以是自己定义的类 引用之后程序体中就可以自由应用包中的类的方法和属性等 2 类的定义Java源程序中可以有多个类的定义 但必须有一个主类 这个主类是Java程序运行的入口点 在应用程序中 主类为包含main方法的类 在Applet中 主类为用户自定义的系统Applet类的扩展类 在Java源程序中 主类的名字同文件名一致 类的定义又包括类头声明和类体定义 类体中包括属性声明和方法描述 下面来看一个例子 其中斜体表示的语句行为主类类头 主类类头下面从大括号 开始到 结束的部分称为主类类体 例2 1 下面是一个应用程序 也是一个Applet 既可以在命令行下运行 也可以嵌入到HTML网页中用appletviewer命令运行 运行时在界面上的第一个文本框中输入你的名字 按回车键后 在第二个文本框中会显示 XXX 欢迎你来到Java世界 运行结果如图2 1所示 actionPerformed方法 main主方法 图2 1程序界面 2 1 2物理构成Java源程序物理上由三部分构成 分别为语句 块和空白 1 语句指一行以分号 结束的语句 2 块指用括号对 界定的语句序列 块可以嵌套使用 3 空白指语句之间 块内部或者块之间的空白行 空白不影响Java源程序的编译和运行 适当地运用空白 可以形成良好的代码风格 在例1 1中 LabellblName TextFieldtxtName TextFieldtxtDisp 都是语句 而 lblName newLabel 请输入您的名字 txtName newTextField 8 txtDisp newTextField 20 add lblName add txtName add txtDisp txtName addActionListener this 是块 语句之间 块之间或块内部的空行都为空白 2 1 3注释语句注释语句主要用来进行一些说明 或者标记一些无用的程序语句 有两种注释方法 行注释为以 开始的行 块注释以 开始和 结束 Java编译器忽略注释后的程序语句或说明 例如 下面的语句就是注释语句用来说明程序文件名称的 程序文件名称为WelcomeApplet java上述的语句注释可以更改为 程序文件名称为WelcomeApplet java 或 程序文件名称为WelcomeApplet java 2 1 4标识符 关键字和转义符在Java语言中 标识符是赋予变量 类和方法等的名称 标识符由编程者自己指定 但需要遵循一定的语法规范 1 标识符由字母 数字 下划线 美元符号 组成 但美元符号用得较少 2 标识符从一个字母 下划线或美元符号开始 3 Java语言中 标识符大小写敏感 必须区别对待 4 标识符没有最大长度的限制 但最好表达特定的意思 5 标识符定义不能是关键字 关键字又称保留字 是指Java语言中自带的用于标志数据类型名或者程序构造名等的标识符 如public double等 转义符是指一些有特殊含义的 很难用一般方式表达的字符 如回车 换行等 所有的转义符以反斜线 开头 后面跟着一个字符来表示某个特定的转义符 如表2 1所示 具有专门的意义和用途 不能当作一般的标识符使用 这些标识符称为保留字 reservedword abstractbreakbytebooleancatchcaseclasscharcontinuedefaultdoubledoelseextendsfalsefinalfloatforfinallyifimportimplementsintinterfaceinstanceoflonglengthnativenewnullpackageprivateprotectedpublicfinalreturnswitchsynchronizedshortstaticsupertrytruethisthrowthrowsthreadsafetransientvoidwhile Java语言基本元素 保留字 数据和返回值类型 int void return 包 类 成员 接口 package class interface访问控制 public private protected循环及循环控制 if switch break例外处理 throw try finally保留词 无含义但不能使用 goto const Java语言基本元素 保留字 基本分类 在Java中 true false和null都是小写的 区别于C 中大写的TRUE FALSE和NULL 所有的数据类型所占用的字节数都是固定的 并且和实现无关的 因此在Java中没有sizeof操作符 不必死记这些关键词 当理解每个关键词的含义后 自然就记住了所有的关键词 Java语言基本元素 保留字 注意事项 表2 1转义符 2 2数据类型 变量和常量 2 2 1数据类型Java编程语言定义了八种基本的数据类型 见表2 2 共分为四类 整数类 byte short int long 文本类 char 浮点类 double float 和逻辑类 boolean 109 数据属于不同类别 非洲 Thequickbrownfox TRUE 数据 非数值 数值 整型 非整型 9002 12 999 9 12 2003 2 175 123 陈扬 char 非数值 数值 整型 int double 非整型 String Java常用数据类型 数据类型 表2 2Java的数据类型 1 整数类 1 采用三种进制 十进制 八进制和十六进制 2 十进制值是2 077 首位的0表示这是一个八进制的数值 0 xBAAC 首位的0 x表示这是一个十六进制的数值 2 具有缺省int 3 用字母 L 和 l 定义long 4 所有Java编程语言中的整数类型都是带符号的数字 2 文本类 1 代表一个16bitUnicode字符 2 必须包含用单引号 引用的文字 3 使用下列符号 a 一个字符 t 一个制表符 u 一个特殊的Unicode字符 应严格使用四个十六进制数进行替换 3 浮点类默认为double类型 如果一个数字包括小数点或指数部分 或者在数字后带有字母F或f float D或d double 则该数字为浮点数 4 逻辑类boolean数据类型有两种值 true和false 例如 booleanflag true 上述语句声明变量flag为boolean类型 它被赋予的值为true 2 2 2变量与常量常量是指整个运行过程中不再发生变化的量 例如数学中的 3 1415 在程序中需要设置成常量 而变量是指程序的运行过程中发生变化的量 通常用来存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论