Java开发从入门到精通(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-25 21:48:32

点击下载

作者:扶松柏 陈小玉

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Java开发从入门到精通

Java开发从入门到精通试读:

前言

从你开始学习编程的那一刻起,就注定了以后所要走的路:从编程学习者开始,依次经历实习生、程序员、软件工程师、架构师、CTO等职位的磨砺;当你站在职位顶峰的位置蓦然回首,会发现自己的成功并不是偶然,在程序员的成长之路上会有不断修改代码、寻找并解决Bug、不停地测试程序和修改项目的经历;不可否认的是,只要你在自己的开发生涯中稳扎稳打,并且善于总结和学习,最终将会得到可喜的收获。选择一本合适的书

对于一名想从事程序开发的初学者来说,究竟如何学习才能提高自己的开发技术呢?其一的答案就是买一本合适的程序开发图书进行学习。但是,市面上许多面向初学者的编程图书中,大多数篇幅都是基础知识讲解,多偏向于理论,读者读了以后面对实战项目时还是无从下手。讲清如何实现从理论平滑过渡到项目实战的图书,是初学者迫切需要的,为此,作者特意编写了本书。

本书讲解了入门类、范例类和项目实战类三类图书的内容。并且对实战知识不是点到为止地讲解,而是深入地探讨。用纸质书+光盘资料(视频和源程序)+网络答疑的方式,实现了入门+范例练习+项目实战的完美呈现,帮助读者从入门平滑过渡到项目实战的 角色。本书的特色1.以“入门到精通”的写作方法构建内容,让读者入门容易

为了使读者能够完全看懂本书的内容,本书遵循“入门到精通”基础类图书的写法,循序渐进地讲解这门开发语言的基本知识。2.破解语言难点,“技术解惑”贯穿全书,绕过学习中的陷阱

本书采用的不是编程语言知识点的罗列式讲解,为了帮助读者学懂基本知识点,每章都会有“技术解惑”板块,让读者知其然又知其所以然,也就是看得明白,学得通。3.全书共有460个实例,与“实例大全”类图书拥有同数量级的范例

书中一共有460个实例,其中有153个正文实例,1个综合实例。每一个正文实例都穿插加入了2个与知识点相关的范例,即全书具有306个拓展范例。通过对这些实例及范例的练习,本书实现了对知识点的横向切入和纵向比较,让读者有更多的实践演练机会,并且可以从不同的角度展现一个知识点的用法,真正实现了举一反三的效果。4.视频讲解,降低学习难度

书中每一章均提供声、图并茂的语音教学视频,这些视频能够引导初学者快速入门,增强学习的信心,从而快速理解所学知识。5.贴心提示和注意事项提醒

本书根据需要在各章安排了很多“注意”“说明”和“技巧”等小板块,让读者可以在学习过程中更轻松地理解相关知识点及概念,更快地掌握个别技术的应用技巧。6.源程序+视频+PPT丰富的学习资料,让学习更轻松

因为本书的内容非常多,不可能用一本书的篇幅囊括“基础+范例+项目案例”的诸多内容,所以,需要配套DVD来辅助实现。在本书的光盘中不但有全书的源代码,而且还有精心制作的实例讲解视频。本书配套的PPT资料可以在网站下载(www.toppr.net)。7.QQ群+网站论坛实现教学互动,形成互帮互学的朋友圈

本书作者为了方便给读者答疑,特提供了网站论坛、QQ群等技术支持,并且随时在线与读者互动。让大家在互学互帮中形成一个良好的学习编程的氛围。

本书的学习论坛是www.toppr.net。

本书的QQ群是347459801。本书的内容

本书循序渐进、由浅入深地详细讲解了Java语言开发的技术,并通过具体实例的实现过程演练了各个知识点的具体应用。全书共20章,分别为Java之印象、第一段Java程序、Java语法、条件语句、循环语句、特殊数据——数组、Java的面向对象(上)、Java的面向对象(中)、Java的面向对象(下)、集合、常用的类库、泛型、异常处理、I/O与文件处理、AWT的奇幻世界、Swing详解、数据库编程、网络与通信编程、多线程和综合案例——开发企业快信系统等内容。书中以“技术讲解”“——“范例演练”——“技术解惑”贯穿全书,引领读者全面掌握Java语言开发。各章的内容版式

本书的最大特色是实现了入门知识、实例演示、范例演练、技术解惑、综合实战5大部分内容的融合。其中各章内容由如下模块构成。

① 入门知识:循序渐进地讲解了Java语言开发的基本知识点。

② 实例演示:遵循理论加实践的学习模式,用153个实例演示了各个入门知识点的 用法。

③ 范例演练:为了达到对知识点融会贯通、举一反三的效果,每个正文实例配套了2个演练范例,全书共计306个范例,多角度演示了各个知识点的用法和技巧。

④ 技术解惑:把读者容易混淆的部分单独用一个板块进行讲解和剖析,对读者所学的知识实现了“拔高”处理。

下面以本书第3章为例,演示本书各章内容版式的具体结构。

① 入门知识

3.2.5 布尔型

布尔类型是一种表示逻辑值的简单类型,它的值只能是“真”或“假”这两个值中的一个。它是所有的诸如a

在下面的内容中,将通过一个简单实例来说明在Java程序中使用布尔类型数据的基本流程。

②实例演示 + ③ 范例演练

实例007 复制布尔型变量并输出结果

源码路径 光盘\daima\3\Bugu.java   视频路径  光盘\视频\实例\第3章\007

实例文件Bugu.java的主要代码如下所示。public class Bugu //定义类 { public static void main(String args[]) { boolean b; //定义b b = false; //赋值b System.out.println("b is " + b); b = true; //赋值b System.out.println("b is " + b); if(b) System.out.println("This is executed."); b = false; //赋值b if(b) System.out.println("This is not executed."); System.out.println("10 > 9 is " + (10 > 9)); }}范例013:定义两个布尔类型变量并赋值源码路径:光盘\演练范例\013\视频路径:光盘\演练范例\013\范例014:实现强制类型转换源码路径:光盘\演练范例\014\视频路径:光盘\演练范例\014\

执行后的效果如图3-6所示。图3-6 执行效果

④ 技术解惑

3.7 技术解惑

3.7.1 定义常量时的注意事项

3.7.2 char类型中单引号的意义

3.7.3 正无穷和负无穷的问题

3.7.4 移位运算符的限制赠送资料售后服务本书的读者对象

初学编程的自学者        编程爱好者

大中专院校的教师和学生     相关培训机构的教师和学员

毕业设计的学生         初、中级程序开发人员

软件测试人员          实习中的初级程序员

在职程序员           致谢

十分感谢我的家人给予的巨大支持。本人水平毕竟有限,书中存在纰漏在所难免,诚请读者提出意见或建议,以便修订并使之更臻完善。编辑联系邮箱:zhangtao@ptpress.com.cn。

最后感谢您购买本书,希望本书能成为您编程路上的领航者,祝您阅读快乐!

作者本书实例目录

实例001:定义几个Java常量

范例001:定义并操作常量

范例002:输出错误信息和调试信息

实例002:用变量计算三角形、正方形和长方形的面积

范例003:计算长方形和三角形的面积

范例004:从控制台接受输入字符

实例003:输出设置的变量值

范例005:演示局部变量的影响

范例006:重定向输出流实现程序日志

实例004:输出字符型变量的值

范例007:输出文本字符

范例008:自动类型转换/强制类型转换

实例005:通过整型类型计算正方形和三角形的面积

范例009:演示int类型的提升处理

范例010:自动提升数据类型

实例006:使用浮点型计算圆的面积

范例011:演示不同浮点型的用法

范例012:实现自动类型转换

实例007:复制布尔型变量并输出结果

范例013:定义两个布尔类型变量并赋值

范例014:实现强制类型转换

实例008:使用基本运算符的加减乘除4种运算

范例015:演示基数运算的过程

范例016:实现加密处理

实例009:使用“%”运算符

范例017:演示取模运算的规律

范例018:用三元运算符判断奇偶数

实例010:使用递增递减运算符

范例019:演示递增递减运算符的用法

范例020:更精确地运用浮点数

实例011:使用关系运算符

范例021:演示使用逻辑运算符的用法

范例022:不用乘法运算符实现2x16

实例012:使用条件运算符

范例023:根据条件的不同实现赋值

范例024:实现两个变量的互换

实例013:演示赋值类型不匹配的错误

范例025:扩展赋值运算符的功能

范例026:演示运算符的应用

实例014:使用表达式与运算符

范例027:演示运算符的优先级

范例028:演示关系运算符的应用

实例015:初始化一个字符串

范例029:格式化一个字符串

范例030:扩展赋值运算符的功能

实例016:使用索引方法

范例031:使用追加方法

范例032:货币金额的大写形式

实例017:使用比较字符串方法

范例033:使用求字符串长度方法

范例034:String类格式化当前日期

实例018:使用替换字符串方法

范例035:使用截取字符串方法

范例036:字符串的大小写转换

实例019:将大写字母转换成小写字母

范例037:将小写字母转换成大写字母

范例038:使用trim()方法

实例020:使用追加字符函数

范例039:替换指定的文本字符

范例040:使用颠倒字符方法reverse()

实例021:演示Java的自动转换

范例041:把基本类型转换为字符串

范例042:判断用户名是否正确

实例022:判断成绩是否及格

范例043:检查成绩是否优秀

范例044:判断某一年是否为闰年

实例023:对两种条件给出不同的答案

范例045:根据两种条件给出处理结果

范例046:验证登录信息的合法性

实例024:判断多个条件然后给出不同的值

范例047:判断某年是否是闰年

范例048:为新员工分配部门

实例025:使用switch语句

范例049:使用switch语句

范例050:根据消费金额计算折扣

实例026:在switch语句中去掉break

范例051:去掉break后引发的问题

范例052:判断用户输入月份的季节

实例027:在case语句后没有执行的代码

范例053:判断月份的季节

范例054:判断输入年份是否是闰年

实例028:使用for循环语句输出0-9十个数字

范例055:使用循环遍历数组

范例056:使用for循环输出8个符号

实例029:在屏幕中输出一个用“*”摆放的菱形

范例057:编写一个三角形序列

范例058:使用for循环输入杨辉三角

实例030:循环输出18个数字

范例059:输出累加和不大于30的所有自然数

范例060:使用嵌套循环输出九九乘法表

实例031:使用do-while语句

范例061:使用do-while语句

范例062:计算1+1%2!+1%3!

实例032:在while循环语句中使用break

范例063:在do-while语句中使用break

范例064:循环输出空心的菱形

实例033:使用有标号的break语句

范例065:将break用在嵌套语句中的外层

范例066:演示初学者很容易出现的错误

实例034:使用return语句

范例067:演示return语句的高级用法

范例068:foreach循环优于for循环

实例035:使用continue语句

范例069:使用continue输出小九九

范例070:终止循环体

实例036:创建并输出一维数组中的数据

范例071:将数组Y赋值

范例072:获取一维数组最小值

实例037:初始化一维数组,并将数组值输出打印

范例073:初始化两个不同类型的数组

范例074:将二维数组中的行列互换

实例038:创建二维数组并输出打印里面的数据

范例075:将二维数组的值赋给另外的数组

范例076:利用数组随机抽取幸运观众

实例039:初始化二维数组,然后找到最大数和最小数

范例077:计算二维数组最大值和最小值

范例078:设置JTable表格的列名与列宽

实例040:创建三维数组,然后输出打印数组内元素

范例079:产生一个随机数

范例080:数组的小标和下界

实例041:复制一维数组中的元素

范例081:复制数组元素

范例082:实现计数器界面

实例042:比较两个一维数组

范例083:比较两个数组的元素

范例084:复选框控件数组

实例043:使用foreach遍历数组元素

范例085:演示不对循环变量赋值

范例086:用数组翻转字符串

实例044:在类中创建public的属性和方法

范例087:使用public修饰符

范例088:温度单位转换工具

实例045:使用默认修饰符创建属性和方法

范例089:使用static修饰符

范例090:域的默认初始化值

实例046:演示传递方法的参数

范例091:传递引用类型参数

范例092:编写同名的方法

实例047:在类中创建一个构造方法

范例093:使用构造方法

范例094:构造方法应用

实例048:在类中创建和使用对象

范例095:修改实例048的代码

范例096:使用单例模式

实例049:使用静态变量和静态方法

范例097:在对象中调用静态方法

范例098:祖先的止痒药方

实例050:在类中插入一些特定的包

范例099:插入不同包中的相同类

范例100:统计图书的销售数量

实例051:新建两个类,让其中一个类继承另一个类

范例101:演示类的继承

范例102:不能重写的方法

实例052:用子类去访问父类的构造方法

范例103:自动调用父类中默认的构造方法

范例104:将字符串转换为整数

实例053:用子类去访问父类的属性

范例105:把基本类型转换为字符串

范例106:实现整数进制转换器

实例054:定义一个接口并编写一个抽象方法

范例107:演示子类重写父类的方法

范例108:查看数字的取值范围

实例055:演示方法的重载

范例109:演示Java重载的规则

范例110:ascii编码查看器

实例056:在定义的接口里面编写常量

范例111:演示在接口定义常量出错

范例112:Double类型的比较处理

实例057:编写一个类去实现一个接口

范例113:实现接口继承

范例114:经理和员工的差异

实例058:在类中提供两个同名构造器

范例115:在构造器中使用另一个构造器

范例116:重写父类中的方法

实例059:在类构造器中使用super调用Base构造器里的初始化代码

范例117:演示构造器之间的调用关系

范例118:计算几何图形的面积

实例060:在类中定义一个构造器

范例119:说明初始化块的执行顺序

范例120:提高产品的质量

实例061:把基本类型变量转换成对应包装类对象

范例121:使用自动装箱和自动拆箱

范例122:骑车销售商场模式

实例062:使用final修饰成员变量

范例123:使用final修饰基本类型

范例124:两个相同的宠物

实例063:演示非静态内部类的用法

范例125:使用this限定

范例126:重新计算对象的哈希码

实例064:使用Collection方法操作集合里的元素

范例127:使用Iterator遍历结合元素

范例128:用HashSet删除学生

实例065:使用HashSet判断集合元素相同的标准

范例129:向HashSet添加一个可变对象

范例130:生成一个不重复的随机序列

实例066:演示TreeSet的自然排序用法

范例131:演示TreeSet的定制排序用法

范例132:使用映射的相关类

实例067:使用EnumSet保存枚举类里的值

范例133:复制Collection集合中的元素

范例134:使用集的相关类

实例068:使用List根据索引来操作集合内的元素

范例135:用equals方法判断两个对象是否相等

范例136:通过add方法向List集合中添加元素

实例069:演示LinkedList类的用法

范例137:演示数组的最好性能

范例138:演示PriorityQueue的用法

实例070:使用Collections工具类来操作List集合

范例139:用sort()方法对集合进行排序

范例140:增加所需要的元素

实例071:使用Collections查找处理

范例141:用binarySearch()方法检索内容

范例142:替换一个集合中的指定内容

实例072:通过append连接各种类型的数据

范例143:验证StringBuffer的内容可修改

范例144:实现简单的数字时钟效果

实例073:在任意位置处为StringBuffer添加内容

范例145:演示字符串反转操作

范例146:实现简单的电子时钟效果

实例074:在任意位置处为StringBuffer添加内容

范例147:演示字符串的替换操作

范例148:实现简单的模拟时钟效果

实例075:从StringBuffer中删除指定范围的字符串

范例149:查找指定的内容是否存在

范例150:实现一个简单的万年历

实例076:调用本机可执行程序

范例151:让记事本进程运行5秒后消失

范例152:查看生日的相关信息

实例077:通过ResourceBundle取得资源文件中的内容

范例153:输出不同国家或地区的“你好!”

范例154:判断日期格式的有效性

实例078:使用MessageFormat格式化动态文本

范例155:使用数组传递参数

范例156:使用常见的日期格式

实例079:计算一个程序的执行时间

范例157:列出指定属性

范例158:查看常用的系统属性

实例080:演示DateFormat中的默认操作

范例159:指定显示的风格

范例160:重定向标准输出

实例081:演示格式化日期操作

范例161:将String型数据变为Date型数据

范例162:把一个日期变为指定格式

实例082:演示格式化日期操作

范例163:格式化对象数字

范例164:计算程序运行时间

实例083:使用Integer实例化Comparable接口

范例165:用Comparable操作二叉树

范例166:转换角度和弧度

实例084:验证一个字符串是否是合法的日期格式

范例167:按照字符串的数字拆分字符串

范例168:使用三角函数

实例085:使用String修改之前的操作

范例169:实现字符的替换、验证和拆分

范例170:使用反三角函数

实例086:建立TimerTask的子类,建立测试类进行任务调度

范例171:使用双曲线函数

范例172:指数和对数运算

实例087:如果不检查类型会引发异常

范例173:自定义非泛型栈结构

范例174:用泛型实现栈结构

实例088:创建一个只能存放String对象的StrList集合类

范例175:自定义泛型化数组类

范例176:泛型方法和数据查询

实例089:使用泛型

范例177:泛型化方法和最小值

范例178:泛型化接口和最大值

实例090:定义泛型接口和类

范例179:使用通配符增强泛型

范例180:实现泛型化折半查找

实例091:演示泛型方法的完整用法

范例181:带有两个参数的泛型

范例182:一个有界类型程序

实例092:演示擦除的用法

范例183:使用通配符

范例184:使用泛型方法

实例093:使用try…catch进行捕获并处理

范例185:类没有发现异常

范例186:建立测试类进行任务调度

实例094:处理多个异常

范例187:非法访问异常

范例188:文件未发现异常

实例095:将finally关键字使用在异常中

范例189:数据库操作异常

范例190:在方法中抛出异常

实例096:演示程序如何访问异常信息

范例191:方法上抛出异常

范例192:自定义异常类

实例097:编写一个程序使用throws关键字将异常抛出

范例193:使用throws关键字抛出异常

范例194:捕获单个异常

实例098:使用throw抛出异常

范例195:使用throw关键字处理异常

范例196:捕获多个异常

实例099:在Java程序中使用异常类

范例197:数组下标越界异常

范例198:除零发生异常

实例100:编写自定义异常程序

范例199:深入理解自定义异常

范例200:数组元素类型不匹配异常

实例101:使用File类删除文件

范例201:在删除文件时增加判断

范例202:修改文件的属性

实例102:使用list()方法列出一个目录中的全部内容

范例203:列出目录中全部文件的完整路径

范例204:显示指定类型的文件

实例103:使用RandomAccessFile类写入数据

范例205:使用RandomAccessFile读取数据

范例206:以树结构显示文件的路径

实例104:向文件中写入字符串

范例207:用write(int t)方式写入文件内容

范例208:用FileOutputStream向文件追加内容

实例105:从文件中读取内容

范例209:消除空格

范例210:查找替换文本文件的内容

实例106:使用循环的方式读取文件的内容

范例211:读取指定文件的内容

范例212:批量文件重命名

实例107:将字节输出流变为字符输出流

范例213:将字节输入流变为字符输入流

范例214:快速批量移动文件

实例108:使用PrintStream输出

范例215:进行格式化输出操作

范例216:删除磁盘中的临时文件

实例109:从键盘上读取数据

范例217:没有指定byte数组长度

范例218:动态加载磁盘中的文件

实例110:为System.out输出重定向

范例219:为用户保存错误信息

范例220:重定向输出位置

实例111:输入两个数字,并让两个数字相加

范例221:设计一个专门处理输入数据的类

范例222:删除文件夹中的所有文件

实例112:输入数据

范例223:设计一个分隔符

范例224:创建磁盘索引文件

实例113:实例化ZipFile类对象

范例225:实现压缩处理

范例226:快速全盘查找文件

实例114:取得www.zip中的一个ZipEntry

范例227:读取压缩文件实体

范例228:获取磁盘中所有文件

实例115:修改Person类并实现Externalizable接口

范例229:序列化和反序列化Person对象

范例230:合并多个“.txt”文件

实例116:用Frame创建了一个窗口

范例231:控制窗体加载时的位置

范例232:设置窗体在屏幕中的位置

实例117:使用Panel作为容器盛装了一个文本框和一个按钮

范例233:从上次关闭位置启动窗体

范例234:始终在桌面最顶层显示

实例118:使用ScrollPane容器代替了本节前面的Panel容器

范例235:设置窗体的大小

范例236:根据桌面大小调整窗体大小

实例119:使用FlowLayout布局

范例237:向窗口中分别添加文本框和3个按钮

范例238:禁止改变窗体的大小

实例120:使用BorderLayout布局

范例239:向5个区域中继续添加组件

范例240:设置窗体标题栏的图标

实例121:使用GridLayout布局

范例241:向GridLayout布局区域添加文本框

范例242:拖动没有标题栏的窗体

实例122:使用CardLayout布局

范例243:在窗体中布局各种组件

范例244:设置窗体的背景颜色

实例123:使用BoxLayout布局

范例245:将Box作为容器

范例246:应用流式布局

实例124:演示模式对话框和非模式对话框的用法

范例247:创建打开、保存文件的对话框

范例248:实现一个预览图片复选框

实例125:为文本框编写处理事件

范例249:文本框事件的进一步应用

范例250:实现一个投票计数器软件

实例126:测试了ImageIO所支持读写的全部文件格式

范例251:将图缩小成另一个位图后输出

范例252:实现一个包含图片的弹出菜单

实例127:使用Swing组件创建窗口

范例253:右下角弹出信息窗体

范例254:实现一个淡入淡出窗体

实例128:为Panel容器分别添加几种边框

范例255:实现窗体顶层进度条效果

范例256:设置窗体的鼠标光标效果

实例129:实现“复制”和“粘贴”功能

范例257:在窗体标题显示计时器

范例258:动态地展开窗体

实例130:实现一个颜色选择对话框效果

范例259:实现一个图片查看器

范例260:实现仿QQ隐藏窗体效果

实例131:使用JOptionPane弹出各种对话框

范例261:窗体百叶窗登场特效

范例262:关闭窗体打开网址

实例132:使用JOptionPane弹出各种对话框

范例263:实现nimbus外观

范例264:实现本地系统外观

实例133:实现一个用户可以选择标签布局策略、标签位置的面板

范例265:分割的窗体界面

范例266:圆周运动的窗体

实例134:演示Swing提供的拖放功能

范例267:框架容器的背景图片

范例268:更多选项的框架容器

实例135:演示实现进度条效果的方法

范例269:用SimulatedTarget模拟耗时任务

范例270:拖放的形式改变颜色

实例136:使用SimulatedTarget模拟了一个耗时任务

实例137:使用JSlider创建滑动条

范例271:拦截事件的玻璃窗格

范例272:简单的每日提示信息

实例138:使用JList和JComboBox的构造器创建列表框

范例273:振动效果的提示信息

范例274:网格布局的简单应用

实例139:先绘制好友图像,然后再绘制好友的名字

范例275:可以打开网页的标签

范例276:密码域控件的简单应用

实例140:创建一棵最简单的Swing树

范例277:给文本域设置背景图片

范例278:给文本区设置背景图片

实例141:在树中实现了增加、修改和删除节点功能

范例279:自定义软件安装向导

范例280:查看系统支持的外观

实例141:使用executeUpdate方法创建数据表

范例281:使用insert语句插入记录

范例282:对数据进行降序查询

实例142:使用execute方法执行不同的SQL语句

范例283:对数据进行多条件排序查询

范例284:对统计结果进行排序

实例143:演示InetAddress的简单用法

范例285:普通字符和MIME字符的转换

范例286:获取计算机名和IP地址

实例144:演示InputStream实现多线程下载

范例287:向Web站点发送请求

范例288:获取网址的IP地址

实例145:创建TCP协议的服务器端

范例289:实现TCP协议的客户端

范例290:判断两网址的主机名是否一致

实例146:开发一个聊天室程序

范例291:测试IP判断类型

范例292:查找目标主机

实例147:实现UDP协议的服务器端

范例293:实现UDP协议的客户端

范例294:使用URL访问网页

实例148:用MulticastSocket实现了一个基于广播的多人聊天室

范例295:URL的组成部分

范例296:通过URL获取网页的源码

实例149:在URLConnection中使用代理服务器

范例297:实现一对多通信模式

范例298:自制一个浏览器

实例150:通过改变系统属性来改变默认代理服务器

范例299:扫描TCP端口

范例300:TCP服务器

实例151:使用Thread创建线程

范例301:使用Runnable接口创建线程

范例302:新建无返回值的线程

实例152:演示线程的死亡

范例303:查看线程的运行状态

范例304:查看jvm中的线程名

实例153:演示Java的自动转换

范例305:把基本类型转换为字符串

范例306:查看和修改线程名称

综合实例:整合开发企业快信系统第1章Java之印象

究竟Java是什么呢?为什么让你在众多语言中选择并学习这门语言呢?本章将会为读者讲解这些疑惑。学完本章的内容,相信初学者会对Java有一个深刻的印象。本章内容● 初步认识Java● 面向对象技术解惑● 卓越者的总结● 对初学者的3条建议● 理解Java的垃圾回收机制1.1 初步认识Java知识点讲解:光盘:视频\PPT讲解(知识点)\第1章\初步认识Java.mp4

纵观各大主流招聘媒体,总是会看到多条招聘Java程序员的广告。由此可以看出,Java程序员很受市场欢迎。在本节将带领大家认识Java这门语言,为读者步入本书后面知识的学习打下基础。1.1.1 都在谈论Java

Java是由Sun公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java Applet)向我们展示了Java语言的魅力:跨平台、动态的Web、Internet计算。从那以后,Java便被广大程序员和企业用户广泛接受,成为了受欢迎的编程语言之一。

