图书介绍

疯狂Java讲义【2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载】

疯狂Java讲义
  • 李刚编著 著
  • 出版社: 北京:电子工业出版社
  • ISBN:9787121066467
  • 出版时间:2008
  • 标注页数:889页
  • 文件大小:473MB
  • 文件页数:907页
  • 主题词:JAVA语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

疯狂Java讲义PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 Java概述1

1.1 Java语言的发展简史2

1.2 Java的竞争对手及各自优势4

1.2.1 C#简介和优势4

1.2.2 Ruby简介和优势4

1.2.3 Python的简介和优势5

1.3 Java程序运行机制6

1.3.1高级语言的运行机制6

1.3.2 Java程序的运行机制和JVM6

1.4开发Java的准备7

1.4.1安装JDK8

学生提问 不是说JVM是运行Java程序的虚拟机吗?那JRE和JVM的关系是怎样的呢?8

学生提问 为什么不安装公共JRE系统呢?9

1.4.2设置PATH环境变量10

学生提问 为什么选择设置用户变量,用户变量和系统变量有什么区别呢?11

1.5第一个Java程序12

1.5.1编辑Java源代码12

1.5.2编译Java程序13

学生提问 当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢?13

1.5.3运行Java程序14

1.5.4根据CLASSPATH环境变量定位类15

1.6 Java程序的基本规则16

1.6.1 Java程序的组织形式16

1.6.2 Java源文件的命名规则17

1.6.3初学者容易犯的错误18

1.7垃圾回收机制20

1.8何时开始使用IDE工具21

学生提问 老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢?21

1.9本章小结22

本章练习22

第2章 理解面向对象23

2.1面向对象24

2.1.1结构化程序设计简介24

2.1.2程序的三种基本结构25

2.1.3面向对象程序设计简介27

2.1.4面向对象的基本特征28

2.2 UML(统一建模语言)介绍29

2.2.1用例图30

2.2.2类图31

2.2.3组件图33

2.2.4部署图33

2.2.5顺序图34

2.2.6活动图34

2.2.7状态机图36

2.3 Java的面向对象特征36

2.3.1一切都是对象37

2.3.2类和对象37

2.4本章小结37

第3章 数据类型和运算符38

3.1注释39

3.1.1单行注释和多行注释39

3.1.2文档注释40

学生提问 API文档是什么?40

学生提问 为什么要掌握查看API文档的方法?42

3.2标识符和关键字45

3.2.1分隔符45

3.2.2标识符规则47

3.2.3 Java关键字47

3.3数据类型分类48

3.4基本数据类型48

3.4.1整型49

3.4.2字符型49

3.4.3浮点型51

3.4.4布尔型52

3.5基本类型的类型转换53

3.5.1自动类型转换53

3.5.2强制类型转化54

3.5.3表达式类型的自动提升56

3.6直接量57

3.6.1直接量的类型57

3.6.2直接量的赋值58

3.7运算符58

3.7.1算术运算符58

3.7.2赋值运算符61

3.7.3位运算符62

3.7.4扩展后的赋值运算符64

3.7.5比较运算符65

学生提问 Java为什么要对这些数据进行缓存呢?67

3.7.6逻辑运算符67

3.7.7三目运算符68

3.7.8运算符的结合性和优先级69

3.8本章小结70

本章练习70

第4章 流程控制和数组71

4.1顺序结构72

4.2分支结构72

4.2.1 if条件语句72

4.2.2 switch分支语句76

4.3循环结构78

4.3.1 while循环语句78

4.3.2 do while循环语句79

4.3.3 for循环80

4.3.4嵌套循环83

4.4控制循环结构84

4.4.1使用break结束循环84

4.4.2使用continue结束本次循环85

4.4.3使用return结束方法87

4.5数组类型87

4.5.1理解数组:数组也是一种类型87

学生提问 int[]是一种类型吗?怎么使用这种类型呢?88

4.5.2定义数组88

4.5.3数组的初始化88

