登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書

『簡體書』Java程序设计教程——微课·实训·课程设计

書城自編碼: 2990261
分類:簡體書→大陸圖書→教材研究生/本科/专科教材
作者: 张延军、王保民、何月梅、司玲玲、乔德军
國際書號(ISBN): 9787302459743
出版社: 清华大学出版社
出版日期: 2017-05-01
版次: 1 印次: 1
頁數/字數: 394/63000
書度/開本: 32开 釘裝: 平装

售價:HK$ 85.6

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
商学精要(第12版)(工商管理经典译丛)
《 商学精要(第12版)(工商管理经典译丛) 》

售價:HK$ 118.8
产业政策的选择及其经济后果
《 产业政策的选择及其经济后果 》

售價:HK$ 154.8
战争的幽灵
《 战争的幽灵 》

售價:HK$ 105.6
西洋镜:中华考古图志
《 西洋镜:中华考古图志 》

售價:HK$ 225.6
学会当领导:优秀员工的晋升之路
《 学会当领导:优秀员工的晋升之路 》

售價:HK$ 78.0
目的行为论导论——刑法体系的新图景(增补第4版·中文增订版)(当代世界学术名著)
《 目的行为论导论——刑法体系的新图景(增补第4版·中文增订版)(当代世界学术名著) 》

售價:HK$ 81.6
浮沉:里亚布申斯基家族兴衰史
《 浮沉:里亚布申斯基家族兴衰史 》

售價:HK$ 117.6
Android自动化测试实战:Python+Appium +unittest
《 Android自动化测试实战:Python+Appium +unittest 》

售價:HK$ 107.8

 

編輯推薦:
1.配有近20小时、60段微课视频,扫描书中二维码即可访问,并提供二维码页码索引。2.精心设计150个程序实例、75道编程实践题与若干实际操作题,重点题目提供解题过程视频。所有题目提供解题源代码。3.精心设计8个课程设计项目并提供详细解析。4.提供SCJP(原Sun公司Java认证考试)全英文自测题,帮助读者提高英文水平。
內容簡介:
本书主要面向高校Java程序设计教学和实训要求,以培养Java软件工程师为教学目标,教学内容包括Java语言基本语法、面向对象程序设计、Java常用类的使用、Java IO技术、GUI编程技术、多线程技术、网络编程技术、JDBC编程技术等。
本书的编写坚持够用、实用、简单、直接的教学理念,对教学内容进行精心设计和选择,通过142个示例程序、100个程序编写任务、60个微视频、8个难度和工作量适宜的课程设计为学生构建全方位立体化、全过程支持、科学合理的Java学习路线图,构建了包含微视频、编程、实验、课程设计在内的Java实训教学体系。
目錄
目录

上篇Java编程基础

第1章走进Java世界

1.1Java语言简介

1.1.1Java发展简史

1.1.2Sun与Microsoft

1.1.3Java的影响力

1.1.4Java语言的特点

1.2Java开发环境的构建

1.2.1高级语言的运行机制

1.2.2JVM、JRE和JDK

1.2.3JDK的下载和安装

1.2.4JDK环境变量的配置

1.2.5JDK安装文件夹介绍

1.3Java程序的编辑、编译和运行

1.3.1第一个Java程序(HelloWorld.java)

1.3.2显示命令行参数CommArg.java

1.3.3Java程序的各种形态

1.4Java IDE介绍

1.5本章小结

1.6自测题

1.7编程实训

第2章Java语言基础

2.1Java程序的构成

2.1.1标识符

2.1.2关键字和保留字

2.1.3Java注释

2.2Java数据类型、常量和变量

2.2.1Java数据类型

2.2.2常量

2.2.3变量

2.2.4基本数据类型的转换

2.2.5基本数据类型的对象包装类

2.3Java运算符、表达式、语句和程序

2.3.1运算符

2.3.2表达式

2.3.3语句和程序

2.3.4Java程序的书写风格

2.4Java流程控制语句

2.4.1顺序结构

2.4.2分支结构

2.4.3循环结构

2.4.4break和continue语句

2.5Java语言编程的基本技巧

2.5.1Java数据的输出

2.5.2Java数据的输入

2.5.3用JOptionPane类实现各种对话框

2.5.4Java程序运行时间的计算

2.6Java数组

2.6.1一维数组

2.6.2二维数组

2.6.3数组工具类(Arrays)

2.7Java编程作业的提交要求

2.8本章小结

2.9自测题

2.10编程实训

第3章面向对象编程基础

3.1面向对象技术简介

3.1.1面向过程和面向对象

3.1.2面向对象的特征

3.2类

3.2.1类的定义

3.2.2成员变量

3.2.3局部变量

3.2.4成员方法的定义

3.2.5成员方法的调用

3.2.6成员方法的递归调用

3.3对象的实例化与清除

3.3.1构造方法的定义

3.3.2构造方法的调用实例化对象

3.3.3垃圾回收机制

3.3.4Java程序的优化

3.4引入类和定义包

3.4.1包概念的提出

3.4.2JDK API常见包介绍

3.4.3package和import语句

3.5Java文档注释

3.5.1常用的Javadoc标记

3.5.2利用javadoc.exe生成API文档的方法

3.5.3在Eclipse中生成API文档的方法

3.6UML

3.6.1UML简介

3.6.2UML 建模工具

3.6.3在MyEclipse下进行UML建模

3.7俄罗斯方块程序的阅读(Tetris.java)

3.8本章小结

3.9自测题

3.10编程实训

中篇Java高级编程

第4章面向对象高级编程

4.1JVM内存管理

4.2类的重用

4.2.1类的继承和组合

4.2.2关键字this和super

