
编辑推荐
《Java基础入门(第2版)》是Java语言编程的经典教材,其第一版发行近20万册。历久弥新,精心修订。全书共11章,包括Java开发环境的搭建及其运行机制、基本语法、面向对象的思想、常用API、集合、IO、GUI、JDBC、多线程和网络编程等内容。提供了208个经典案例,5个综合案例,219道经典习题。配套的数字教学资源丰富,包括精美PPT、1500道测试题、40小时教学视频。
目录
目录
第1章Java开发入门1
1.1Java概述1
1.1.1什么是Java1
1.1.2Java语言的特点2
1.2JDK的使用3
1.2.1什么是JDK3
1.2.2安装JDK3
1.2.3JDK目录介绍6
1.3系统环境变量7
1.3.1PATH环境变量7
1.3.2CLASSPATH环境变量9
1.4第一个Java程序9
1.5Java的运行机制12
1.6Eclipse开发工具13
1.6.1Eclipse概述14
1.6.2Eclipse的安装与启动14
1.6.3使用Eclipse进行程序开发17
1.7本章小结22
1.8习题23
第2章Java编程基础25
2.1Java的基本语法25
2.1.1Java的基本语法格式25
2.1.2Java中的注释26
2.1.3Java中的关键字28
2.1.4Java中的标识符28
2.2Java中的变量与常量29
2.2.1变量的定义29
2.2.2变量的数据类型30
2.2.3变量的类型转换32目录Java基础入门(第2版)2.2.4变量的作用域36
2.2.5Java中的常量37
2.3Java中的运算符41
2.3.1算术运算符41
2.3.2赋值运算符42
2.3.3比较运算符44
2.3.4逻辑运算符44
2.3.5位运算符 46
2.3.6条件运算符48
2.3.7运算符的优先级49
2.4选择结构语句50
2.4.1if条件语句50
2.4.2switch条件语句54
2.5循环结构语句56
2.5.1while循环语句56
2.5.2do…while循环语句57
2.5.3for循环语句58
2.5.4循环嵌套60
2.5.5跳转语句62
2.6数组64
2.6.1数组的定义64
2.6.2数组的常见操作69
2.6.3多维数组73
2.7本章小结75
2.8习题75
第3章面向对象(上)77
3.1面向对象概述77
3.2Java中的类与对象78
3.2.1类与对象的关系78
3.2.2类的定义79
3.2.3对象的创建与使用81
3.2.4访问控制符84
3.3类的封装85
3.3.1为什么需要封装85
3.3.2如何实现封装86
3.4方法的重载和递归87
3.4.1方法的重载87
3.4.2方法的递归89
3.5构造方法90
3.5.1构造方法的定义90
3.5.2构造方法的重载92
3.6this关键字95
3.7static关键字97
3.7.1静态变量97
3.7.2静态方法99
3.7.3静态代码块100
3.8本章小结101
3.9习题101
第4章面向对象(下)104
4.1类的继承104
4.1.1继承的概念104
4.1.2重写父类方法106
4.1.3super关键字107
4.1.4Object类110
4.2final关键字112
4.2.1final关键字修饰类112
4.2.2final关键字修饰方法113
4.2.3final关键字修饰变量114
4.3抽象类和接口116
4.3.1抽象类116
4.3.2接口117
4.4多态121
4.4.1多态概述121
4.4.2对象的类型转换122
4.5内部类126
4.5.1成员内部类126
4.5.2局部内部类127
4.5.3静态内部类128
4.5.4匿名内部类129
4.6JDK 8的Lambda表达式131
4.6.1Lambda表达式入门131
4.6.2函数式接口132
4.6.3方法引用与构造器引用134
4.7异常138
4.7.1什么是异常138
4.7.2异常的类型140
4.7.3try…catch和finally141
4.7.4throws关键字143
4.7.5throw关键字145
4.7.6自定义异常147
4.8垃圾回收148
4.9本章小结151
4.10习题152
第5章Java中的常用类154
5.1String类与StringBuffer类154
5.1.1String类的初始化154
5.1.2String类的常见操作156
5.1.3StringBuffer类162
5.2System类与Runtime类164
5.2.1System类164
5.2.2Runtime类168
5.3Math类与Random类170
5.3.1Math类170
5.3.2Random类171
5.4包装类173
5.5日期与时间类176
5.5.1Date类176
5.5.2Calendar类176
5.5.3JDK 8的日期与时间类180
5.6格式化类182
5.6.1DateFormat类182
5.6.2SimpleDateFormat类184
5.6.3DateTimeFormatter类186
5.7本章小结189
5.8习题189
第6章集合191
6.1集合概述191
6.2Collection接口192
6.3List接口193
6.3.1List接口简介193
6.3.2ArrayList集合193
6.3.3LinkedList集合195
6.4Collection集合遍历197
6.4.1Iterator遍历集合197
6.4.2foreach遍历集合199
6.4.3JDK 8的forEach遍历集合 202
6.5Set接口203
6.5.1Set接口简介203
6.5.2HashSet集合204
6.5.3TreeSet集合207
6.6Map接口212
6.6.1Map接口简介212
6.6.2HashMap集合213
6.6.3Map集合遍历216
6.6.4TreeMap集合220
6.6.5Properties集合222
6.7泛型223
6.8常用工具类225
6.8.1Collections工具类225
6.8.2Arrays工具类228
6.9聚合操作232
6.9.1聚合操作简介232
6.9.2创建Stream流对象233
6.9.3Stream流的常用方法235
6.9.4Parallel Stream(并行流)240
6.10本章小结242
6.11习题242
第7章I/O流244
7.1I/O流概述244
7.2字节流245
7.2.1字节流概述245
7.2.2字节流读写文件247
7.2.3文件的拷贝250
7.2.4字节流的缓冲区251
7.2.5字节缓冲流253
7.3字符流254
7.3.1字符流概述254
7.3.2字符流操作文件255
7.3.3转换流258
7.4File类259
7.4.1File类的常用方法260
7.4.2遍历目录下的文件262
7.4.3删除文件及目录265
7.5RandomAccessFile266
7.6对象序列化268
7.7NIO269
7.7.1NIO概述269
7.7.2Buffer(缓冲器)270
7.7.3Channel(通道)273
7.8NIO.2275
7.8.1Path接口275
7.8.2Files工具类276
7.9本章小结278
7.10习题278
第8章GUI(图形用户接口)280
8.1Swing概述280
8.2Swing顶 级 容器281
8.2.1JFrame281
8.2.2JDialog282
8.3布局管理器283
8.3.1BorderLayout284
8.3.2FlowLayout285
8.3.3GridLayout287
8.4事件处理288
8.4.1事件处理机制288
8.4.2Swing常用事件处理290
8.5Swing常用组件295
8.5.1面板组件295
8.5.2文本组件298
8.5.3标签组件301
8.5.4按钮组件302
8.5.5下拉框组件306
8.5.6菜单组件308
8.6Swing组件的整合使用——Q Q登录312
8.6.1案例分析312
8.6.2案例实现313
8.7JavaFX图形用户界面工具321
8.7.1JavaFX概述321
8.7.2JavaFX开发环境配置322
8.7.3JavaFX基础入门323
8.7.4JavaFX可视化管理工具328
8.8本章小结332
8.9习题333
第9章JDBC335
9.1什么是JDBC335
9.2JDBC常用API336
9.2.1Driver接口336
9.2.2DriverManager类336
9.2.3Connection接口336
9.2.4Statement接口337
9.2.5PreparedStatement接口337
9.2.6ResultSet接口338
9.3JDBC编程339
9.3.1JDBC的编程步骤339
9.3.2实现第一个JDBC程序341
9.4案例——使用JDBC实现Q Q登录344
9.5本章小结347
9.6习题347
第10章多线程350
10.1线程概述350
10.1.1进程350
10.1.2线程351
10.2线程的创建352
10.2.1Thread类实现多线程352
10.2.2Runnable接口实现多线程353
10.2.3Callable接口实现多线程355
10.2.4三种实现多线程方式的对比分析357
10.2.5后台线程360
10.3线程的生命周期及状态转换361
10.4线程的调度363
10.4.1线程的优先级363
10.4.2线程休眠364
10.4.3线程让步366
10.4.4线程插队367
10.5多线程同步369
10.5.1线程安全369
10.5.2同步代码块370
10.5.3同步方法372
10.5.4同步锁374
10.5.5死锁问题375
10.6多线程通信377
10.6.1问题引出377
10.6.2问题如何解决379
10.7线程池381
10.7.1Executor接口实现线程池管理381
10.7.2CompletableFuture类实现线程池管理383
10.8本章小结385
10.9习题385
第11章网络编程388
11.1网络编程基础388
11.1.1网络通信协议388
11.1.2IP地址和端口号389
11.1.3InetAddress390
11.1.4UDP与TCP协议391
11.2UDP通信392
11.2.1UDP通信简介392
11.2.2DatagramPacket393
11.2.3DatagramSocket394
11.2.4UDP网络程序395
11.2.5UDP案例——聊天程序397
11.3TCP通信402
11.3.1TCP通信简介402
11.3.2ServerSocket402
11.3.3Socket403
11.3.4简单的TCP网络程序404
11.3.5多线程的TCP网络程序406
11.3.6TCP案例——文件上传408
11.4本章小结411
11.5习题412
序言
序言
江苏传智播客教育科技股份有限公司(简称“传智播客”)是一家致力于培养高素质软件开发人才的科技公司。“黑马程序员”是传智播客旗下的高端IT教育品牌。
“黑马程序员”的学员多为大学毕业后,想从事IT行业,但各方面条件还不成熟的年轻人。“黑马程序员”的学员筛选制度非常严格,包括严格的技术测试、自学能力测试,还包括性格测试、压力测试、品德测试等,以百里挑一的残酷筛选制度确保学员质量,降低企业的用人风险。
自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研三个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,有针对性地出版了计算机系列教材60多种,制作教学视频数十套,发表各类技术文章数百篇。
前言
Java是当前流行的一种程序设计语言,因其安全性、平台无关性、性能优异等特点,自问世以来一直受到广大编程人员的喜爱。在当下的网络时代,Java技术应用十分广泛,从大型复杂的企业级开发到小型移动设备的开发,随处都可以看到Java活跃的身影。对于一个想从事Java程序开发的人员来说,学好Java基础尤为重要。
为什么要学习本书
作为一种技术入门的书籍,最重要也是最难的一件事就是要将一些非常复杂、难以理解的编程思想和问题简单化,让读者能够轻松理解并快速掌握。本书采用理论和案例相结合的编写方式,采用通俗易懂的语言和生动形象的比喻来讲解理论知识,并使用典型、翔实的案例来演示知识的运用,真正做到理论与实际相结合。同时在编写本书时,充分考虑到实际开发学习和开发需求,更加全面地选取Java基础知识点、版本,也更为细致地对重要知识点原理和案例进行演示分析。书中知识点由浅入深、由易到难,初学者能够在逐渐深入的学习过程中,体会到编写Java程序的乐趣。
如何使用本书
本书共分11章,接下来分别对各章进行简单的介绍,具体如下。
第1章主要介绍Java语言的特点、JDK的安装使用、Java运行机制以及Eclipse开发工具使用。通过本章的学习,学员需要掌握JDK的安装配置,熟悉Java开发工具的基本使用,动手实现属于自己的第一个Java程序。
第2章详细讲解Java语言的基本语法。不论任何一门语言,其基本语法都是最重要的内容。在学习基本语法时,一定要做到认真学习每一个知识点,切忌走马观花,将章节内容粗略地看一遍,这样达不到理想的学习效果。
第3、第4章详细讲解Java语言面向对象的知识,这两章的内容以编程思想为主,初学者需要花很大的精力来理解这两章的内容。可以这样讲,只有学明白了面向对象的编程思想,才算真正认识了Java这门语言。
第5~7章主要讲解Java的常用类、集合和I/O,这3章讲解的知识是今后Java开发中最常用的基础知识。读者在学习这3章内容时,应做到完全理解每个知识点,并认真完成每个案例的独自操作。
第8章详细讲解GUI(图形用户接口)中的Swing和JavaFX工具,其内容主要包括Swing组件类架构、布局管理器、事件处理机制、Swing常用组件以及JavaFX图形用户工具基本使用。通过本章的学习,读者能够熟悉GUI的思想和常用工具,同时能够完成一些基本、适用的图形界面。
第9章主要讲解JDBC的基础知识,以及如何在项目中使用JDBC实现对数据的增删改查等。通过本章的学习,读者可以了解什么是JDBC,熟悉JDBC的常用API,掌握JDBC操作数据库的步骤,还能学会如何将GUI项目与JDBC相结合进行开发。
第10章主要讲解线程的创建、线程的生命周期、线程的调度方式、多线程同步以及线程池知识。通过本章的学习,读者可以对多线程技术有较为深入的了解,并对多线程的创建、调度以及同步做到熟练掌握。
第11章主要讲解Java网络编程的相关知识,内容包括网络通信协议、DatagramSocket类、DatagramPacket类以及如何通过UDP的相关知识来实现聊天程序、TCP网络编程中相关的ServerSocket类、Socket类以及文件上传任务的实现。通过对本章的学习,读者能够了解网络编程相关的知识,并能够掌握UDP网络程序和TCP网络程序的编写。
另外,如果读者在理解知识点的过程中遇到困难,建议不要纠结于某个知识点,可以先往后学习。通常来讲,看到后面对知识点的讲解或者其他小节的内容后,前面不懂的知识点一般就能理解了。如果读者在动手练习的过程中遇到问题,建议多思考,厘清思路,认真分析问题发生的原因,并在问题解决后多总结。
致谢
本书的编写和整理工作由传智播客完成,主要参与人员有吕春林、陈欢、石荣新、韩永蒙。全体参与人员在这近一年的编写过程中付出了很多辛勤的汗水,在此一并表示衷心的感谢。
意见反馈
尽管我们尽了最大的努力,但书中难免会有不妥之处,欢迎各界专家和读者朋友提出宝贵意见,我们将不胜感激。您在阅读本书时,如发现任何问题或有不认同之处可以通过电子邮件与我们取得联系。
传智播客·黑马程序员
2018年5月于北京 前言Java基础入门(第2版)
文摘
第5章Java中的常用类学习目标
掌握String类和StringBuffer类的使用
了解System类和Runtime类中的常用方法
熟悉Math类和Random类的常用方法
掌握包装类和日期类的使用
掌握日期、时间格式器的使用Java提供了丰富的基础类库,通过这些类库可以提高开发效率,降低开发难度。因此,对于一个初学者来说,掌握Java基础类库中的一些常用类就显得十分重要。在基础类库中,提供了处理字符串、数学运算,以及日期和时间等功能的类,这些类是开发时常用的。本章将对基础类库中的这些常用类进行讲解。
5.1String类与StringBuffer类
在实际开发中会经常使用字符串,所谓的字符串就是指一连串的字符,它由许多单个字符连接而成。字符串中可以包含任意字符,这些字符必须包含在一对英文双引号("")之内,例如"abc"。Java中定义了String和StringBuffer两个类来封装字符串,并提供了一系列操作字符串的方法。由于它们都位于java.lang包中,因此不需要导包就可以直接使用。本节将针对String类和StringBuffer类进行详细讲解。
5.1.1String类的初始化
在操作String类之前,首先需要对String类进行初始化。在Java中,可以通过以下两种方式对String类进行初始化,具体如下。
1. 使用字符串常量直接初始化一个String对象,其语法格式如下:
String 变量名= 字符串;
在初始化字符串对象时,既可以将字符串对象的初始化值设为空,也可以初始化为一个具体的字符串,其示例如下: String str1 = null;//初始化为空
String str2 = "";//初始化为空字符串
String str3 = "abc";//初始化为abc,其中abc为字符串常量
2. 使用String的构造方法初始化字符串对象,其语法格式如下:
String 变量名 = new String(字符串);
第5章Java中的常用类Java基础入门(第2版)在上述语法中,字符串同样可以为空或是一个具体的字符串。当为具体字符串时,会使用String类的不同参数类型的构造方法来初始化字符串对象。
String类中包含多个构造方法,常用的构造方法如表51所示。表51String类的常用构造方法
方 法 声 明功 能 描 述String()创建一个内容为空的字符串String(String value)根据指定的字符串内容创建对象String(char\[\] value)根据指定的字符数组创建对象表51中列出了String类的3种构造方法,通过调用不同参数的构造方法便可完成String类的初始化。接下来通过一个案例来学习String类是如何通过构造方法来初始化字符串对象的,如例51所示。
例51Example01.java 1public class Example01 {
2public static void main(String\[\] args) {
3//创建一个空的字符串
4String str1 = new String();
5//创建一个内容为abc的字符串
6String str2 = new String("abc");
7//创建一个内容为字符数组的字符串
8char\[\] charArray = new char\[\] { 'A', 'B', 'C' };
9String str3 = new String(charArray);
10//输出结果
11System.out.println("a" + str1 + "b");
12System.out.println(str2);
13System.out.println(str3);
14}
15}
运行结果如图51所示。
《Java基础入门(第2版)》是Java语言编程的经典教材,其第一版发行近20万册。历久弥新,精心修订。全书共11章,包括Java开发环境的搭建及其运行机制、基本语法、面向对象的思想、常用API、集合、IO、GUI、JDBC、多线程和网络编程等内容。提供了208个经典案例,5个综合案例,219道经典习题。配套的数字教学资源丰富,包括精美PPT、1500道测试题、40小时教学视频。
目录
目录
第1章Java开发入门1
1.1Java概述1
1.1.1什么是Java1
1.1.2Java语言的特点2
1.2JDK的使用3
1.2.1什么是JDK3
1.2.2安装JDK3
1.2.3JDK目录介绍6
1.3系统环境变量7
1.3.1PATH环境变量7
1.3.2CLASSPATH环境变量9
1.4第一个Java程序9
1.5Java的运行机制12
1.6Eclipse开发工具13
1.6.1Eclipse概述14
1.6.2Eclipse的安装与启动14
1.6.3使用Eclipse进行程序开发17
1.7本章小结22
1.8习题23
第2章Java编程基础25
2.1Java的基本语法25
2.1.1Java的基本语法格式25
2.1.2Java中的注释26
2.1.3Java中的关键字28
2.1.4Java中的标识符28
2.2Java中的变量与常量29
2.2.1变量的定义29
2.2.2变量的数据类型30
2.2.3变量的类型转换32目录Java基础入门(第2版)2.2.4变量的作用域36
2.2.5Java中的常量37
2.3Java中的运算符41
2.3.1算术运算符41
2.3.2赋值运算符42
2.3.3比较运算符44
2.3.4逻辑运算符44
2.3.5位运算符 46
2.3.6条件运算符48
2.3.7运算符的优先级49
2.4选择结构语句50
2.4.1if条件语句50
2.4.2switch条件语句54
2.5循环结构语句56
2.5.1while循环语句56
2.5.2do…while循环语句57
2.5.3for循环语句58
2.5.4循环嵌套60
2.5.5跳转语句62
2.6数组64
2.6.1数组的定义64
2.6.2数组的常见操作69
2.6.3多维数组73
2.7本章小结75
2.8习题75
第3章面向对象(上)77
3.1面向对象概述77
3.2Java中的类与对象78
3.2.1类与对象的关系78
3.2.2类的定义79
3.2.3对象的创建与使用81
3.2.4访问控制符84
3.3类的封装85
3.3.1为什么需要封装85
3.3.2如何实现封装86
3.4方法的重载和递归87
3.4.1方法的重载87
3.4.2方法的递归89
3.5构造方法90
3.5.1构造方法的定义90
3.5.2构造方法的重载92
3.6this关键字95
3.7static关键字97
3.7.1静态变量97
3.7.2静态方法99
3.7.3静态代码块100
3.8本章小结101
3.9习题101
第4章面向对象(下)104
4.1类的继承104
4.1.1继承的概念104
4.1.2重写父类方法106
4.1.3super关键字107
4.1.4Object类110
4.2final关键字112
4.2.1final关键字修饰类112
4.2.2final关键字修饰方法113
4.2.3final关键字修饰变量114
4.3抽象类和接口116
4.3.1抽象类116
4.3.2接口117
4.4多态121
4.4.1多态概述121
4.4.2对象的类型转换122
4.5内部类126
4.5.1成员内部类126
4.5.2局部内部类127
4.5.3静态内部类128
4.5.4匿名内部类129
4.6JDK 8的Lambda表达式131
4.6.1Lambda表达式入门131
4.6.2函数式接口132
4.6.3方法引用与构造器引用134
4.7异常138
4.7.1什么是异常138
4.7.2异常的类型140
4.7.3try…catch和finally141
4.7.4throws关键字143
4.7.5throw关键字145
4.7.6自定义异常147
4.8垃圾回收148
4.9本章小结151
4.10习题152
第5章Java中的常用类154
5.1String类与StringBuffer类154
5.1.1String类的初始化154
5.1.2String类的常见操作156
5.1.3StringBuffer类162
5.2System类与Runtime类164
5.2.1System类164
5.2.2Runtime类168
5.3Math类与Random类170
5.3.1Math类170
5.3.2Random类171
5.4包装类173
5.5日期与时间类176
5.5.1Date类176
5.5.2Calendar类176
5.5.3JDK 8的日期与时间类180
5.6格式化类182
5.6.1DateFormat类182
5.6.2SimpleDateFormat类184
5.6.3DateTimeFormatter类186
5.7本章小结189
5.8习题189
第6章集合191
6.1集合概述191
6.2Collection接口192
6.3List接口193
6.3.1List接口简介193
6.3.2ArrayList集合193
6.3.3LinkedList集合195
6.4Collection集合遍历197
6.4.1Iterator遍历集合197
6.4.2foreach遍历集合199
6.4.3JDK 8的forEach遍历集合 202
6.5Set接口203
6.5.1Set接口简介203
6.5.2HashSet集合204
6.5.3TreeSet集合207
6.6Map接口212
6.6.1Map接口简介212
6.6.2HashMap集合213
6.6.3Map集合遍历216
6.6.4TreeMap集合220
6.6.5Properties集合222
6.7泛型223
6.8常用工具类225
6.8.1Collections工具类225
6.8.2Arrays工具类228
6.9聚合操作232
6.9.1聚合操作简介232
6.9.2创建Stream流对象233
6.9.3Stream流的常用方法235
6.9.4Parallel Stream(并行流)240
6.10本章小结242
6.11习题242
第7章I/O流244
7.1I/O流概述244
7.2字节流245
7.2.1字节流概述245
7.2.2字节流读写文件247
7.2.3文件的拷贝250
7.2.4字节流的缓冲区251
7.2.5字节缓冲流253
7.3字符流254
7.3.1字符流概述254
7.3.2字符流操作文件255
7.3.3转换流258
7.4File类259
7.4.1File类的常用方法260
7.4.2遍历目录下的文件262
7.4.3删除文件及目录265
7.5RandomAccessFile266
7.6对象序列化268
7.7NIO269
7.7.1NIO概述269
7.7.2Buffer(缓冲器)270
7.7.3Channel(通道)273
7.8NIO.2275
7.8.1Path接口275
7.8.2Files工具类276
7.9本章小结278
7.10习题278
第8章GUI(图形用户接口)280
8.1Swing概述280
8.2Swing顶 级 容器281
8.2.1JFrame281
8.2.2JDialog282
8.3布局管理器283
8.3.1BorderLayout284
8.3.2FlowLayout285
8.3.3GridLayout287
8.4事件处理288
8.4.1事件处理机制288
8.4.2Swing常用事件处理290
8.5Swing常用组件295
8.5.1面板组件295
8.5.2文本组件298
8.5.3标签组件301
8.5.4按钮组件302
8.5.5下拉框组件306
8.5.6菜单组件308
8.6Swing组件的整合使用——Q Q登录312
8.6.1案例分析312
8.6.2案例实现313
8.7JavaFX图形用户界面工具321
8.7.1JavaFX概述321
8.7.2JavaFX开发环境配置322
8.7.3JavaFX基础入门323
8.7.4JavaFX可视化管理工具328
8.8本章小结332
8.9习题333
第9章JDBC335
9.1什么是JDBC335
9.2JDBC常用API336
9.2.1Driver接口336
9.2.2DriverManager类336
9.2.3Connection接口336
9.2.4Statement接口337
9.2.5PreparedStatement接口337
9.2.6ResultSet接口338
9.3JDBC编程339
9.3.1JDBC的编程步骤339
9.3.2实现第一个JDBC程序341
9.4案例——使用JDBC实现Q Q登录344
9.5本章小结347
9.6习题347
第10章多线程350
10.1线程概述350
10.1.1进程350
10.1.2线程351
10.2线程的创建352
10.2.1Thread类实现多线程352
10.2.2Runnable接口实现多线程353
10.2.3Callable接口实现多线程355
10.2.4三种实现多线程方式的对比分析357
10.2.5后台线程360
10.3线程的生命周期及状态转换361
10.4线程的调度363
10.4.1线程的优先级363
10.4.2线程休眠364
10.4.3线程让步366
10.4.4线程插队367
10.5多线程同步369
10.5.1线程安全369
10.5.2同步代码块370
10.5.3同步方法372
10.5.4同步锁374
10.5.5死锁问题375
10.6多线程通信377
10.6.1问题引出377
10.6.2问题如何解决379
10.7线程池381
10.7.1Executor接口实现线程池管理381
10.7.2CompletableFuture类实现线程池管理383
10.8本章小结385
10.9习题385
第11章网络编程388
11.1网络编程基础388
11.1.1网络通信协议388
11.1.2IP地址和端口号389
11.1.3InetAddress390
11.1.4UDP与TCP协议391
11.2UDP通信392
11.2.1UDP通信简介392
11.2.2DatagramPacket393
11.2.3DatagramSocket394
11.2.4UDP网络程序395
11.2.5UDP案例——聊天程序397
11.3TCP通信402
11.3.1TCP通信简介402
11.3.2ServerSocket402
11.3.3Socket403
11.3.4简单的TCP网络程序404
11.3.5多线程的TCP网络程序406
11.3.6TCP案例——文件上传408
11.4本章小结411
11.5习题412
序言
序言
江苏传智播客教育科技股份有限公司(简称“传智播客”)是一家致力于培养高素质软件开发人才的科技公司。“黑马程序员”是传智播客旗下的高端IT教育品牌。
“黑马程序员”的学员多为大学毕业后,想从事IT行业,但各方面条件还不成熟的年轻人。“黑马程序员”的学员筛选制度非常严格,包括严格的技术测试、自学能力测试,还包括性格测试、压力测试、品德测试等,以百里挑一的残酷筛选制度确保学员质量,降低企业的用人风险。
自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研三个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,有针对性地出版了计算机系列教材60多种,制作教学视频数十套,发表各类技术文章数百篇。
前言
Java是当前流行的一种程序设计语言,因其安全性、平台无关性、性能优异等特点,自问世以来一直受到广大编程人员的喜爱。在当下的网络时代,Java技术应用十分广泛,从大型复杂的企业级开发到小型移动设备的开发,随处都可以看到Java活跃的身影。对于一个想从事Java程序开发的人员来说,学好Java基础尤为重要。
为什么要学习本书
作为一种技术入门的书籍,最重要也是最难的一件事就是要将一些非常复杂、难以理解的编程思想和问题简单化,让读者能够轻松理解并快速掌握。本书采用理论和案例相结合的编写方式,采用通俗易懂的语言和生动形象的比喻来讲解理论知识,并使用典型、翔实的案例来演示知识的运用,真正做到理论与实际相结合。同时在编写本书时,充分考虑到实际开发学习和开发需求,更加全面地选取Java基础知识点、版本,也更为细致地对重要知识点原理和案例进行演示分析。书中知识点由浅入深、由易到难,初学者能够在逐渐深入的学习过程中,体会到编写Java程序的乐趣。
如何使用本书
本书共分11章,接下来分别对各章进行简单的介绍,具体如下。
第1章主要介绍Java语言的特点、JDK的安装使用、Java运行机制以及Eclipse开发工具使用。通过本章的学习,学员需要掌握JDK的安装配置,熟悉Java开发工具的基本使用,动手实现属于自己的第一个Java程序。
第2章详细讲解Java语言的基本语法。不论任何一门语言,其基本语法都是最重要的内容。在学习基本语法时,一定要做到认真学习每一个知识点,切忌走马观花,将章节内容粗略地看一遍,这样达不到理想的学习效果。
第3、第4章详细讲解Java语言面向对象的知识,这两章的内容以编程思想为主,初学者需要花很大的精力来理解这两章的内容。可以这样讲,只有学明白了面向对象的编程思想,才算真正认识了Java这门语言。
第5~7章主要讲解Java的常用类、集合和I/O,这3章讲解的知识是今后Java开发中最常用的基础知识。读者在学习这3章内容时,应做到完全理解每个知识点,并认真完成每个案例的独自操作。
第8章详细讲解GUI(图形用户接口)中的Swing和JavaFX工具,其内容主要包括Swing组件类架构、布局管理器、事件处理机制、Swing常用组件以及JavaFX图形用户工具基本使用。通过本章的学习,读者能够熟悉GUI的思想和常用工具,同时能够完成一些基本、适用的图形界面。
第9章主要讲解JDBC的基础知识,以及如何在项目中使用JDBC实现对数据的增删改查等。通过本章的学习,读者可以了解什么是JDBC,熟悉JDBC的常用API,掌握JDBC操作数据库的步骤,还能学会如何将GUI项目与JDBC相结合进行开发。
第10章主要讲解线程的创建、线程的生命周期、线程的调度方式、多线程同步以及线程池知识。通过本章的学习,读者可以对多线程技术有较为深入的了解,并对多线程的创建、调度以及同步做到熟练掌握。
第11章主要讲解Java网络编程的相关知识,内容包括网络通信协议、DatagramSocket类、DatagramPacket类以及如何通过UDP的相关知识来实现聊天程序、TCP网络编程中相关的ServerSocket类、Socket类以及文件上传任务的实现。通过对本章的学习,读者能够了解网络编程相关的知识,并能够掌握UDP网络程序和TCP网络程序的编写。
另外,如果读者在理解知识点的过程中遇到困难,建议不要纠结于某个知识点,可以先往后学习。通常来讲,看到后面对知识点的讲解或者其他小节的内容后,前面不懂的知识点一般就能理解了。如果读者在动手练习的过程中遇到问题,建议多思考,厘清思路,认真分析问题发生的原因,并在问题解决后多总结。
致谢
本书的编写和整理工作由传智播客完成,主要参与人员有吕春林、陈欢、石荣新、韩永蒙。全体参与人员在这近一年的编写过程中付出了很多辛勤的汗水,在此一并表示衷心的感谢。
意见反馈
尽管我们尽了最大的努力,但书中难免会有不妥之处,欢迎各界专家和读者朋友提出宝贵意见,我们将不胜感激。您在阅读本书时,如发现任何问题或有不认同之处可以通过电子邮件与我们取得联系。
传智播客·黑马程序员
2018年5月于北京 前言Java基础入门(第2版)
文摘
第5章Java中的常用类学习目标
掌握String类和StringBuffer类的使用
了解System类和Runtime类中的常用方法
熟悉Math类和Random类的常用方法
掌握包装类和日期类的使用
掌握日期、时间格式器的使用Java提供了丰富的基础类库,通过这些类库可以提高开发效率,降低开发难度。因此,对于一个初学者来说,掌握Java基础类库中的一些常用类就显得十分重要。在基础类库中,提供了处理字符串、数学运算,以及日期和时间等功能的类,这些类是开发时常用的。本章将对基础类库中的这些常用类进行讲解。
5.1String类与StringBuffer类
在实际开发中会经常使用字符串,所谓的字符串就是指一连串的字符,它由许多单个字符连接而成。字符串中可以包含任意字符,这些字符必须包含在一对英文双引号("")之内,例如"abc"。Java中定义了String和StringBuffer两个类来封装字符串,并提供了一系列操作字符串的方法。由于它们都位于java.lang包中,因此不需要导包就可以直接使用。本节将针对String类和StringBuffer类进行详细讲解。
5.1.1String类的初始化
在操作String类之前,首先需要对String类进行初始化。在Java中,可以通过以下两种方式对String类进行初始化,具体如下。
1. 使用字符串常量直接初始化一个String对象,其语法格式如下:
String 变量名= 字符串;
在初始化字符串对象时,既可以将字符串对象的初始化值设为空,也可以初始化为一个具体的字符串,其示例如下: String str1 = null;//初始化为空
String str2 = "";//初始化为空字符串
String str3 = "abc";//初始化为abc,其中abc为字符串常量
2. 使用String的构造方法初始化字符串对象,其语法格式如下:
String 变量名 = new String(字符串);
第5章Java中的常用类Java基础入门(第2版)在上述语法中,字符串同样可以为空或是一个具体的字符串。当为具体字符串时,会使用String类的不同参数类型的构造方法来初始化字符串对象。
String类中包含多个构造方法,常用的构造方法如表51所示。表51String类的常用构造方法
方 法 声 明功 能 描 述String()创建一个内容为空的字符串String(String value)根据指定的字符串内容创建对象String(char\[\] value)根据指定的字符数组创建对象表51中列出了String类的3种构造方法,通过调用不同参数的构造方法便可完成String类的初始化。接下来通过一个案例来学习String类是如何通过构造方法来初始化字符串对象的,如例51所示。
例51Example01.java 1public class Example01 {
2public static void main(String\[\] args) {
3//创建一个空的字符串
4String str1 = new String();
5//创建一个内容为abc的字符串
6String str2 = new String("abc");
7//创建一个内容为字符数组的字符串
8char\[\] charArray = new char\[\] { 'A', 'B', 'C' };
9String str3 = new String(charArray);
10//输出结果
11System.out.println("a" + str1 + "b");
12System.out.println(str2);
13System.out.println(str3);
14}
15}
运行结果如图51所示。
ISBN | 9787302511410 |
---|---|
出版社 | 清华大学出版社有限公司 |
作者 | 黑马程序员 |
尺寸 | 16 |