学生提问 能不能只分配内存空间,不赋初始值呢?89

4.5.4使用数组90

学生提问 为什么要我记住这些异常信息?91

4.5.5 JDK1.5提供了foreach循环91

4.6深入数组93

4.6.1内存中的数组93

学生提问 为什么有栈内存和堆内存之分?93

4.6.2基本类型数组的初始化95

4.6.3引用类型数组的初始化96

4.6.4没有多维数组99

学生提问 我是否可以让图4.13中灰色覆盖的数组元素再次指向另一个数组?这样不可以扩展成三维数组吗?甚至扩展到更多维的数组?101

4.6.5操作数组的工具类102

4.6.6数组的应用举例103

4.7本章小结106

本章练习106

第5章 面向对象(上)107

5.1类和对象108

5.1.1定义类108

学生提问 构造器不是没有返回值吗?为什么不能用void修饰呢?110

5.1.2对象的产生和使用110

5.1.3对象、引用和指针111

5.1.4对象的this引用112

5.2方法详解116

5.2.1方法的所属性116

5.2.2方法的参数传递机制116

5.2.3形参长度可变的方法120

5.2.4递归方法121

5.2.5方法重载123

学生提问 为什么方法的返回值类型不能用于区分重载的方法?124

5.3成员变量和局部变量124

5.3.1成员变量和局部变量125

5.3.2成员变量的初始化和内存中的运行机制128

5.3.3局部变量的初始化和内存中的运行机制130

5.3.4变量的使用规则130

5.4隐藏和封装132

5.4.1理解封装132

5.4.2使用访问控制符132

5.4.3 package和import135

5.4.4 Java的常用包140

5.5深入构造器140

5.5.1使用构造器执行初始化141

学生提问 构造器是创建Java对象的途径,是不是说构造器完全负责创建Java对象?141

5.5.2构造器的重载142

学生提问 为什么要用this来调用另一个重载的构造器?我把另一个构造器里的代码复制、粘贴到这个构造器里不就可以了吗?143

5.6类的继承144

5.6.1继承的特点144

5.6.2重写父类的方法145

5.6.3父类实例的super引用146

学生提问 我们只是创建了一个Ostrich对象时,哪来的Bird对象?147

5.6.4调用父类构造器148

学生提问 为什么我创建Java对象时从未感觉到java.lang.Object的构造器被调用过?150

5.7多态151

5.7.1多态性151

5.7.2引用变量的强制类型转换152

5.7.3 instanceof运算符154

5.8继承与组合154

5.8.1使用继承的注意点155

5.8.2利用组合实现复用156

学生提问 使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大?159

5.9初始化块159

5.9.1使用初始化块160

5.9.2初始化块和构造器161

5.9.3静态初始化块162

5.10本章小结164

本章练习165

第6章 面向对象(下)166

6.1基本数据类型的包装类167

6.2处理对象170

6.2.1打印对象和toString方法170

6.2.2==和equals比较运算符172

6.3类成员175

6.3.1理解类成员175

6.3.2单例(Singleton)类176

6.4 final修饰符177

6.4.1 final变量177

6.4.2 final方法181

6.4.3 final类182

6.4.4不可变类182

6.4.5缓存实例的不可变类186

6.5抽象类188

6.5.1抽象方法和抽象类188

6.5.2抽象类的作用191

6.6更彻底的抽象:接口192

6.6.1接口的概念192

6.6.2接口的定义193

6.6.3接口的继承195

6.6.4使用接口195

6.6.5接口和抽象类197

6.6.6面向接口编程198

6.7内部类202

6.7.1非静态内部类202

学生提问 非静态内部类对象和外部类对象的关系是怎样的?206

6.7.2静态内部类207

学生提问 为什么静态内部类实例方法也不能访问外部类的实例属性呢?207

学生提问 接口里是否能定义内部接口?208

6.7.3使用内部类208

学生提问 既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类?211

6.7.4局部内部类211

6.7.5匿名内部类212