4.2.3方法的覆盖

4.3static关键字简介

4.3.1static关键字

4.3.2初始化语句块的自动执行

4.3.3变量的初始化问题

4.3.4Java方法的调用总结

4.4final和abstract关键字

4.5接口

4.5.1接口的定义

4.5.2用类实现接口

4.5.3接口与抽象类的区别

4.6内部类

4.6.1为什么要引入内部类

4.6.2内部类的分类和应用

4.7对象的上溯造型和下溯造型

4.8访问权限修饰符

4.9异常处理机制

4.9.1方法调用堆栈

4.9.2Exception的概念、子类及其继承关系

4.9.3Java异常处理机制

4.9.4自定义异常

4.10本章小结

4.11自测题

4.12编程实训

第5章JDK常见类的使用

5.1java.lang包中的常见类

5.1.1Object类

5.1.2Class类

5.1.3System类和Runtime类

5.1.4Math类和Random类

5.1.5Number类

5.2java.util包中的常见类

5.2.1Scanner类

5.2.2Date、Calender和SimpleDateFormat类

5.2.3String、StringBuffer和StringBuilder类

5.3集合概述

5.3.1Java中的集合框架层次结构

5.3.2Collection接口和Iterator接口

5.3.3List接口及其子类

5.3.4Set接口及其子类

5.3.5Map接口及其子类

5.3.6Collections类

5.3.7如何选择集合类

5.4自定义对象的排序规则

5.4.1实现java.lang.Comparable接口

5.4.2实现java.util.Comparator接口

5.5枚举

5.6泛型

5.6.1问题的提出

5.6.2泛型的引入

5.6.3泛型的应用

5.7正则表达式

5.7.1正则表达式简介

5.7.2创建正则表达式

5.7.3正则表达式的使用

5.8本章小结

5.9自测题

5.10编程实训

第6章Java IO技术

6.1IO技术概述

6.1.1InputStream类和OutputStream类

6.1.2Reader类和Writer类

6.1.3File类

6.2IO流的使用

6.2.1文件字节流(FileInputStream和FileOutputStream)

6.2.2文件字符流(FileReader和FileWriter)

6.2.3随机读写文件流(RandomAccessFile)

6.2.4基本数据流(DataInputStream和DataOutputStream)

6.2.5对象流(ObjectInputStream和ObjectOutputStream)

6.2.6管道流(PipedInputStream和PipedOutputStream)

6.2.7合并输入流(SequenceInputStream)

6.2.8PrintStream、PrintWriter和Scanner

6.3NIO简介

6.4利用Java进行常用文档的读写

6.4.1利用JXL读写Excel

6.4.2利用POI读写Word

6.5本章小结

6.6自测题

6.7编程实训

第7章Java GUI编程技术

7.1GUI编程的Java实现

7.1.1AWT

7.1.2swing

7.1.3SWTJFace

7.1.4GUI设计工具

7.2java.awt编程技术

7.2.1java.awt简介

7.2.2组件类(Component)

7.2.3颜色类和字体类(Color和Font)

7.2.4容器类(Container)

7.2.5图形类(Graphics)

7.2.6布局管理器(LayoutManager)

7.2.7Java事件处理机制

7.3swing编程技术

7.3.1swing简介

7.3.2swing编程流程

7.4swing常用组件

7.4.1顶级容器: JFrame和JDialog

7.4.2中间容器: JPanel和JScrollPane

7.4.3图像显示: Image、Icon和ImageIcon

7.4.4显示文本或图像组件: JLabel

7.4.5文本组件: JTextField、JPasswordField和JTextArea

7.4.6按钮组件: JButton、JRadioButton和JCheckBox

7.4.7下拉式列表: JComboBox

7.4.8综合示例: 用户注册窗口

7.4.9列表组件: JList

7.4.10微调选项输入框: JSpinner

7.4.11表格组件: JTable和DefaultTableModel

7.4.12菜单组件: JMenuBar、JMenu和JMenuItem

7.4.13工具栏: JToolBar

7.4.14文件选择器组件: JFileChooser

7.4.15树形组件: JTree

7.5线程安全的swing编程

7.5.1swing的线程安全

7.5.2利用SwingWorker类实现线程安全的swing编程

7.5.3利用Timer类实现线程安全的swing编程

7.6利用WindowBuilder Pro进行swing应用开发

7.6.1WindowBuilder Pro的下载和安装

7.6.2WindowBuilder Pro的基本使用

7.6.3WindowBuilder事件处理

7.6.4WindowBuilder生成代码的改造

7.7本章小结

7.8自测题

7.9编程实训

第8章Java多线程技术

8.1程序、进程和线程

8.2Java多线程技术

8.2.1Thread类和Runnable接口

8.2.2两种传统的创建线程的方法

8.3线程的状态控制

8.3.1线程的状态

8.3.2线程的生命周期

8.3.3守护线程

8.3.4线程的加塞运行

8.3.5线程的礼让

8.3.6线程的优先级

8.3.7线程的定时执行

8.3.8线程的中止

8.4线程的同步和互斥

8.4.1用synchronized实现线程的互斥

8.4.2用ThreadLocal实现线程局部变量

8.4.3用Object类的wait和notify实现线程的同步

8.4.4生产者和消费者问题

8.5Concurrency开发库简介

8.5.1同步器

8.5.2线程池

8.5.3执行器

8.5.4创建可以返回数据的线程

8.5.5锁机制

8.5.6ForkJoin框架

8.6本章小结

8.7自测题

8.8编程实训

第9章Java网络编程技术

9.1计算机网络基础知识

9.1.1几个重要的概念

9.1.2URL和URI