Java平台由Java虚拟机(Java Virtual Machine)和Java应用编程接口(Application Programming Interface,API)构成。Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在,Java平台已经嵌入到了几乎所有的操作系统。这样Java程序只需编译一次,就可以在各种系统中运行。

Java分为如下3个体系。● JavaSE:Java2 Platform Standard Edition的缩写,即Java平台标

准版。● JavaEE:Java 2 Platform Enterprise Edition的缩写,即Java平台

企业版。● JavaME:Java 2 Platform Micro Edition的缩写,即Java平台微型

版。1.1.2 Java的特点● 简单:Java语言的语法与C语言和C++语言十分接近,这样大多

数程序员可以很容易地学习和使用Java。另外,Java还丢弃了C

++中很少使用的、很难理解的那些特性,例如,操作符重载、

多继承、自动强制类型转换等。并且令广大学习者高兴的是Java

不再使用指针,学习者再也不用为学习指针而发愁。Java还为我

们提供了自动废料收集机制,使得程序员不必再为内存管理而担

忧。● 面向对象:Java语言提供了类、接口和继承等特性。为了简单起

见,Java只支持类之间的单继承和接口之间的多继承,并且也支

持类与接口之间的实现机制。总之,Java语言是一门纯粹面向对

象的程序设计语言。● 分布式:Java语言支持Internet应用开发,在基本的Java应用编

