已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与技术学院计算机科学与技术学院 JAVAJAVA 技术技术 学生姓名 学生姓名 韩公达韩公达 专业班级 专业班级 应用技术应用技术 4 班班 学学 号 号 410820010414 2009 年年 7 月月 3 日日 河南理工大学毕业设计 论文 说明书 I 目目 录录 1 1前前 言言 1 2 2 课题课题 2 2 1 课题意义 2 课题内容 2 课题内容详解 2 1 类与对象 2 2 3 2 多线程 3 3 关于 jdk 和 jre 4 2 4 实例 5 2 4 1 程序代码 5 2 4 2 实例分析 7 2 5 论文感想 10 参考文献参考文献 10 致谢致谢 11 河南理工大学毕业设计 论文 说明书 1 1 1前前 言言 Java 是基于网络的面向对象的程序语言 能编写各式各样的软件 适应与各种平 台与操作系统 编译后的代码能在互联网上传送并确保用户的用户安全运行 因而是 当前极富生命力的计算机语言 在从发表 发展 成熟 壮大的短短 10 多年里 Java 如同一颗冉冉升起的耀眼巨星 迅速超越 C 和 C 独占头鳌 成为软件开发最广泛 应用的编程语言 目前 Java 已经成为了编程语言的骄子 我们可以看到 越来越多的大学在教授数 据结构 程序设计和算法分析等课程时 选择以 Java 语言为载体 这说明 Java 语言 已经是人们构建软件系统时主要使用的一种编程语言 但是 掌握好 Java 语言并不是 一件可以轻松完成的任务 如何真正掌握 Java 语言 从而编写出健壮的 高效的以及 灵活的程序是 Java 程序员们面临的重大挑战 如何学好 Java 是很多初学者一直探索的问题 然而学编程关键在动手 心动不如 行动 光看书是学不会 Java 的 要想知道梨子的滋味 必须亲口尝尝 学习编程是 实践性很强的艺术 上课认真听讲 专心记笔记 下课费心看书 逐字逐段抠书本 但却忽视实践环节 缺乏动手能力 为什么 做练习太少 上机编程序太少 分析 并修改程序例子太少 这些不足在中国留学生身上尤显突出 针对这个特点 学习编 程语言应强调练习 实践 分析 修改 提高 巩固这几个环节 总而言之 学习好程序语言只有多读 多写程序 多加练习 只要存在的都是合 理的 的确 java 虽神奇 但它毕竟是为我们服务的 它的难学只是对初学者而言 所以遇到困难只要不退却 肯钻研 有一天你会发现你也能在编程世界里展翅翱翔 河南理工大学毕业设计 论文 说明书 2 2 2 课题课题 2 1 课题意义课题意义 本课题是对 JAVA 语言重要知识做个介绍 更深的理解面向对象的编程思想 了解 JAVA 中具体的对象 课题内容 课题内容 类与对象的初探 Java 的多线程编程 了解关于 jdk 和 jre 程序实例分析 课题内容详解 课题内容详解 1 类与对象类与对象 要我说 无论是面向过程的语言也好 面向对象的语言也罢 我首先要给他讲的 都是类和对象 这个世界是由什么组成的 这个问题如果 让不同的人来回答会得到 不同的答案 如果是一个化学家 他也许会告诉你 还用问嘛 这个世界是由分子 原 子 离子等等的化学物质组成的 如果是一个画家呢 他也许会告诉你 这个世界是 由不同的颜色所组成的 呵呵 众说纷纭吧 但如果让一个分类学家来考虑问题就有 趣的多了 他会告诉你 这个世界是由不同类型的物与事所构成的 好 作为面向对象的 程序员来说 我们要站在分类学家的角度去考虑问题 是的 这个世界是由动物 植 物等组成的 动物又分为单 细胞动物 多细胞动物 哺乳动物等等 哺乳动物又分为 人 大象 老虎 就这样的分下去了 现在 站在抽象的角度 我们给 类 下个定义吧 我的意思是 站在抽象的角度 你回答我 什么是人类 首先让我们来看看人类所具有的一些特征 这个特征包括属性 一些参数 数值 以及方法 一些行为 他能干什么 每个人都有身高 体重 年龄 血型等等一些属性 人会劳动 人都会直立行走 人都会 用自己的头脑去创造 工具等等这些方法 人之所以能区别于其它类型的动物 是因为每个人都具有人这个 群体的属性与方法 人类 只是一个抽象的概念 它仅仅 是一个概念 它是不存在的 实体 但是所有具备 人类 这个群体的属性与方法的对象都叫人 这个对象 人 是实际 河南理工大学毕业设计 论文 说明书 3 存在的实体 每个人都是人这个群体的一个对象 老虎为什么不是人 因为它不具备 人这个群体的属性与方法 老虎不会直立行走 不会使用工具等等 所以说老虎不是 人 由此可见 类描述了一组有相同特性 属性 和相同行为 方法 的对象 在 程序中 类实际上就是数据类型 例如 整数 小数等等 整数也有一组特性和行为 面向过程的语言与面相对象的语言的区别就在于 面向过程的语言不允许程序员自己 定义数据类型 而只能使用程序中内置的数据类型 而为了模拟真实世界 为了更好 的解决问题 往往我们需要创建解决问题所必需的数据类型 面向对象编程为我们提 供了解决方案 我学习 java 有半年时间 对类与对象的理解仅限于这种水平 例子举得有点死板 理论说的有点抽象 在我个人看来 java 这种面向对象的编程语言 即便你不理解什 么是对象思想 但只要你能调动控件 让程序做你想要做的事 那么什么是思想 类 对象 无所谓 2 3 2 多线程多线程 学习多线程往往存在下列疑惑 a 线程的 wait notify 方法到底是做什么时候用的 什么时候用 b A 对象实现 Runnable 接口 A start 运行后所谓的线程对象是谁 是 A 么 c 线程的 wait notify 方法到底是做什么时候用的 什么时候用 d 为什么线程的 suspend 方法会被标注过时 不推荐再使用 线程还能挂起么 e 为了同步我们会对线程方法声明 Synchronized 来加锁在对象上 那么如果父类 的 f 方法加了 Synchronized 子类重写 f 方法必须也加 Synchronized 么 如果子类的 f 方法重写时声明 Synchronized 并调用 super f 那么子类对象上到底有几把锁呢 会 因为竞争产生死锁么 首先第一点 线程跟对象完全是两回事 虽然我们也常说线程对象 但当你用 run 和 start 来启动一个线程之后 线程其实跟这个继承了 Thread 或实现了 Runnable 的对象已经没有关系了 对象只能算内存中可用资源而对象的方法只能算内存正文区 可以执行的代码段而已 既然是资源和代码段 另外一个线程当然也可以去访问 main 函数执行就至少会启动两个线程 一个我们称之为主线程 还一个是垃圾收集器 的线程 主线程结束就意味着程序结束 可垃圾收集器线程很可能正在工作 第二点 wait 和 sleep 类似 都是让线程处于阻塞状态暂停一段时间 不同之处 河南理工大学毕业设计 论文 说明书 4 在于 wait 会释放当前线程占有的所有的锁 而 sleep 不会 我们知道获得锁的唯一方 法是进入了 Synchronized 保护代码段 所以大家会发现只有 Synchronized 方法中才会 出现 wait 直接写会给警告没有获得当前对象的锁 所以 notify 跟 wait 配合使用 notify 会重新把锁还给阻塞的线程重而使其继续执行 当有多个对象 wait 了 notify 不 能确定唤醒哪一个 必经锁只有一把 所以一般用 notifyAll 来让它们自己根据优先级 等竞争那唯一的一把锁 竞争到的线程执行 其他线程只要继续 wait 从前 Java 允许在一个线程之外把线程挂起 即调用 suspend 方法 这样的操作是 极不安全的 根据面向对象的思想每个对象必须对自己的行为负责 而对自己的权力 进行封装 如果任何外步对象都能使线程被挂起而阻塞的话 程序往往会出现混乱导 致崩溃 所以这样的方法自然是被毙掉了啦 最后一个问题比较有意思 首先回答的是子类重写 f 方法可以加 Synchronized 也 可以不加 如果加了而且还内部调用了 super f 的话理论上是应该对同一对象加两把 锁的 因为每次调用 Synchronized 方法都要加一把 调用子类的 f 首先就加了一把 进入方法内部调用父类的 f 又要加一把 加两把不是互斥的么 那么调父类 f 加锁不 就必须永远等待已经加的锁释放而造成死锁么 实际上是不会的 这个机制叫重进入 当父类的 f 方法试图在本对象上再加一把锁的时候 因为当前线程拥有这个对象的锁 也可以理解为开启它的钥匙 所以同一个线程在同一对象上还没释放之前加第二次锁 是不会出问题的 这个锁其实根本就没有加 它有了钥匙 不管加几把还是可以进入 锁保护的代码段 畅通无阻 所以叫重进入 我们可以简单认为第二把锁没有加上去 其实 Synchronized 的本质是不让其他线程在同一对象上再加一把锁 3 关于关于 jdk 和和 jre 大家肯定在安装 JDK 的时候会有选择是否安装单独的 jre 一般都会一起安装 我 也建议大家这样做 因为这样更能帮助大家弄清楚它们的区别 Jre 是 java runtime environment 是 java 程序的运行环境 既然是运行 当然要包含 jvm 也就是大家熟悉 的虚拟机啦 还有所有 java 类库的 class 文件 都在 lib 目录下打包成了 jar 大家可以 自己验证 至于在 windows 上的虚拟机是哪个文件呢 学过 MFC 的都知道什么是 dll 文件吧 那么大家看看 jre bin client 里面是不是有一个 jvm dll 呢 那就是虚拟机 Jdk 是 java development kit 是 java 的开发工具包 里面包含了各种类库和工具 河南理工大学毕业设计 论文 说明书 5 当然也包括了另外一个 Jre 那么为什么要包括另外一个 Jre 呢 而且 jdk jre bin 同时有 client 和 server 两个文件夹下都包含一个 jvm dll 说明是有两个虚拟机的 这一点不知 道大家是否注意到了呢 相信大家都知道 jdk 的 bin 下有各种 java 程序需要用到的命令 与 jre 的 bin 目录最明显的区别就是 jdk 下才有 javac 这一点很好理解 因为 jre 只是 一个运行环境而已 与开发无关 正因为如此 具备开发功能的 jdk 自己的 jre 下才会 同时有 client 性质的 jvm 和 server 性质的 jvm 而仅仅作为运行环境的 jre 下只需要 client 性质的 jvm dll 就够了 记得在环境变量 path 中设置 jdk bin 路径麽 这应该是大家学习 Java 的第一步吧 老师会告诉大家不设置的话 javac 和 java 是用不了的 确实 jdk bin 目录下包含了所有 的命令 可是有没有人想过我们用的 java 命令并不是 jdk bin 目录下的而是 jre bin 目录 下的 大家可以把 jdk bin 目录下的 java exe 剪切到别的地方再运行 java 程序 一切运转 正常 试想一下如果 java 为了提供给大多数人使用 他们是不需要 jdk 做开发的 只需 要 jre 能让 java 程序跑起来就可以了 那么每个客户还需要手动去设置环境变量多麻烦 啊 所以安装 jre 的时候安装程序自动帮你把 jre 的 java exe 添加到了系统变量中 验 证的方 如果强行能够把 jdk bin 挪到 system32 变量前面 当然也可以迫使使用 jdk jre 里面的 java 不过除非有必要 我不建议大家这么做 使用单独的 jre 跑 java 程序也算 是客户环境下的一种测试 2 4 实例实例 2 4 1 程序代码程序代码 import java awt import java awt event import import java io import javax swing import javax swing text DefaultStyledDocument author 韩公达 HTTP 连接与浏览 public class HTTPBrowser extends JFrame 河南理工大学毕业设计 论文 说明书 6 JTextField jtfAddress 输入 html 文件地址或网址 JTextPane jtpShow 显示页面 JTextArea jtaSource 显示 HTML 源文件 public HTTPBrowser super HTTP 连接与浏览 调用父类构造函数 jtfAddress new JTextField 30 实例化地址输入框 jtpShow new JTextPane 实例化显示内容框 jtaSource new JTextArea JPanel p1 new JPanel 实例化面板 JSplitPane spane new JSplitPane JSplitPane VERTICAL SPLIT 实例化分隔面板 p1 add new JLabel 地址 增加组件到面板上 p1 add jtfAddress spane add new JScrollPane jtpShow JSplitPane TOP spane add new JScrollPane jtaSource JSplitPane BOTTOM spane setDividerLocation 130 设置分隔位置 spane setDividerSize 2 设置分隔栏尺寸 Container container getContentPane 得到容器 container add p1 BorderLayout NORTH 增加组件到容器上 container add spane BorderLayout CENTER jtfAddress addActionListener new ShowHTMLListener 输入地址文本域事件处 理 setSize 380 300 设置窗口尺寸 setVisible true 设置窗口可视 setDefaultCloseOperation JFrame EXIT ON CLOSE 关闭窗口时退出程序 class ShowHTMLListener implements ActionListener public void actionPerformed ActionEvent event 河南理工大学毕业设计 论文 说明书 7 try URL address new URL jtfAddress getText 得到 HTML 页面的 URL 地址 jtpShow setContentType text html 设置内容格式 jtpShow setPage address 设置显示页面 BufferedReader in new BufferedReader new InputStreamReader address openStream 获取输入流 String line StringBuffer content new StringBuffer 文件内容 while line in readLine null 读取文件 content append line n jtaSource setText new String content 设置显示文本 in close 关闭输入流 catch Exception ex ex printStackTrace 输出出错信息 public static void main String args new HTTPBrowser 2 4 2 实例分析实例分析 1 程序功能说明 本程序可实现网络连接 在 URL 地址栏输入网址 如果网络链接正常 HTTP 链 接会转到相应的页面 界面的上半部分显示网页 下半部分显示网页的代码 2 程序中所用到的类 用户自定义类 HTTPBrowser 此类继承自 JFrame 关于 JFrame 河南理工大学毕业设计 论文 说明书 8 Swing 的三个基本构造块 标签 按钮和文本字段 但是现在需要个地方放它们 希望用户知道如何处理它们 JFrame 类就是做这个的 它是一个容器 允许您把其 他组件添加到它里面 把它们组织起来 并把它们呈现给用户 JFrame 实际上不仅仅 让您把组件放入其中并呈现给用户 比起它表面上的简单性 它实际上是 Swing 包中 最复杂的组件 为了最大程度地简化组件 在独立于操作系统的 Swing 组件与实际运 行这些组件的操作系统之间 JFrame 起着桥梁的作用 JFrame 在本机操作系统中是以 窗口的形式注册的 这么做之后 就可以得到许多熟悉的操作系统窗口的特性 最小 化 最大化 改变大小 移动 可以在 JFrame 上调用的一些修改属性的方法是 get setTitle 获取 设置帧的标题 get setState 获取 设置帧的最小化 最大化等状态 is setVisible 获取 设置帧的可视状态 换句话说 是否在屏幕上显示 get setLocation 获取 设置帧在屏幕上应当出现的位置 get setSize 获取 设置帧的大小 add 将组件添加到帧中 程序中用到的内部类 ImagePane 继承自 JPanel 内部类是定义在其他类内部的类 它几乎可以处于类内部任何位置 可以与实 例变量处于同一级 或处于方法之内 甚至是一个表达式的一部分 内部类是 JAVA 语言的主要附加部分 内部类有以下 4 种形式 静态内部类 成员内部类 局部内部类 匿名内部类 内部类之所以被大量应用 因为其存在以下优点 内部类对象可以访问创建它的对象的实现 包括私有数据 内部类不为同一包的其他类所见 具有很好的封装性 使用内部类可以很方便的编写事件驱动程序 匿名内部类可以方便的定义运行时回调 3 构造方法 本程序的构造方法 HTTPBrowser 作用初始化对象 添加组件 我对构造方法的认识 构造方法是一种特殊的方法 与一般的方法不同是 河南理工大学毕业设计 论文 说明书 9 1 构造方法的名字必须与定义他的类名完全相同 没有返回类型 甚至连 void 也 没有 2 构造方法的调用是在创建一个对象时使用 new 操作进行的 构造方法的作用是 初始化对象 3 不能被 static final synchronized abstract 和 native 修饰 构造方法不能被子类 继承 构造方法可以被重载 没有参数的构造方法称为默认构造方法 与一般的方法一 样 构造方法可以进行任何活动 但是经常将他设计为进行各种初始化活动 比如初 始化对象的属性 在 Java 中 任何变量在被使用前都必须先设置初值 Java 提供了为类的成员变量赋初 值的专门功能 构造方法 constructor 构造方法是一种特殊的成员方法 它的特殊性反映在 如下几个方面 1 构造方法名与类名相同 2 构造方法不返回任何值 也没有返回类型 3 每个类可以有零个或多个构造方法 4 构造方法在创建对象时自动执行 一般不能显式地直接调用 4 程序中用到的软件包 java io IO Input Output 是计算机输出 输出的接口 Java 的核心库 java io 提供了全面的 IO 接口 包括文件读写 标准设备输出等 Java 中 IO 是以流为基础进行输入输出的 所有数据被串行化写入输出流 或者从输入流读入 此外 Java 也对块传输提供支持 在核心库 java nio 中采用的便是块 IO 注意 流 IO 的好处是简单易用 缺点是效率较低 块 IO 效率很高 但编程比较复杂 Java 的 IO 模型设计非常优秀 它使用 Decorator 模式 用户可以动态装配不同功 能的 Stream 以便获得需要的功能 例如 需要一个具有缓冲的文件输入流 则应当 组合使用 FileInputStream 和 BufferedInputStream Java 的 IO 体系分 Input Output 和 Reader Writer 两类 区别在于 Reader Writer 在读 写文本时能自动转换内码 基本上 所有的 IO 类都是配对的 即有 XxxInput 就有一 个对应的 XxxOutput Java 的输入 输出操作是基于数据流 Stream 的 有序的字节或者字符通过一个 河南理工大学毕业设计 论文 说明书 10 通信信道从源地址传送到目的地址
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林艺术学院《艺术展览策划》2021-2022学年第一学期期末试卷
- 吉林艺术学院《人体造型训练》2021-2022学年第一学期期末试卷
- 吉林艺术学院《合唱Ⅴ》2021-2022学年第一学期期末试卷
- 吉林艺术学院《版面与图式》2021-2022学年第一学期期末试卷
- 吉林师范大学《羽毛球教学与训练》2021-2022学年第一学期期末试卷
- 2024年大小水库转让协议书模板范本
- 2022年公务员多省联考《申论》真题(四川省市卷)及答案解析
- 2022年云南省公务员录用考试《申论》真题(县乡卷)及答案解析
- 2022年河南省公务员录用考试《行测》真题及答案解析
- 《供应链管理》课件 第3章 供应链网络构建
- 生产运营效率优化年度总结与规划
- 水文监测技术演示
- 大学传染病的预防课件
- 2021年江苏省普通高中学业水平合格性考试化学试卷(含答案)新
- 老旧小区改造室内给排水工程施工方案和技术措施
- 智能化农业装备
- 中考物理复习-等效电路“节点分析”解析
- 实现人生价值(教学课件)-【中职专用】德育课程《哲学与人生》
- 天津市河东区2023-2024九年级上学期期中数学试题
- 人力资源外包服务劳务外包劳务派遣投标方案
- 膨化食品生产的国家法规与标准要求解读
评论
0/150
提交评论