9.1.3TCP和UDP

9.2Java网络编程的地址类

9.2.1URL类

9.2.2InetAddress类

9.3TCP Socket编程

9.3.1传统单线程Socket编程

9.3.2多线程Socket编程

9.3.3从客户端上传文件到服务器端

9.4UDP Socket编程

9.5本章小结

9.6自测题

9.7编程实训

第10章JDBC编程技术

10.1数据库基本知识

10.1.1常见的关系数据库产品

10.1.2数据库编程接口

10.2MySQL数据库和数据库管理工具

10.2.1MySQL数据类型

10.2.2MySQL数据库的下载和安装

10.2.3数据库管理工具Navicat的使用

10.3JDBC编程技术

10.3.1JDBC API介绍

10.3.2JDBC访问数据库的步骤

10.3.3用Statement实现静态SQL语句编程

10.3.4用PreparedStatement实现带参数SQL语句编程

10.3.5用CallableStatement实现存储过程编程

10.3.6数据库元数据的读取

10.3.7数据库数据的批量插入

10.3.8在MySQL数据库中存取文件

10.3.9数据库事务处理

10.3.10MySQL数据库的JDBC工具类

10.4数据持久化技术

10.5本章小结

10.6自测题

10.7编程实训

下篇课
程 设 计

第11章Java课程设计

11.121点游戏

11.1.1项目任务

11.1.2项目设计

11.1.3项目做中学

11.1.4总结提高

11.2个人通讯录

11.2.1项目任务

11.2.2项目设计

11.2.3项目做中学

11.2.4总结提高

11.3我的记事本

11.3.1项目任务

11.3.2项目设计

11.3.3项目做中学

11.3.4总结提高

11.4ATM柜员机模拟项目

11.4.1项目任务

11.4.2项目设计

11.4.3项目做中学

11.4.4总结提高

11.5银行排队叫号模拟系统

11.5.1项目任务

11.5.2项目设计

11.5.3项目做中学

11.5.4总结提高

11.6坦克大战游戏

11.6.1项目任务

11.6.2项目设计

11.6.3项目做中学

11.6.4总结提高

11.7聊天室

11.7.1项目任务

11.7.2项目设计

11.7.3项目做中学

11.7.4总结提高

11.8通用管理信息系统框架

11.8.1项目任务

11.8.2项目设计

11.8.3项目做中学

11.8.4总结提高

第12章在Eclipse中进行Java应用开发

12.1Eclipse的下载和安装

12.2Eclipse的基本概念

12.3Eclipse开发环境的设置

12.4Eclipse常用操作

12.5Eclipse常用编辑技巧

12.6Eclipse中程序的调试技巧

12.7Eclipse常见提示错误

附录A怎样才算掌握了Java

A.1Java知识结构模型

A.2SCJP与SCJD

A.3Java设计模式

附录BJDK文档

B.1JDK文档简介

B.2JDK文档的组织

B.3信息检索方法

B.4JDK文档的主要内容

附录CJDK 1.5~1.7的新特性

C.1JDK 1.5的新特性

C.2JDK 1.6的新特性

C.3JDK 1.7的新特性