程接口中有一个网络应用编程接口(java.net),通过这个接口提

供了用于网络应用编程的类库,包括URL、URLConnection、

Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也

是开发分布式应用的重要手段。● 健壮:Java的强类型机制、异常处理、废料的自动收集等是Java

程序健壮性的重要保证。Java通过安全检查机制,使Java程序更

具健壮性。● Java语言是安全的:程序员通常在网络环境中使用Java语言,所

以,Java为我们提供了一个安全机制以防止被恶意代码攻击。

Java语言除了具有的许多安全特性以外,还为网络下载应用提供

了一个安全防范机制(ClassLoader类),例如,分配不同的名字

空间以防替代本地的同名类。字节代码检查和安全管理机制(SecurityManager类)为Java应用程序提供了一个“安全哨

兵”。● 可移植:可移植性是指能够在不同的开发平台和服务器平台上使

用,不管是微软的产品还是其他产品。Java的运行环境是用

ANSI C实现的,所以,Java系统本身具有很强的可移植性,可

以在很多平台上运行。● 解释型:Java程序在Java平台上被编译为字节码格式,这样就可

以在实现这个Java平台的任何系统中运行。在运行时,Java平台

中的Java解释器对这些字节码进行解释执行,执行过程中需要的

类在联接阶段被载入到运行环境中。● 高性能:与那些解释型的高级脚本语言相比,Java的确是高性能