6.7.6闭包(Closure)和回调215

6.8枚举类217

6.8.1手动实现枚举类217

6.8.2枚举类入门219

6.8.3枚举类的属性、方法和构造器220

6.8.4实现接口的枚举类223

6.8.5包含抽象方法的枚举类224

6.9对象与垃圾回收225

6.9.1对象在内存中的状态226

6.9.2强制垃圾回收227

6.9.3 finalize方法228

6.9.4对象的软、弱和虚引用230

6.10修饰符的适用范围233

6.11使用JAR文件234

6.11.1 jar命令详解235

6.11.2创建可执行的JAR包237

6.11.3关于JAR包的技巧238

6.12本章小结239

本章练习239

第7章 Java集合240

7.1 Java集合概述241

7.2 Collection和Iterator接口243

7.2.1使用Iterator接口遍历集合元素244

7.2.2使用foreach循环遍历集合元素246

7.3 Set接口247

7.3.1 HashSet类247

学生提问 hashCode方法对于HashSet的作用是什么?249

7.3.2 TreeSet类252

7.3.3 EnumSet类259

7.4 List接口261

7.4.1 List接口和ListIterator接口261

7.4.2 ArrayList和Vector实现类264

7.4.3固定长度的List266

7.5 Queue接口266

7.5.1 LinkedList实现类266

7.5.2 PriorityQueue实现类269

7.6 Map270

7.6.1 HashMap和Hashtable实现类271

7.6.2 SortedMap接口和TreeMap实现类276

7.6.3 WeakHashMap实现类279

7.6.4 IdentiHashMap实现类280

7.6.5 EnumMap实现类281

7.7 HashSet和HashMap的性能选项282

7.8操作集合的工具类:Collections283

7.8.1排序操作283

7.8.2查找,替换操作287

7.8.3同步控制288

7.8.4设置不可变集合288

7.9烦琐的接口:Enumeration289

7.10本章小结290

本章练习290

第8章 泛型291

8.1泛型入门292

8.1.1编译时不检查类型的异常292

8.1.2手动实现编译时检查类型293

8.1.3使用泛型294

8.2深入泛型294

8.2.1定义泛型接口、类295

8.2.2从泛型类派生子类296

8.2.3并不存在泛型类298

8.3类型通配符298

8.3.1使用类型通配符299

8.3.2设定类型通配符的上限300

8.3.3设定类型形参的上限302

8.4泛型方法303

8.4.1定义泛型方法3

8.4.2泛型方法和类型通配符的区别306

8.4.3设定通配符的下限307

8.4.4泛型方法与方法重载309

8.5擦除和转换309

8.6泛型与数组311

8.7本章小结313

第9章 与运行环境交互314

9.1与用户互动315

9.1.1运行Java程序的参数315

9.1.2使用Scanner获取键盘输入316

9.1.3使用BufferedReader获取键盘输入318

9.2系统相关319

9.2.1 System类319

9.2.2 Runtime类321

9.3常用类322

9.3.1 Object类322

9.3.2 String、StringBuffer和StringBuilder类322

9.3.3 Math类327

9.3.4 Random类328

9.3.5 BigDecimal类330

9.4处理日期的类333

9.4.1 Date类333

9.4.2 Calendar类334

9.4.3 TimeZone类337

9.5正则表达式338

9.5.1创建正则表达式338

9.5.2使用正则表达式341

9.6程序国际化345

9.6.1 Java国际化的思路346

9.6.2 Java支持的语言和国家346

9.6.3完成程序国际化347

9.6.4使用MessageFormat处理包含占位符的字符串349

9.6.5使用类文件代替资源文件350

9.6.6使用NumberFormat格式化数字350

9.6.7使用DateFormat格式化日期352

9.7本章小结355

本章练习355

第10章 异常处理356

10.1异常概述357

10.2异常处理机制358

10.2.1使用try…catch捕获异常359

10.2.2异常类的继承体系360

10.2.3访问异常信息363