参考文献
內容試閱
前言
经过二十几年的发展,Java语言已经成为计算机史上影响深远的编程语言。不但如此,Java已经超出了编程语言的范畴,发展成为一个开发平台、一个产业、一种思想、一种文化。
Java程序设计是计算机科学与技术专业的一门专业基础必修课程。在教育部计算机基础课程教学指导委员会制定的白皮书中,Java程序设计课程被列为核心课程。Java软件开发方向是我国目前IT行业计算机类专业学生的重要的就业方向。
1. 高校IT人才培养的背景
1 经济社会的高速发展对IT产业(尤其是软件产业)提出了更高的要求,对Java软件开发人才从数量和质量方面也都提出了更高的要求。
2 智能手机操作系统Android的市场占有率一路攀升。Android系统采用Java语言来开发手机应用程序,这给Java带来新的发展机遇。
3 教育技术的进步和移动互联网时代的到来打破了高校进行知识传播的技术壁垒,大量的资本和风险投资涌进IT培训产业。达内、东软、传智播客等实体IT培训机构,开课吧、慕课网、极客网等在线IT培养机构引入了先进的教学理念、强大的技术支持,再加上商业化运作,给高校IT人才培养带来巨大的挑战和竞争的压力。
4 教学理念、教学模式的发展: CDIO、MOOC、翻转课堂、混合式教学、案例式教学、目标驱动、问题导向等教学理念、教学模式迅速渗透到每一个传统课堂。传统的单向封闭的教学环境开始走向开放,传统的以教师为中心的师生关系开始变为以学生为中心,传统课堂中的教师从知识传授者和课堂管理者转变为学习指导者、教学资源开发者、教学帮助者和促进者,传统课堂中的学生则由被动接受者转变为主动研究者。
5 教学环境的变化: 教室、实验室硬件配置齐全,实现了高速、稳定的Internet接入; 笔记本和手机等互联网接入设备日渐普及,这些都为先进教学理念和教学模式的实施提供了硬件和软件上的准备。
6 教育参与者: 教师正在树立教育就是服务的教育观念,正在贯彻工程教育的教育理念,从注重教师教什么转移到学生学到了什么。学生作为数字原住民,对新鲜事物、新技术、新教学方式(人性化学习、泛在学习等)有着天然的渴望。
IT产业、软件技术、软件人才培养竞争、教学理念、教学模式、教学环境、教学对象等因素的发展和变化使得高校必须进行教学改革,教师必须围绕以上因素进行课程教学改革,教材建设也是势在必行。
2. Java教材存在的问题教材作为人才培养的重要载体,是主要的教学资源之一,是教与学的重要凭借,是教学理念、教学特色、教学方法、教学内容、教学资源等的全面体现。以纸质教材为中心,构建支持学生学习全过程、线上线下相结合的全新生态系统,是国内外教材发展的最新趋势。鉴于Java技术的市场地位,Java教材从国外原版教材到翻译教材再到本土化教材,呈现出百家齐放、百家争鸣的良好局面。目前,Java教材也存在以下问题: 教学理念、教学模式不能紧跟时代潮流,教学内容的选择和呈现过于单一,对学生的学习过程支持不够,特色不够鲜明,等等。
3. 本书的内容根据市场定位和面向受众不同,Sun公司把Java技术分成Java ME、Java SE和Java EE几个平台。显然,Java最成功的领域是Java EE。学习Java应该从Java SE入手,为后续学习打下坚实的基础,然后才能学习Java EE和Java ME。
本书主要面向Java SE,基于JDK 1.7和Eclipse IDE环境,对教学内容进行重新选择和设计,删除了使用频率少或已经淘汰的技术,如Applet等; 加入JDK 1.5、JDK 1.6、JDK 1.7等版本的语言新特性; 加强Eclipse IDE环境的使用; 加强swing GUI编程技术教学,引入了swing开发插件WindowBuilder; 加强多线程技术教学,介绍了Concurrency开发库技术; 加强Java网络编程技术、JDBC编程技术。本书分为上篇、中篇和下篇3个部分,分别介绍如下。
1 上篇Java编程基础: 本篇通过Java发展介绍、Java开发环境的构建、Java语言基础、流程控制、数组、类和对象、包装类、Java文档注释、UML、接口、内部类、异常处理等内容使读者能够快速掌握Java语言语法、Java编程基本技巧和面向对象编程思想,为以后编程奠定坚实的基础。
2 中篇Java高级编程: 本篇首先介绍java.lang包中的常见类、java.util包中的常见类、java.text包中的常见类、集合类框架、枚举、泛型、正则表达式,然后分别介绍Java IO技术、Java GUI编程技术、Java多线程技术、Java网络编程技术、JDBC编程技术等。通过本篇的学习,读者能够具备进行Java应用开发的技术基础。
3 下篇课程设计: 本篇采用CDIO做中学的教学理念,通过下达项目任务、项目设计、项目学中做、总结提高等步骤介绍了8个工作量适中、综合性强、能解决实际问题的Java课程设计。课程设计将本书的内容进一步融会贯通,使读者在解决实际问题的过程中加深对技术的理解和应用。
在教学时教师可以根据学时、教学对象、教学目的等因素对教学内容进行选择、组合和取舍。
4. 本书的特色
编者投入了大量精力,力求使本书体现以下特色。
1 强调简单、直接、实用、够用的教学理念,贯彻以服务为宗旨,以应用为目的,以实用为主,理论够用为度的教学原则,以培养学生应用能力为主线,通过一个知识点知识准备、示例程序、总结提高的步骤来讲解程序的编写、调试和运行。
2 案例式教学: 强调用Java语言讲解Java语言的教学理念,根据教学内容精选142个示例程序,强调示例程序的针对性、实用性、关联性,让学生通过阅读和调试示例程序迅速理解理论知识,并达到实践效果。本书所有示例程序均经过反复调试,确保风格统一、注解翔实、代码规范、正确高效。
3 编程任务: 本书在每章结束时均提供了和教学内容对应的编程实践任务,分不同的难度等级,并给出编程提示。本书共提供了100个编程实践任务。
4 低成本微课的录制: 编者认为动辄几个吉字节、几十个小时的教学全程录像是高成本、低效率的,而且没有必要,通过仔细阅读即可理解的内容没有必要录制成视频。但Java教学过程中的重难点、编程实践等内容非常有必要使用Camtasia Studio软件进行屏幕录像、编辑后通过网络提供给学生。这种方法对于教师来说是低成本、低门槛、高效率的,教师简单学习后即可上手,无须求助他人。每段微视频(微课)限制在15分钟左右,集中讲解一个知识点或一个程序的编写,详细展现编程实现的思维过程。本书免费提供60段微视频(微课),总时长上千分钟,可扫描二维码观看,详细列表见前言的最后。
5 强调JDK文档的阅读: Java类库(又称为Java应用程序编程接口API)由编译器厂商、独立软件供应商等以Jar文件和文档的形式提供。通过API文档来了解类库中类和方法的使用是一个程序员必须掌握的技巧。
6 强调英文的阅读: 英文软件的汉化不尽如人意,因此读者在学习Java的过程中对英文的阅读是一个不可回避的问题,如JDK英文文档的阅读、Eclipse纯英文IDE环境、英文标识符的命名、SCJP全英文试题的阅读等(关于SCJP考试的说明请参阅附录A),本书在各章的自测题中引入了全英文的SCJP选择题,在附录中增加了在Eclipse英文版中进行Java应用开发的内容,并给出Eclipse常见提示错误的中文翻译。
7 基于CDIO的课程设计: 在学完Java技术之后,读者只是具备了Java编程基础,如果没有课程设计环节,知识和能力也就做不到真正的融会贯通,因此,本书以工程教育理念为指导,遵循CDIO教学模式,采用项目导向的方式,充分体现做中学的理念,提供了8个任务要求明确、工作量适中、综合性强的Java应用项目。
8 本书以学生学习Java技术的角度进行知识的呈现,而不像传统教材那样仅仅站在教师教学的角度,并强调支持和服务要贯穿学生的整个学习过程。同时,本书为教师实施翻转课堂教学提供了支持,为评价学生学习能力提供了数量足够的素材和题库。
5. 本书的使用
1 第1章的例程要求安装JDK 1.7后在DOS命令行下完成Java程序的编写、调试和运行。
2 从第2章开始,要求安装Eclipse或MyEclipse,构建Java软件开发环境; 要求在EclipseMyEclipse IDE中完成Java程序的编写、调试和运行。请读者详细阅读附录B,掌握EclipseMyEclipse的基本使用技巧。
3 Java编程实训作业以Java Project的形式提交,具体要求请参考2.7节。
4 为减少篇幅,本书中的Java示例程序有以下特点: 省略了import语句;  省略了部分注释; 异常处理由trycatch捕获异常改为在方法首部用throws声明异常;  省略了Getter和Setter方法。
5 语法格式有以下约定。
 [ ]: 代表本项为可选; : 代表本项为必选; |: 代表左、右两项可选其中一个; : 代表前面一项可以重复多次; 列表: 代表本项可以有多个,用逗号分隔。