的。随着JIT(Just-In-Time)编译器技术的发展,Java的运行速

度已经越来越接近于C++。● 多线程:当程序需要同时处理多项任务时就需要多线程开发,一

个程序在同一时间只能做一件事情的功能过于简单,肯定无法满

足现实的需求。在实际的应用中,多线程开发是必不可少的,多

线程的目的是在同一时间可以做多件事情,并且可以开启多个线

程同时做一件事情,这样可以提高效率。不管是对于C语言、C+

+还是其他的程序设计语言,线程都是一个十分重要的知识点,

多线程是现代开发软件系统的发展方向,Java作为主流的程序设

计语言,它当然是支持多线程的,具有并发性,其执行的效率很

高。● 动态:Java语言的设计目标之一是适应于动态变化的环境。Java

程序中的类需要能够动态地被载入到运行环境中,也可以通过网

络来载入所需要的类。动态语言的好处是有利于软件升级。1.1.3 Java中的一些名词解释

在Java语言中有许多专业术语,这些专业术语通常是指Java语言下的一个技术或者一个功能,下面介绍一些常用的技术名词。1.JDBC

JDBC(Java DataBase Connectivity)提供连接各种关系数据库的统一接口,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,使数据库开发人员能够用纯 Java API编写数据库应用程序。2.EJB