10.2.4使用finally回收资源364

10.2.5异常处理的嵌套367

10.3 Checked异常和Runtime异常体系367

10.3.1使用throws声明抛出异常367

10.4使用throw抛出异常369

10.4.1抛出异常369

10.4.2自定义异常类371

10.4.3 catch和throw同时使用372

10.4.4异常链373

10.5 Java的异常跟踪栈374

10.6异常处理规则377

10.6.1不要过度使用异常377

10.6.2不要使用过于庞大的try块3

10.6.3避免使用Catch All语句378

10.6.4不要忽略捕获到的异常379

10.7本章小结379

本章练习379

第11章 AWT编程380

11.1 GUI(图形用户界面)和AWT381

11.2 AWT容器382

11.3布局管理器385

11.3.1 FlowLayout布局管理器386

11.3.2 BorderLayout布局管理器387

学生提问 BorderLayout最多只能放置5个组件吗?那它还有什么作用?388

11.3.3 GridLayout布局管理器389

11.3.4 GridBagLayout布局管理器390

11.3.5 CardLayout布局管理器393

11.3.6绝对定位395

11.3.7 BoxLayout布局管理器396

学生提问 图11.15和图11.16显示的所有按钮都紧挨在一起,如果希望像FlowLayout、GridLayout等布局管理器指定组件的间距该怎么办?397

11.4 AWT常用组件398

11.4.1基本组件398

11.4.2对话框400

11.5事件处理403

11.5.1 Java事件模型的流程403

11.5.2事件和事件监听器405

11.5.3事件适配器409

11.5.4事件监听器的实现形式410

11.6 AWT的菜单413

11.6.1菜单条、菜单和菜单项413

11.6.2右键菜单416

学生提问 为什么即使我没有给多行文本域编写右键菜单,但当我在多行文本域上单击右键时一样会弹出右键菜单?418

11.7在AWT中绘图418

11.7.1画图的实现原理418

11.7.2使用Graphics类419

11.8处理位图424

11.8.1 Image抽象类和BufferedImage实现类424

11.8.2使用ImageIO输入/输出位图427

11.9剪贴板432

11.9.1数据传递的类和接口432

11.9.2传递文本432

11.9.3使用系统剪贴板传递图像434

11.9.4使用本地剪贴板来传递对象引用439

11.9.5通过系统剪贴板传递Java对象442

11.10本章小结445

本章练习445

第12章 Swing编程446

12.1 Swing概述447

12.2 Swing基本组件的用法448

12.2.1 Swing组件层次448

12.2.2 AWT组件的Swing实现449

学生提问 为什么单击Swing多行文本域时不是弹出像AWT多行文本域中的右键菜单?455

12.2.3使用JToolBar创建工具条458

12.2.4使用JColorChooser和JFileChooser461

12.2.5使用JOptionPane469

12.3 Swing中的特殊容器475

12.3.1使用JSplitPane475

12.3.2使用JTabbedPane477

12.3.3使用JLayeredPane、JDesktopPane和JInternalFrame481

12.4 Swing拖放功能490

12.4.1拖放目标491

12.4.2拖放源494

12.4.3简化的拖放操作495

12.5 Applet和JApplet497

12.5.1.Applet简介及其安全性498

12.5.2开发Applet类498

12.5.3使用HTML页面装载Applet500

12.5.4 appletviewer简介502

12.5.5 Applet的生命周期和动画机制503

学生提问 程序中重写paint方法时绘制了一个字符串,但图12.28上则绘制出了如此之多的字符串,这是为什么呢?505

12.5.6使用Applet创建音乐播放器505

12.6使用JProgressBar、ProgressMonitor和BoundedRangeModel创建进度条508

12.6.1创建进度条508

12.6.2创建进度对话框512

12.7使用JSlider和BoundedRangeModel创建滑动条513

12.8使用JSpinner和SpinnerModel创建微调控制器517

12.9使用JList、JComboBox创建列表框520