6 本书的配套课件、微视频、习题答案、示例及编程任务参考源代码等各类资源可以从清华大学出版社网站www.tup.com.cn下载,关于本书与资源下载、使用中的问题请联系本书责任编辑fuhy@tup.tsinghua.edu.cn。
6. 作者与致谢本书由张延军主编,参与教材编写、资料整理、书稿校对、课件制作等工作的有王保民、何月梅、司玲玲、乔德军、闫双双、刘艳辉、张艳霞等老师。王保民负责审稿。以上人员为本书的顺利出版提供了宝贵的意见,付出了大量的劳动,在此表示感谢。另外感谢付弘宇编辑专业和严谨的工作。
在培养Java人才的过程中要强调工匠精神,我们可以从以下3个层面来理解工匠精神。 思想层面: 爱岗敬业、无私奉献; 行为层面: 开拓创新、持续专注; 目标层面: 精益求精、追求极致。忽然想起同仁堂的一副对联: 炮制虽繁必不敢省人工,品味虽贵必不敢减物力。愿以此与诸君共勉!
编者2017年1月


第3章面向对象编程基础
在本章我们将一起学习以下内容: 面向对象技术简介。 类的定义、变量和方法的定义。 对象的实例化与清除。 引入类和定义包。 Java文档注释。 用UML绘制类图。相对于硬件技术发展的日新月异,软件技术的发展相当迟缓。软件技术面临着非常多的挑战,在要求软件功能更加新颖、更加强大的同时,人们又要求软件开发人员可以快速、高效地构建质量优、重用性高、维护性强的软件系统。软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,每一步都体现了不断抽象、更加贴近业务实际的发展趋势。软件开发人员发现采用模块化、面向对象的设计和实现方法可以显著提高软件开发的工作效率,而且面向对象程序更易于理解、重用性高,便于纠错和修正。3.1面向对象技术简介3.1.1面向过程和面向对象目前软件开发领域主要有结构化开发方法和面向对象开发方法两种。结构化开发方法(又称为面向过程)的程序设计简单,可读性强,易于阅读和理解,便于维护,是面向对象程序设计的基础。面向过程把问题求解过程(即算法)放在第一位,主张按功能把软件系统逐步细分,遵循自顶向下,逐步求精的思想。面向过程提供顺序、分支和循环3种逻辑结构,每种逻辑结构要求单入口和单出口。面向对象开发方法是一种以事物为中心的编程思想,用一种更符合人们认识客观世界的思维方式进行程序设计。它克服了面向过程的缺点,达到了软件工程的3个主要目标,即重用性、灵活性和扩展性。面向对象的软件开发方法的生命周期主要包含了以下阶段。1 面向对象的分析OOA(ObjectOriented Analysis): 对用户需求进行分析,确定系统的范围和功能,明确要做什么。2 面向对象的设计OOD(ObjectOriented Design): 对OOA分析的结果做进一步的规范化整理,以便能够被OOP直接接受。目前业界统一采用UML来描述和记录OOA与OOD的结果。3 面向对象的程序设计OOP(ObjectOriented Program): 在面向对象程序设计方法中,程序被看作是相互协作的对象的集合。每个对象都是某个类的实例。所有类构成一个通过继承关系联系的树形层次结构。因此,面向对象程序设计的基本构成是类和对象。类是一组相似对象的描述,描述了该类对象所具有的共同特征。对象封装了描述其状态的数据(属性)以及可以对这些数据进行的操作(方法),对象之间通过发送消息相互协作。面向对象的主要概念包括类和对象、接口、包、属性、方法(一般方法、构造方法、抽象方法)、修饰符、引用类型的转换(上溯下溯造型)等。3.1.2面向对象的特征面向对象具有四大特征,即抽象、封装、继承和多态。1. 抽象抽象其实也是所有计算机语言的特征,指从众多的事物中舍弃个别的、非本质的部分,提炼出计算机系统所关注的、共同的、本质的部分(属性和功能)的过程。抽象包括过程抽象和数据抽象。过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤,而隐藏其具体的实现。数据抽象是将系统中需要处理的数据和这些数据上的操作结合在一起,抽象成不同的抽象数据类型(ADT)。2.封装封装(Encapsulation)指属性和方法的定义都封装在类定义中,然后通过对其可见性来控制外部对类成员的可访问性。1 类(对象)的属性和方法是不可分割的整体,反映了客观事物的静态特征和动态行为相统一的客观规律,使计算机软件对客观事物的描述更接近人类表述。过去的面向过程的编程语言将功能和数据分离,使软件对客观事物的描述存在偏差,很难自然地用语言表达客观事物的对应关系。在Java中,类封装了属性、方法、构造方法、语句块、内部类等成员,如图31所示。用UML标准符号绘制Car类图如图32所示。
图31类封装示意图
图32UML类图
UML类图可以转换为Java语言:
01class Car{02private int color_number;03private int door_number;04private int speed;05public void brake{}06public void speedUp{}07public void slowDown{}08}
2 封装还涉及类或对象内部细节的隐蔽性。类设计者可以通过使用访问权限控制修饰符private、protected、public 3个关键字、4个访问控制级别来细粒度地控制外部是否可以访问类或对象的成员。一般将属性设置为private,然后提供Getter和Setter方法存取数据的统一接口。访问其他类对象成员的示意图如图33所示。
图33访问其他类对象成员的示意图
【示例程序31】自定义日期类(MyDate.java)功能描述: MyDate日期类型有年、月、日3个私有属性; 提供了无参构造方法,包含全部属性的构造方法; 在自动生成私有属性的Getter和Setter方法的代码的基础上进行了定制。
01public class MyDate {02private int year;03private int month;04private int day;05public MyDate {06super;07}08public MyDateint year, int month, int day {09super;10setYearyear;11setMonthmonth;12setDayday;13}14public int getYear {15return year;16}17public void setYearint year {18ifyear1&&year=1&&month=1&&day [extends ][implements ]{
[初始化语句块]
[成员变量]
[构造方法]
[成员方法]
}
说明:1. 类修饰符(Modifier)说明1 类只有一个权限控制符public。2 用abstract修饰的类叫抽象类。抽象类只能被继承,不能被实例化。3 用final修饰的类叫最终类。最终类只能被实例化,不能被继承。2. extends 其用来指定要继承的父类。3. implements 其用来指定要实现的接口。一个类实现一个接口,即必须实现该接口中所有的抽象方法,否则这个类只能是抽象类。4. Java类封装的成员 静态语句块: 指类中有static修饰的语句块,用于初始化类。 非静态语句块: 指类中没有static修饰的语句块,用于初始化对象。 成员变量(Member Variable),也称为字段(Field)或属性(Atrribute: 主要描述类或对象的静态特征。 成员方法(Method),也称为函数(Function)、过程(Procedure)、子程序(SubRoutine: 表明类或对象所具有的行为。 构造方法(Constructor): 用于实例化对象,并初始化对象成员变量。 内部类(Inner Class): 在类、方法中定义的类。3.2.2成员变量成员变量指定义在类中方法外的变量或常量。成员变量的有效范围是整个类,相当于全局变量。成员变量的语法格式如下:
[成员变量修饰符] 变量名[=初值];
说明:1. 成员变量修饰符1 权限控制修饰符有public、protected、private几种,用来控制变量的可见性,详见4.8节。2 共享修饰符volatile: 用于并发线程的共享。3 易失性修饰符transient: 对象序列化时用于屏蔽敏感信息。4 类修饰符static: 有static修饰的变量是类变量,否则是对象变量。5 常量修饰符final: 有final修饰的变量是常量,只能在定义时赋值一次。2. 成员变量的类型可以是8种基本数据类型,也可以是引用类型(对象)。3. 类成员变量(也叫类属性、类变量、静态变量、静态属性等)类成员变量指有static修饰的成员变量。类成员变量属于类成员,当类载入内存,即分配内存和初始化时,为该类的所有对象所共享。静态方法和非静态方法都可以直接通过类名.变量名来访问类成员变量。4. 对象成员变量(也叫对象属性、对象变量、非静态变量、动态变量等)对象成员变量属于对象,只有在实例化对象时才能分配内存和初始化,为该对象所有。在用静态方法和非静态方法访问对象成员变量时需要先new实例化一个对象,然后通过对象名.变量名的方式访问。当对象成员变量和局部变量重名时用this区分。【示例程序33】类变量和对象变量的测试(StaticTest.java)功能描述: 本程序主要演示类变量属于类,为该类的全部对象共享; 对象变量属于对象,为一个对象私有的语法现象。
01public class StaticTest{02static int score=100;score属于类,为该类的所有对象共享03int flag=10; flag属于对象,为对象独享04public static void mainString args[]{05StaticTest t1=new StaticTest;06StaticTest t2=new StaticTest;07StaticTest t3=new StaticTest;08StaticTest t4=new StaticTest;09System.out.printlnt1.score;10System.out.printlnt1.flag;11t1.score=1000;12t1.flag=888;13System.out.printlnt4.score;14System.out.printlnt4.flag;15}16}
3.2.3局部变量局部变量指定义在方法中的变量,其生命周期范围是整个方法,详见2.2.3节。3.2.4成员方法的定义语句(Statement)多了或部分语句需要反复调用时,应根据功能将其定义成不同的方法; 由于人类瞬间记忆能力的限制,为了方便阅读,一个方法打印出来原则上不应超过一张A4纸。方法(Method)是能完成一定数据处理功能、可以被反复调用的语句的集合。方法要先定义,后使用。方法不能嵌套定义,但可以嵌套调用。与C语言函数的并列独立存在不同,在Java中方法必须在类中定义。在逻辑上方法要么属于类,要么属于对象。用static修饰的方法属于类,没有用static修饰的方法属于对象。方法应该根据功能定义在不同的类中。不同的类(Class)应该根据功能不同定义到不同的包(Package)中。在实际项目开发中不允许将类放到系统默认的无名包中(Default Package)。方法的语法格式如下:
[方法修饰符] 方法名类型1 形式参数1,[throws 异常列表]{
[return 返回值;]
}
说明:1. 方法修饰符说明1 访问权限控制修饰符public、protected、private: 决定方法的可见性。2 静态修饰符static: 有static修饰的方法是类方法,否则是对象方法。3 最终方法修饰符final: 有final修饰的方法是最终方法,该方法不能被覆盖。4 抽象方法修饰符abstract: 有abstract修饰的方法是抽象方法,抽象方法只有方法的定义,没有方法的实现(方法体)。5 Java使用native扩展Java的功能,用CC编程以取得更快的速度和访问操作系统的底层。6 用synchronized修饰的方法在多线程并发时只能互斥调用该方法。2. 返回值类型返回值类型可以是8种基本数据类型和引用类型,在方法体中必须用return语句返回数据,否则会出现编译错误。如果没有返回参数,请用void代替。3. return语句return语句有两种功能: 返回数据和终止方法的执行。4. 形式参数列表方法调用时的实参必须和形参一一对应,类型相容。5. [throws异常列表]声明方法运行时可能产生的异常,这样异常就由该方法的调用者负责处理。3.2.5成员方法的调用用户可以调用自己编写的方法,也可以调用JDK或第三方提供的类中的方法。在JDK文档中详细地给出了每个方法的定义、形式参数、功能等说明。方法的调用原则是先定义,后调用。在调用方法的时候必须明确调用者,通过类.方法名实参数;或对象名.方法名实参;的方式来调用。当然,当前类和当前对象可以省略。这其实很好理解,如猪八戒吃西瓜在面向对象的世界中应该表述为猪八戒.吃(西瓜)。调用方法的语法格式如下:
调用者.方法名[实际参数表];
说明:1 实参的个数、顺序、类型要和形参一一对应。2 在调用其他包中的方法时需要先用import语句引入,再调用。3 调用类方法的方法为包路径.类名.方法名[实参表];,当用import语句引入其他包中的类时包路径可以省略。当前类可以省略。4 调用对象方法的方法: 先实例化一个对象,然后通过对象名.方法名[实参表];调用,当前对象可以省略。3.2.6成员方法的递归调用数学上的递归思想简单、直接、有效,用计算机编程实现时十分方便,易于理解。其缺点是内存消耗大、效率较低。为防止出现方法的无限循环递归调用,要求使用递归调用的前提是通过递归能够不断缩小问题规模,而且缩小到一定规模时一定要有一个结束点。在数学上自然数n(n1)的阶乘的定义有下面两种。1 传统定义: n!=123n。2 递归定义: n!=nn-1!,1!=1。【示例程序34】计算n的阶乘(Factorial.java)功能描述: 本程序演示了阶乘的两种实现方法,即用循环结构求n!的类方法,用递归调用求n!的对象方法,同时演示了类方法和对象如何调用。
01public class Factorial {02类方法,用循环结构实现阶乘03public static int getFactorial1int n {04int f=1;05forint i=1;i 段落:
 回车:  加粗: 2. 类或接口前的文档注释,详见示例程序38的02~09行 @author: 作者。 @version: 程序版本。 @since: 从指定JDK版本开始。 @see: 参见可能会关心的类或接口。3. 方法或构造方法前的文档注释,详见示例程序38的11~18行 @param: 形式参数说明信息,建议一个形式参数占一行。 @return: 方法的返回参数类型说明信息。 @throws: 与@exception相同,方法可能抛出的异常说明信息。 @deprecated: 指示该方法已经过时,不推荐使用。 @see: 参见其他方法。 @link: 指向其他Html文档的链接。【示例程序38】Java应用程序常见文档注释(BinarySearch.java)功能描述: 本程序实现二分法查找的功能。在源程序中加上了详细的类文档注释和方法文档注释。
01package chap03;02**03 * BinarySearch类提供了数组的二分法查找功能04 * @author 姓名,学号05 * Date:2016-4-13下午07:25:37 06 * Copyright2016, ZYJ. All Rights Reserved. 07 * @version 1.008 * @since JDK 1.6 09 *10public class BinarySearch {11**12* BinSearch方法的功能: 在数组a中下标为start到end的范围内用13* 二分法查找关键字key14* @param start 数组范围中开始的下标15* @param key 要查找的数字16* @return key的下标,-1代表没有找到17* @throws 没有异常抛出18*19public static int binSearchint[]a,int start,int end,int key{20int mid=start end-start2;21if key == a[mid] {22return mid;23}24if start = end {25return -1;26}27if key 表示构造方法。
图313Triangle UML类图
6. 正向工程与反向工程稍微专业一点的UML设计器都提供了这个非常实用的功能,正向工程指根据UML类图生成 Java源代码,反向工程指根据Java源代码生成UML类图。1 选择UML|Generate Java: 启动正向工程(ForwardEngineering)向导,选择要生成Java代码的源代码目录(一般为src)和生成UML类图的Java类即可生成。2 选择UML|Reverse Engineer UML from Java: 启动反向工程(ReverseEngineering)向导。MyEclipse的Java代码到UML反向工程的过程可以用两种不同的方式实现,即批量处理模式和拖放模式。3.7俄罗斯方块程序的阅读(Tetris.java)通过编译、阅读Tetris.java直观地理解面向对象中常见的语法现象。1 package语句的作用。2 import语句的作用。3 Tetris.java共920多行,在一个Java源文件(.java)中定义了1个接口、9个类、9个内部类(含匿名内部类)。4 *.java、*.class的关系: 在Java中,一个Java源文件可包含多个类和接口的定义,但最多只能定义一个公共类或公共接口,且Java源文件名必须和定义的公共类名或接口名相同。在实际项目开发中,建议一个.java文件中只定义一个类或接口。5 Java源文件编译后每一个类(含内部类)或接口都编译成一个独立的class文件。6 直观地查看类、接口、内部类(匿名内部类)的定义。7 子类继承父类的语法现象。8 类实现接口的语法现象。9 类成员变量、对象成员变量、局部变量、常量的定义。10 构造方法的定义和调用。11 类方法和对象方法的定义和调用。12 如何生成Jar文件。3.8本 章 小 结本章主要介绍了面向对象技术的基础部分,主要包括类的定义、变量和方法的定义、对象的实例化与回收、定义包和引入类、Java文档注释、UML绘制类图等内容。通过本章的学习,读者应该熟练掌握类、构造方法、方法、成员变量、包的定义和使用,掌握对象的实例化和回收,掌握package语句和import语句的使用,在Java程序中加入文档注释,并会在Eclipse IDE中生成标准的Java文档,初步了解UML的相关知识。3.9自测题
一、 填空题1. 面向对象的四大特征: 、、、。2. 面向过程提供、、 3种逻辑结构,每种逻辑结构要求单入口和单出口。3. 对象成员变量建议为,然后为其统一提供和 方法读写。4. java.lang.类是所有Java类的根父类。5. 用修饰的类叫抽象类,抽象类只能被继承,不能被实例化。用修饰的类叫最终类,最终类只能被实例化,不能被继承。6. Java类封装了(表明对象的状态)、(表明对象所具有的行为)、Constructor、Inner Class、静态非静态。7. 创建或实例化对象一般通过 构造方法的方式来完成。8. 构造方法是Java类中的一种特殊方法,用于实例化类的一个对象,为对象分配内存空间和成员变量初始化(数值类型byte、short、int、long、float、double初始化为,boolean类型初始化为,char类型初始化为,引用类型全部初始化为)。9. 对于类或接口前的文档注释,@表示作者,@表示程序版本。10. 对于方法或构造方法前的文档注释,@表示形式参数说明信息; @ 表示方法的返回参数类型说明信息; @与@相同,表示方法可能抛出的异常; @表示该方法已经过时,不推荐使用。11. UML类图的第一个框格表示类的,第二个框格表示类的,第3个框格表示类的。二、 SCJP选择题1. In which two cases does the compiler supply a default constructor for class A? Choose two.
A. class A {}B. class A {
public A {}
}C. class A {
public Aint x {}
}D. class A{
void A{}
}Correct Answers:2. What is the result?
01public class A {02int x;03boolean check {04x;05return true;06}07void zzz {08x = 0;09if check | check ‖ check {10x;11}12System.out.println"x=" x;13}14public static void mainString[] args {15new A.zzz;16}17}
A. x = 0B. x = 1C. x = 2D. x = 3E. x = 4F. Compilation failsCorrect Answers:3. Which two allow the class Thing to be instantiated using new Thing? Choose two.A. public class Thing {}B. class Thing {
public Thing{}
}C. public class Thing{
public Thingvoid{}
}D. public class Thing{
public ThingString s{}
}E. public class Thing{
public void Thing{}
public ThingString s{}
}Correct Answers:4. What allows the programmer to destroy an object x?A. x.deleteB. x.finalizeC. Runtime.getRuntime.gcD. explicitly setting the object''s reference to nullE. ensuring there are no references to the objectF. Only the garbage collection system can destroy an objectCorrect Answers:5. Given:class Bar {}
01class Test {02Bar doBar{03Bar b = new Bar;04return b;05}06public static void main String args[] {07Test t = new Test;08Bar newBar = t.doBar;09System.out.println"newBar";10newBar = new Bar;11System.out.println"finishing";12}13}
At what point is the Bar object, created on line 3, eligible for garbage collection?A. after line 8B. after line 10C. after line 4, when doBar completesD. after line 11, when main completesCorrect Answers:三、 简答题1. 简述如何调用类方法和对象方法。2. 简述构造方法和一般方法有何不同。3. Java对象在什么情况下能够成为可以回收的垃圾?3.10编 程 实 训【编程作业31】编写一个模拟股票的Stock类(Stock.java)具体要求:1 Stock类有4个私有属性,即symbol(标志)、name(名称)、previousClosingPrice(前期收盘价)、currentPrice(当前价);2 生成Stock类的无参构造方法和包含所有属性的构造方法;3 编写所有属性的Getters和Setters方法;4 覆盖Object的toString方法,自定义输出信息;5 写一个StockTest测试类: 创建一个Stock对象,其股票标志为SUNW、名称为Sun,前期收盘价为50,随机设置一个新的当前价,显示价格变化比例。编程提示:1 随机函数的使用请参考5.1.4节。2 在Eclispe中用Source|Generate Constructor using Field生成无参构造方法和所有属性的构造方法;3 在Eclispe中用Source|Generate Getters and Setters生成所有属性的Getters and Setters方法。【编程作业32】学生类的编写和测试(Student.java)具体要求:(1) 学生类有5个私有属性,即sno(学号)、sname(姓名)、sex(性别)、hight(身高)、weight(体重)、brithDate(出生日期);(2) 编写学生类的无参构造方法和包含所有属性的构造方法;(3) 编写所有属性的Getters和Setters方法;(4) 要求覆盖Object的toString方法,自定义输出信息;(5) 要求编写一个根据BMI指数返回该学生体重状况的方法;(6) 生成一个学生类的对象,并输出学生信息Student[20151001,张三,true,170,19800101]。编程提示:1 brithDate可用java.util.Date类,注意String和Date之间的转换,SimpleDateFormat的使用请参考5.2.2节。2 BMI指数(BodyMassIndex,身体质量指数)是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。其计算公式为BMI=weighthighthight,weight的单位为kg,hight的单位为cm。要求当BMI

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.