EJB(Enterprise JavaBeans)使得程序员可以方便地创建、部署和管理跨平台的基于组件的企业应用。3.Java RMI

Java RMI(Java Remote Method Invocation)用来开发分布式Java应用程序。一个Java对象的方法能被远程Java虚拟机调用,这样可以在对等的两端激活远程方法,这也可以发生在客户端和服务器之间,只要双方的应用程序都是用Java编写的。4.Java IDL

Java IDL(Java Interface Definition Language)提供了与CORBA(Common Object Request Broker Architecture)的无缝互操作性,这使得Java能集成异构的商务信息资源。5.JNDI

JNDI(Java Naming and Directory Interface)提供了从Java平台到应用程序的统一无缝连接,这个接口屏蔽了企业网络所使用的各种命名和目录服务。6.JMAPI

JMAPI(Java Management API)为异构网络上系统、网络和服务管理的开发提供一整套丰富的对象和方法。7.JMS

JMS(Java Message Service)提供了企业消息服务,例如,可靠的消息队列、发布和订阅通信,以及有关推拉(Push/Pull)技术的各个方面。8.JTS

JTS(Java Transaction Service)提供了存取事务处理资源的开放标准,这些事务处理资源包括事务处理应用程序和事务处理管理及监控等。9.JavaBean