12.9.1简单列表框520

12.9.2不强制存储列表项的ListModel和ComboBoxModel524

12.9.3强制存储列表项的DefaultListModel和DefaultComboBoxModel528

学生提问 为什么JComboBox提供了添加、删除列表项目的方法?而JList没有提供添加、删除列表项的方法呢?530

12.9.4使用ListCellRenderer改变列表项外观530

12.10使用JTree和TreeModel创建树532

12.10.1创建树533

12.10.2拖动、编辑树节点536

12.10.3监听节点事件540

12.10.4使用TreeCellRendering改变节点外观542

12.11使用JTable和TableModel创建表格549

12.11.1创建JTable549

学生提问 我们指定的表格数据、表格列标题都是Object类型的数组,JTable如何显示这些Object对象?550

12.11.2 TableModel和监听器555

12.11.3 TableColumnModel和监听器561

12.11.4实现排序564

12.11.5绘制单元格内容567

12.11.6编辑单元格内容570

12.12使用JFormattedTextField和JTextPane创建格式文本576

12.12.1监听Document的改变576

12.12.2使用JPasswordField578

12.12.3使用JFormattedTextField579

12.12.4使用JEditorPane588

12.12.5使用JTextPane588

12.13本章小结595

本章练习595

第13章 JDBC编程596

13.1 JDBC基础597

13.1.1 JDBC简介597

13.1.2 JDBC驱动程序类型598

13.2 SQL语法介绍599

13.2.1安装数据库599

13.2.2关系数据库基本概念和MySQL基本命令601

13.2.3 SQL语句基础603

13.2.4 DDL语句604

13.2.5 DML语句语法618

13.2.6 select语句和SQL函数620

13.2.7分组和组函数627

13.2.8多表连接查询和子查询629

13.3 JDBC的典型用法635

13.3.1 JDBC常用接口和类简介635

13.3.2 JDBC编程步骤637

学生提问 前面给出的仅是MySQL和Oracle两种数据库的驱动,我看不出驱动类字符串有什么规律啊。如果我希望使用其他数据库,我怎么找到其他数据库的驱动类呢?637

13.4执行SQL语句的方式639

13.4.1使用executeUpdate执行DDL和DML语句640

13.4.2使用execute方法执行SQL语句642

13.4.3使用PreparedStatement执行SQL语句644

13.4.4使用CallableStatement调用存储过程650

13.5管理结果集652

13.5.1可滚动、可更新的结果集652

13.5.2处理Blob类型数据654

13.5.3使用ResultSetMetaData分析结果集660

13.6事务处理663

13.6.1事务的概念和MySQL事务支持663

13.6.2 JDBC的事务支持665

13.6.3批量更新667

13.7分析数据库信息668

13.7.1使用DatabaseMetaData分析数据库信息668

13.7.2使用系统表分析数据库信息670

13.7.3选择合适的分析方式671

13.8使用连接池管理连接671

13.9本章小结673

本章练习673

第14章 Annotation(注释)674

14.1基本Annotation675

14.1.1限定重写父类方法:@Override675

14.1.2标示已过时:@Deprecated676

14.1.3抑制编译器警告:@SuppressWarnings677

14.2自定义Annotation677

14.2.1定义Annotation677

14.2.2提取Annotation的信息679

14.2.3使用Annotation的例子680

14.3 JDK的元Annotation685

14.3.1使用@Retention685

14.3.2使用@Target686

14.3.3使用@Documented686

14.3.4使用@Inherited687

14.4使用APT处理Annotation688

14.5本章小结693

第15章 输入/输出694

15.1 File类695

15.1.1访问文件和目录695

15.1.2文件过滤器697

15.2理解Java的IO流698

15.2.1流的分类698

15.2.2流的概念模型699

15.3字节流和字符流700

15.3.1 InputStream和Reader700

15.3.2 OutputStream和Writer703

15.4输入/输出流体系705

15.4.1处理流的用法705

15.4.2输入/输出流体系706

