java 学习笔记

第一部分 Java基础知识

第1章 Java简介

  1. Java简介

  2. JDK的安装与配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //解压到指定目录
    [root@dev app]# tar xzf jdk-8u131-linux-x64.tar.gz
    [root@dev app]# mv jdk1.8.0_131 /mnt/app/java

    //对程序设置用户权限
    [root@dev app]# chown -R root.root /mnt/app/java

    //将java加入系统环境变量
    [root@dev app]# echo 'JAVA_HOME=/mnt/app/java' | tee /etc/profile.d/java.sh
    JAVA_HOME=/mnt/app/java
    [root@dev app]# echo 'JRE_HOME=${JAVA_HOME}/jre' | tee -a /etc/profile.d/java.sh
    JRE_HOME=${JAVA_HOME}/jre
    [root@dev app]# echo 'CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib' | tee -a /etc/profile.d/java.sh
    CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    [root@dev app]# echo 'export PATH=${JAVA_HOME}/bin:$PATH' | tee -a /etc/profile.d/java.sh
    export PATH=${JAVA_HOME}/bin:$PATH
    [root@dev app]# source /etc/profile

    //验证
    [root@dev app]# java -version
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
  3. 第一个Java程序:永远的”Hello World !”

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    //编写java代码
    [root@dev java]# vim HelloWorld.java
    public class HelloWorld {
    public static void main(String[] args) {
    System.out.println("Hello world!");
    }
    }

    //编译执行文件
    [root@dev java]# javac HelloWorld.java
    [root@dev java]# ls
    HelloWorld.class HelloWorld.java

    //执行编译后文件
    [root@dev java]# java HelloWorld
    Hello world!

    注意:
    1.public class HelloWorld
    定义了一个类,类是"public"公共类型的,类名为"HelloWorld"
    2.Java中主类名应该和要保存的Java文件名相同,也就是说,这里定义的类名是"HelloWorld",则文件应该保存为"HelloWorld.java"
    3.public static void main(String[] args)
    Java中的主运行方法,它和C/C++中的main()作用是一样的,就是所有的程序都从"main()"中开始执行.要执行Java程序,必须有一个包括主运行方法的类.
    4.System.out.println("Hello world");
    System.out.println()是Java.lang包的一个方法,用来将字串"Hello world"输出到命令行窗口
  4. CLASSPATH

    1
    2
    3
    4
    5
    6
    1.PATH
    PATH环境变量: 作用是指定命令搜索路径,在命令行下面执行命令(如javac编译java程序时),它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件(如javac/java/javadoc等),设置好PATH变量后,就可以在任何目录下执行javac/java等工具了
    2.CLASSPATH
    CLASSPATH是javac编译器的一个环境变量.作用是指定类搜索路径,要使用已经编写好的类,前提是能够找到它们,JVM就是通过CLASSPATH来寻找类的.我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录"."也必须加入到该变量中
    3.JAVA_HOME
    JAVA_HOME环境变量: 它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk

第2章 程序基本概念

2.1 Java的注释 17
2.2 标识符与关键字 19
2.3 数据类型划分 20
2.3.1 整型 22
2.3.2 浮点数 27
2.3.3 字符型 29
2.3.4 布尔型 31
2.3.5 String型数据 31
2.4 运算符 33
2.4.1 关系运算符 36
2.4.2 数学运算符 37
2.4.3 三目运算 40
2.4.4 逻辑运算 41
2.4.5 位运算 44
2.5 程序逻辑控制 46
2.5.1 分支结构 47
2.5.2 循环结构 52
2.5.3 循环控制 58
2.6 方法的定义及使用 59
2.6.1 方法的基本概念 59
2.6.2 方法的重载 63
2.6.3 方法的递归调用 65