在Java技术中,除了上面的内容,还需要特别关注JavaBeans技术,它是一个开放的、标准的组件体系结构,它虽然独立于平台,但是,使用Java语言开发。1.2 面向对象知识点讲解:光盘:视频\PPT讲解(知识点)\第1章\面向对象.mp4

在具体学习Java语言之前,需要先弄清楚什么是面向对象,面向对象思想是学好Java语言的前提。在讲解Java语言的具体语法知识之前,先和大家一起学习面向对象的基本知识。1.2.1 什么是面向对象

在目前的软件开发领域有两种主流的开发方法,分别是结构化开发方法和面向对象开发方法。早期的编程语言如C、Basic、Pascal等都是结构化编程语言,随着软件开发技术的逐渐发展,人们发现面向对象可以提供更好的可重用性、可扩展性和可维护性,于是催生了大量的面向对象的编程语言,如C++、Java、C#和Ruby等。

面向对象程序设计即OOP,是Object-Oriented Programming的缩写。面向对象编程技术是一种起源于20世纪60年代的Simula语言,其自身理论已经十分完善,并被多种面向对象程序设计语言(Object-Oriented Programming Langunianling,OOPL)实现。由于很多原因,国内大部分程序设计人员并没有很深的OOP以及OOPL理论,很多人从一开始学习到工作很多年都只是接触到C/C++、Java等静态类型语言,而对纯粹的OOP思想以及动态类型语言知之甚少。

对象的产生通常基于两种基本方式,分别是以原型对象为基础产生新对象和以类为基础产生新对象。1.基于原型

原型模型是以一个有代表性的对象为基础来产生各种新的对象,并由此继续产生更符合实际应用的对象。而原型—委托也是OOP中的对象抽象,是代码共享机制中的一种。2.基于类

一个类提供了一个或多个对象的通用性描叙。从形式化的观点看,类与类型有关,因此,一个类相当于是从该类中产生的实例的集合。1.2.2 Java的面向对象编程