15.4.3转换流708

学生提问 怎么没有把字符流转换成字节流的转换流呢?708

15.4.4推回输入流710

15.5重定向标准输入/输出711

15.6 Java虚拟机读写其他进程的数据713

15.7 RandomAccessFile716

15.8对象序列化720

15.8.1序列化的含义和意义720

15.8.2使用对象流实现序列化720

15.8.3对象引用的序列化723

15.8.4自定义序列化728

15.8.5另一种自定义序列化机制733

15.8.6版本735

15.9 Java新IO736

15.9.1 Java新1O概述736

15.9.2使用Buffer737

15.9.3使用Channel740

15.9.4编码集和Charset743

15.9.5文件锁745

15.10本章小结747

本章练习747

第16章 多线程748

16.1线程概述749

16.1.1线程和进程749

16.1.2多线程的优势750

16.2线程的创建和启动750

16.2.1继承Thread类创建线程类751

16.2.2实现Runnable接口创建线程类752

16.2.3两种方式所创建线程的对比754

16.3线程的生命周期754

16.3.1新建和就绪状态754

16.3.2运行和阻塞状态755

16.3.3线程死亡757

16.4控制线程758

16.4.1 join线程758

16.4.2后台线程759

16.4.3线程睡眠:sleep760

16.4.4线程让步:yield761

16.4.5改变线程优先级762

16.5线程的同步763

16.5.1线程安全问题764

16.5.2同步代码块766

16.5.3同步方法767

16.5.4释放同步监视器的锁定769

16.5.5同步锁(Lock)770

16.5.6死锁772

16.6线程通信774

16.6.1线程的协调运行774

16.6.2使用条件变量控制协调778

16.6.3使用管道流780

16.7线程组和未处理的异常782

16.8 Callable和Future785

16.9线程池787

16.10线程相关类789

16.10.1 ThreadLocal类789

16.10.2包装线程不安全的集合791

16.10.3线程安全的集合类792

16.11本章小结792

第17章 网络编程793

17.1网络编程的基础知识794

17.1.1网络基础知识794

17.1.2 IP地址和端口号795

17.2 Java的基本网络支持796

17.2.1使用InetAddress796

17.2.2使用URLDecoder和URLEncoder797

17.2.3使用URL和URLConnection798

17.3基于TCP协议的网络编程805

17.3.1 TCP协议基础806

17.3.2使用ServletSocket创建TCP服务器端806

17.3.3使用Socket进行通信807

17.3.4加入多线程810

17.3.5记录用户信息813

17.3.6使用NIO实现非阻塞Socket通信823

17.4基于UDP协议的网络编程829

17.4.1 UDP协议基础829

17.4.2使用DatagramSocket发送、接收数据829

17.4.3使用MulticastSocket实现多点广播834

17.5使用代理服务器845

17.5.1直接使用Proxy创建连接846

17.5.2使用ProxySelector选择代理服务器847

17.6本章小结849

本章练习849

第18章 类加载和反射850

18.1类的加载、连接和初始化851

18.1.1 JVM和类851

18.1.2类的加载852

18.1.3类的连接853

18.1.4类的初始化853

18.1.5类初始化的时机854

18.2类加载器855

18.2.1类加载器简介856

18.2.2类加载机制857

18.2.3创建并使用自定义的类加载器858

18.2.4 URLClassLoader类862

18.3通过反射查看类信息863

18.3.1获得Class对象863

18.3.2从Class中获取信息864

18.4使用反射生成并操作对象868

18.4.1创建对象868

18.4.2调用方法870

18.4.3访问属性值873

18.4.4操作数组874

18.5使用反射生成JDK动态代理875

18.5.1使用Proxy和InvocationHandler创建动态代理876

18.5.2动态代理和AOP878

18.6反射和泛型882

18.6.1泛型和Class类882

18.6.2使用反射来获取泛型信息884

18.7本章小结885

本章练习886

上善若水——兼谈我的创作理念887

热门推荐