第二部分 面向对象
第3章 面向对象基本概念 70
(视频898分钟,例题135个,提示37个,注意12个,问答10个,技术穿越17个,面试题3个)
3.1 面向对象简介 70
3.2 类与对象 72
3.2.1 类与对象的基本概念 72
3.2.2 类与对象的基本定义 73
3.2.3 引用数据的初步分析 78
3.3 封装性初步分析 82
3.4 构造方法 85
3.5 匿名对象 90
3.6 简单Java类 91
3.7 数组 93
3.7.1 数组的基本概念 93
3.7.2 二维数组 97
3.7.3 数组与方法参数的传递 98
3.7.4 数组操作方法 108
3.7.5 对象数组 109
3.8 String类的基本概念 111
3.8.1 String类的两种实例化方式 111
3.8.2 字符串的比较1 112
3.8.3 字符串常量就是String的匿名
对象 114
3.8.4 两种实例化方式的区别 115
3.8.5 字符串一旦定义则不可改变 118
3.9 String类的常用方法 120
3.9.1 字符与字符串 122
3.9.2 字节与字符串 125
3.9.3 字符串的比较2 126
3.9.4 字符串的查找 127
3.9.5 字符串的替换 129
3.9.6 字符串的截取 130
3.9.7 字符串的拆分 130
3.9.8 其他方法 133
3.10 this关键字 136
3.10.1 调用本类属性 136
3.10.2 调用本类方法 138
3.10.3 表示当前对象 143
3.11 引用传递 144
3.11.1 引用传递基本概念 144
3.11.2 引用传递实际应用 148
3.12 数据表与简单Java类映射 153
3.13 对象比较 156
3.14 static关键字 160
3.14.1 static定义属性 160
3.14.2 static定义方法 162
3.14.3 主方法 164
3.14.4 static的实际应用 165
3.15 代码块 167
3.15.1 普通代码块 167
3.15.2 构造块 168
3.15.3 静态块 168
3.16 内部类 170
3.16.1 基本概念 170
3.16.2 使用static定义内部类 174
3.16.3 在方法中定义内部类 175
3.17 链表 177
3.17.1 链表的基本形式 178
3.17.2 链表的基本雏形 181
3.17.3 开发可用链表 184
3.17.4 使用链表 194
本章小结 200
课后习题 201
第4章 面向对象高级知识 204
(视频373分钟,例题96个,提示23个,注意9个,问答9个,技术穿越6个,面试题4个)
4.1 继承性 204
4.1.1 继承问题的引出 204
4.1.2 继承的实现 205
4.1.3 继承的限制 207
4.2 覆写 211
4.2.1 方法的覆写 211
4.2.2 属性的覆盖 217
4.3 继承案例 218
4.3.1 开发数组的父类 219
4.3.2 开发排序类 221
4.3.3 开发反转类 222
4.4 final关键字 223
4.5 多态性 224
4.6 抽象类 230
4.6.1 抽象类定义 230
4.6.2 抽象类的相关限制 232
4.6.3 抽象类应用——模板设计模式 236
4.7 接口 240
4.7.1 接口的基本定义 240
4.7.2 接口的实际应用——标准 245
4.7.3 接口的应用——工厂设计模式(Factory) 247
4.7.4 接口的应用——代理设计模式(Proxy) 250
4.7.5 抽象类与接口的区别 252
4.8 Object类 254
4.8.1 Object类的基本定义 254
4.8.2 取得对象信息:toString() 255
4.8.3 对象比较:equals() 256
4.8.4 Object类与引用数据类型 257
4.8.5 修改链表 259
4.9 综合练习:宠物商店 264
4.10 匿名内部类 269
4.11 基本数据类型的包装类 270
4.11.1 装箱与拆箱操作 271
4.11.2 数据类型转换 274
本章小结 277
课后习题 278
第5章 包及访问控制权限 282
(视频89分钟,例题22个,提示8个,注意2个,问答2个,技术穿越1个,面试题1个)
5.1 包的定义 282
5.2 包的导入 283
5.3 系统常见包 287
5.4 jar命令 288
5.5 访问控制权限 289
5.6 命名规范 291
5.7 单例设计模式(Singleton) 291
5.8 多例设计模式 295
本章小结 297
课后习题 297
第6章 异常的捕获及处理 298
(视频83分钟,例题18个,提示5个,注意1个,问答4个,技术穿越2个,面试题2个)
6.1 认识异常 299
6.2 处理异常 300
6.3 异常的处理流程 304
6.4 throws关键字 308
6.5 throw关键字 309
6.6 异常处理的标准格式 310
6.7 RuntimeException类 312
6.8 assert关键字 313
6.9 自定义异常 314
本章小结 315
课后习题 315
第7章 Eclipse开发工具 317
(视频75分钟,例题5个,提示6个,注意1个)
7.1 Eclipse简介 317
7.2 JDT的使用 319
7.3 JUnit的使用 329
本章小结 331
第8章 Java新特性 332
(视频175分钟,例题56个,提示13个,注意1个,问答2个,技术穿越5个,面试题1个)
8.1 可变参数 333
8.2 foreach循环 335
8.3 静态导入 335
8.4 泛型 337
8.4.1 泛型的引出 337
8.4.2 通配符 342
8.4.3 泛型接口 346
8.4.4 泛型方法 347
8.5 枚举 348
8.5.1 认识枚举 348
8.5.2 定义其他结构 351
8.5.3 枚举的实际作用 354
8.6 Annotation 356
8.6.1 准确的覆写:@Override 357
8.6.2 声明过期操作:@Deprecated 358
8.6.3 压制警告:@Suppress Warnings 359
8.7 接口定义加强 359
8.8 Lambda表达式 361
8.9 方法引用 365
8.10 内建函数式接口 368
本章小结 370
课后习题 371
第三部分 Java高级编程
第9章 多线程 373
(视频167分钟,例题24个,提示10个,注意2个,问答2个,技术穿越1个,面试题6个)
9.1 线程与进程 373
9.2 多线程实现 374
9.2.1 继承Thread类 374
9.2.2 实现Runnable接口 377
9.2.3 多线程两种实现方式的区别 378
9.2.4 利用Callable接口实现多线程 382
9.2.5 线程的操作状态 384
9.3 多线程常用操作方法 385
9.3.1 线程的命名与取得 385
9.3.2 线程的休眠 387
9.3.3 线程优先级 388
9.4 线程的同步与死锁 390
9.4.1 同步问题的引出 390
9.4.2 同步操作 392
9.4.3 死锁 395
9.5 线程间的经典操作案例——生产者与消费者案例 397
9.5.1 问题的引出 397
9.5.2 解决数据错乱问题 399
9.5.3 解决数据重复问题 401
9.6 线程的生命周期 403
本章小结 405
课后习题 405
第10章 Java常用类库 407
(视频364分钟,例题60个,提示25个,注意6个,问答8个,技术穿越2个,面试题4个)
10.1 StringBuffer类 407
10.2 Runtime类 412
10.3 System类 416
10.4 对象克隆 419
10.5 数字操作类 420
10.5.1 Math类 420
10.5.2 Random类 421
10.5.3 大数字操作类 423
10.6 日期处理类 425
10.6.1 Date类 426
10.6.2 日期格式化:SimpleDateFormat 427
10.6.3 Calendar类 429
10.7 比较器 430
10.7.1 Arrays类 430
10.7.2 比较器:Comparable 432
10.7.3 数据结构——BinaryTree 434
10.7.4 挽救的比较器:Comparator 437
10.8 正则表达式 440
10.8.1 问题引出 440
10.8.2 正则标记 442
10.8.3 String类对正则的支持 443
10.8.4 java.util.regex包支持 447
10.9 反射机制 449
10.9.1 认识反射 449
10.9.2 Class类对象实例化 450
10.9.3 反射实例化对象 451
10.9.4 使用反射调用构造 454
10.9.5 反射调用方法 457
10.9.6 反射调用成员 459
10.10 国际化 461
10.10.1 使用Locale类定义语言环境 462
10.10.2 利用ResourceBundle读取资源文件 463
10.10.3 多资源读取 465
本章小结 466
课后习题 467
第11章 Java IO编程 469
(视频307分钟,例题42个,提示27个,注意2个,问答4个,技术穿越4个)
11.1 文件操作类:File 469
11.2 字节流与字符流 474
11.2.1 字节输出流:OutputStream 475
11.2.2 字节输入流:InputStream 479
11.2.3 字符输出流:Writer 484
11.2.4 字符输入流:Reader 486
11.2.5 字节流与字符流的区别 488
11.3 转换流 489
11.4 案例:文件复制 491
11.5 字符编码 493
11.6 内存流 495
11.7 打印流 498
11.7.1 打印流设计思想 499
11.7.2 打印流 501
11.7.3 PrintStream类的改进 502
11.8 System类对IO的支持 503
11.8.1 错误输出:System.err 504
11.8.2 信息输出:System.out 505
11.8.3 系统输入:System.in 506
11.9 字符缓冲流:BufferedReader 508
11.10 扫描流:Scanner 511
11.11 对象序列化 514
11.11.1 序列化接口:Serializable 515
11.11.2 实现序列化与反序列化 515
11.11.3 transient关键字 517
本章小结 518
课后习题 519
第12章 Java网络编程 521
(视频43分钟,例题5个,提示1个,技术穿越1个)
12.1 网络编程 521
12.2 开发第一个网络程序 522
12.3 网络开发的经典模型——Echo程序 524
本章小结 527
课后习题 528
第13章 Java类集框架 529
(视频204分钟,例题34个,提示15个,注意3个,问答3个,技术穿越2个,面试题5个)
13.1 类集框架简介 529
13.2 单对象保存父接口:Collection 530
13.3 List子接口 531
13.3.1 新的子类:ArrayList 532
13.3.2 旧的子类:Vector 535
13.4 Set子接口 536
13.4.1 关于数据排序的说明 537
13.4.2 关于重复元素的说明 539
13.5 集合输出 541
13.5.1 迭代输出:Iterator 541
13.5.2 双向迭代:ListIterator 544
13.5.3 foreach输出 545
13.5.4 Enumeration输出 546
13.6 偶对象保存:Map接口 547
13.6.1 利用Iterator输出Map集合 550
13.6.2 自定义Map集合的key类型 551
13.7 Stack子类 553
13.8 Properties子类 554
13.9 Collections工具类 556
13.10 数据流 557
13.10.1 数据流基础操作 557
13.10.2 MapReduce 564
本章小结 567
课后习题 568
第14章 Java数据库编程 569
(视频121分钟,例题15个,提示3个,注意3个)
14.1 JDBC简介 569
14.2 连接Oracle数据库 570
14.3 Statement接口 572
14.3.1 数据更新操作 573
14.3.2 数据查询 576
14.4 PreparedStatement接口 578
14.4.1 Statement接口问题 578
14.4.2 PreparedStatement操作 579
14.5 批处理与事务处理 585
本章小结 587
课后习题 587
第四部分 设计开发
第15章 DAO设计模式 590
(视频163分钟,例题11个,提示10个,技术穿越1个)
15.1 程序设计分层 590
15.2 实例分析 592
15.3 项目准备 593
15.3.1 数据库连接类 594
15.3.2 开发Value Object 596
15.4 开发数据层 598
15.4.1 开发数据层操作标准 598
15.4.2 数据层实现类 601
15.4.3 定义数据层工厂类——DAOFactory 605
15.5 开发业务层 606
15.5.1 开发业务层标准——IEmpService 606
15.5.2 业务层实现类 609
15.5.3 定义业务层工厂类——ServiceFactory 612
15.6 代码测试 613
15.6.1 调用测试 613
15.6.2 利用JUnit进行测试 614
本章小结 617
附录 综合测试 618
测试试卷一 618
测试试卷二 623
测试试卷三 631