面向对象编程方法学是Java编程的指导思想。在使用Java进行编程时,应该首先利用对象建模技术(OMT)来分析目标问题,抽象出相关对象的共性,对它们进行分类,并分析各类之间的关系;然后再用类来描述同一类对象,归纳出类之间的关系。Coad和Yourdon在对象建模技术、面向对象编程和知识库系统的基础之上设计了一整套面向对象的方法,具体来说分为面向对象分析(OOA)和面向对象设计(OOD)。对象建模技术、面向对象分析和面向对象设计共同构成了系统设计的过程,如图1-1所示。图1-1 系统设计处理流程1.2.3 UML统一建模语言

在进行对象建模、面向对象分析和设计的过程中,需要使用建模语言来描述分析的过程和结果。统一建模语言即UML,是Unified Modeling Langunianling的缩写。UML是为了实现上述目标而设计的一种标准通用的设计语言。1.UML图的类型

UML为我们提供了多种类型的模型描述图,当在某种给定的方法学中使用这些图时,人们就能更容易理解和交流设计思想。UML图可以分为如下3种类型。(1)静态图。

静态图即Static Diagram,其功能是描述了不发生任何变化的软件元素的逻辑结构,描绘了类、对象和数据结构及其存在于它们之间的关系。(2)动态图。

动态图即Dynamic Diagram,其功能是展示软件实体在运行期间的的变化,主要描绘了执行流程、实体改变状态的方式。(3)物理图。

物理图即Physical Diagram,其功能是显示软件实体不变化的物理结构,主要用来描绘库文件、字节文件和数据文件等,以及存在于它们之间的相互关系。2.类图和对象图

在Java中,通常使用类图和对象图来表示项目内程序类的结构和各元素间的对应关系。在下面的内容中,将简要介绍类图和对象图的基本知识。(1)类图。

类图表示不同的实体间的相互关系,显示了系统的静态结构。类图可用于表示逻辑类,逻辑类通常是指事物的种类,比如球队、电影之类的抽象描述。类图还可以用于表示实现类,实现类就是程序员要编写的类。实现类图与逻辑类图可能会用来描述一些相同的类。然而,实现类图与逻辑类图不会使用相同的描述属性。

类图通常用矩形表示,并在矩形内将类分为3个部分。其中最上面的部分显示类的名称,中间部分显示类的属性,最下面的部分显示类的方法,例如图1-2所示的格式。图1-2 典型类图结构注意:在现实应用中,最常用、最简单的类图就是一个在里面显示了类名的长方形。在大多数的UML中,多数类只要有一个能够清楚表达的命名就可以了。

在类名部分还可以显示类的构造类型,类的构造型在双角括符号“« »”之间指定,并放在类的名称上面。常见的构造类型包括如下3类。● 实现类:直接显示类的名称。● 接口:在类名上方的双角括符号“« »”内显示。● 工具类:在类名上方的双角括符号“« »”内显示。

如果类名用斜体表示,或者在类名下面,则表示这个类是一个抽象类。

在属性和方法的前面可以用修饰符“+”或“-”,其功能是表示属性或方法的作用域,具体说明如下所示。● 修饰符“-”:表示属性或方法是私有的(private)。● 修饰符“#”:表示属性或方法是保护的(protected)。● 修饰符“+”:表示属性或方法是公用的(public)。

通常在类的属性或方法参数名称的冒号后,显示了属性的类型或方法的参数的类型。方法的返回值类型显示在方法后面的冒号之后。

例如图1-3显示了一个Lei类的类图结构。图1-3 Lei类的类图结构(2)对象图。

对象图的功能是用来表示类的实例化对象。通常用一个两层的矩形结构来表示对象图,其中上层标识对象名和类名,下层标识对象的实例化属性值。例如在下面的代码中,创建了一个Lei类的对象mm。Lei mm = new Lei("mm", 'F', 24);

上述mm对象的对象图如图1-4所示。图1-4 对象图示例

在同一个应用项目中,类之间可能存在如下多种类别的相互关系。● 继承:即inheritance,是指一个类从其父类派生而来,继承了父

类的属性和方法。基于类的继承叫做一般化(generalization),

基于接口的继承,叫做实现(realization)。● 关联:即association,类之间的关联大多用来表示变量实例持有

对其他对象的引用,这种关系是半永久的,并没有包含关系。● 依赖:即dependency,是不同类实例之间的暂时相互关系。● 聚合:即aggregation,是关联的一种特殊形式,代表着一种整体

和部分的关系。并且里面的部分可以作为其他整体的部分,而部

分和整体之间也没有生命期的依赖。● 组合:即composition,是聚合的一种特殊形式。组合的关联性

比聚合更强,而部分只能作为唯一的一个整体的部分,而且部分

的生命周期依赖于整体的生命周期。

UML是一种设计语言,它的目的不是表现细节,而是表现结构,仅仅展示必要的细节。所以UML不可能与源代码一一对应,只是在结构上存在了某种对应关系。3.序列图和状态图

除了前面介绍的类图和对象图外,在Java中还可以使用序列图和状态图来表示项目内程序类的结构和各元素间的对应关系。在下面的内容中,将对序列图和状态图的基本知识进行简要介绍。(1)序列图。

序列图显示具体用例(或用例的一部分)的详细流程,它不但显示了流程中不同对象之间的交互关系,而且还可以很详细地显示对不同对象的各种调用。在序列图中有如下两个维度。● 垂直维度:以发生的时间顺序显示消息/调用的序列。● 水平维度:显示对象实例之间的交互。

对象之间的交互存在如下5种关系。● 调用:即call,一个对象调用另一个对象(或本身)的方法。● 返回:即return,返回一个值作为方法调用的结果。● 发送:即send,一个对象给另一个对象(或本身)异步发送一

个消息。● 创建:即create,一个对象实例化另一个对象。● 销毁:即destroy,一个对象销毁另一个对象(或本身)。

绘制序列图的方法非常简单,通常用图顶部的框表示类的实例对象,框中的类实例名称和类名称之间用空格/冒号/空格来分隔。如果某个类实例向另一个类实例发送了处理消息,则绘制一条具有指向接收类实例的开箭头的连线,并把处理的名称放在连线上面。对于某些特别重要的消息,可以绘制一条具有指向发起类实例的开箭头的虚线,将返回值标注在虚线上。有助于序列图的阅读。(2)状态图。

状态图表示某个类所处的不同状态和该类的状态转换信息。每个类都有状态,但不是每个类都应该有一个状态图。只有当行为的改变和状态有关时才创建状态图。一般只描述在系统活动期间具有3个或更多潜在状态的类的状态图。

状态图中的符号集包括如下5个基本元素。● 初始起点:使用实心圆来绘制。● 状态转换:使用带箭头的线段来绘制。● 当前状态:使用圆角矩形来绘制。● 判断点:使用空心圆来绘制。● 一个或者多个终止点:使用内部包含实心圆的圆来绘制。

在绘制状态图时,首先需要绘制起点和一条指向该类的初始状态的转换线段。状态本身可以在图上的任意位置绘制,然后只需使用状态转换线条将它们连接起来。1.2.4 对象建模技术

对象建模技术源于通用电气公司的一套系统开发技术,是以面向对象的思想为基础,通过对问题进行抽象而构造出一组相关的模型。通过对象建模技术,可以全面地描述问题领域的结构。对象建模技术把分析时收集到的信息构造在如下3类模型中。● 功能模型:功能模型定义系统做什么。● 对象模型:对象模型定义系统对谁做。● 动态模型:动态模型定义系统如何做。

通过上述3个模型,可以从不同的角度对系统进行描述,首先分别着重于系统的某个侧面,然后整体组合起来构成对系统的完整描述。1.功能模型

功能模型的功能是实现系统内部数据的传送和处理。功能模型能够说明,从输入数据能够计算出什么样的输出数据,但是,没有考虑参加计算的数据按什么时序来执行。功能模型由多个数据流图组成,它们指明从外部输入,通过操作和内部存储,直到外部输出的整个数据流情况。功能模型还包括了对象模型内部数据间的限制。功能模型中的数据流图往往形成一个层次结构,一个数据流图的过程可以由下一层的数据流图作进一步的说明。UML中通常使用用例图和活动图来描述功能模型。

建立功能模型的主要步骤如下所示。(1)确定输入和输出值。(2)用数据流图表示功能的依赖性。(3)具体说明每个具体功能。(4)确定限制。(5)确定功能优化的准则。

上述操作的具体实现流程如图1-5所示。图1-5 功能模型处理流程2.对象模型

对象模型的功能是描述系统的静态结构,包括类和对象,它们的属性和操作,以及它们之间的关系。构造对象模型的主要目的是,发掘与项目应用密切相关的概念。对象模型用包含对象和对象之间关系的图来表示,在UML中通常使用类图和对象图来描述对象模型。

使用OMT建立对象模型的主要步骤如下所示。(1)确定对象类。(2)定义数据词典,并利用它来描述类的属性和类之间的关系。(3)用继承来组织和简化类的结构和类之间的关系。(4)测试访问路径。(5)根据对象之间的关系和对象的功能将对象分组建立模块。

上述操作的具体实现流程如图1-6所示。图1-6 对象模型处理流程3.动态模型

动态模型主要用于控制系统的逻辑,考察在任何时候对象及其关系的改变,描述这些涉及时序和改变的状态。通常使用状态图和事件跟踪图来描述动态模型。

状态图是状态和事件以及它们之间的关系所形成的网络,侧重于描述每一类对象的动态行为。而事件跟踪图则侧重于说明系统执行过程中的一个特点场景,描述完成系统某个功能的一个事件序列。

对象到对象的单个消息叫做一个事件。在系统的一个特定环境下发生的一系列事件叫做一个场景。场景通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件。在一个场景中,一系列事件和交换事件的对象都可以放在一个事件跟踪图中表示。UML使用状态图和序列图来描述动态模型,序列图对应于事件跟踪图。

建立动态模型的主要步骤如下所示。(1)预制典型的交互序列场景。(2)确定对象之间的事件,为每个场景建立事件跟踪图。(3)为每个系统预制一个事件流图。(4)为具有重要动态行为的类建立状态图。(5)检验不同状态图中共享的事件的一致性和完整性。

上述操作的具体实现流程如图1-7所示。图1-7 动态模型处理流程1.2.5 面向对象分析

面向对象分析属于软件开发过程中的问题定义阶段。传统的系统分析产生一组面向过程的文档,定义目标系统的功能;面向对象分析则产生一种描述系统功能和问题领域的基本特征的综合文档。1.面向对象分析的原则

Java中面向对象的分析需要遵循下面的原则。(1)抽象。

从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,这就是抽象。抽象是形成概念的必要手段。抽象原则具有如下两点意义。● 尽管问题域中的事物是很复杂的,但是分析员并不需要了解和描

述它们的一切,只需要分析研究其中与系统目标有关的事物及其

本质性特征。● 通过舍弃个体事物在细节上的差异,抽取其共同特征而得到一批

事物的抽象概念。

抽象是面向对象方法中使用最为广泛的原则,抽象原则包括过程抽象和数据抽象两个方面。● 过程抽象:任何一个完成确定功能的操作序列,使用者都可以把

它看成一个单一的实体,尽管实际上它可能是由一系列更低级的

操作完成的。● 数据抽象:根据施加于数据之上的操作来定义数据类型,并限定

数据的值只能由这些操作来修改和观察。数据抽象是面向对象分

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载