北理工《Java程序设计》
课程教学资源索引(2013版,含《Android开发基础》)
说明:
“Java程序设计”是北京理工大学计算机学院开设的选修课程,主讲教师是金旭亮。
本教学资源主要包括上课所使用之PPT(己转为PDF格式)和范例源码,以RAR格式打包上传至CSDN下载频道(请点击每讲标题下载)。
2013版的课件是我经重新调整并设计的,大大增强了编程技能训练的内容,同时在内容安排上更加注重循序渐进。
这些课件在设计时力图同时支持课堂教学及课后学生自学,基本模式是:我在课堂上只讲授重点内容,并现场展示编程开发的过程和技术关键点,以及与之相关的计算机理论知识和内部运作机理,学生在课后应该完成以下几件事:
(1)运行并仔细阅读每个示例,通过修改示例代码扎实掌握Java面向对象编程的语法与相关知识。
(2)完成课件中所布置的作业(非常重要!),这些作业都经过了仔细的设计与安排,完成它们是培养Java编程基本技能所必需。除非你打算随意地在计算机专业混个毕业拉倒,否则,请一定要动手完成这些编程练习。遇到困难,一是找同学讨论交流,二是使用搜索引擎,最后一招,找老师。
本课件适用对象:学过C语言,对编程有兴趣,打算日后从事软件开发工作,不要求有面向对象编程经验。
由于这些课件还在不断地完善过程中,因此会随着课程的进展而陆续发布。想迅速学习JavaSE技术的同学,可以参看我2011年发布的老版课件,新版课件是在老版课件的基础上扩展、修改和完善而来的,80%的内容一致。
=====================================================================================
本课件所有代码基于JDK7,在Eclipse 4.X和Netbeans 7.X中测试通过
Note:本部分内容极为基础,主要是介绍Java结构化编程的相关语法,涉及到一点面向对象知识,有C语言基础的同学会学得很多。
对于编程基础不扎实的同学,请认真地完成本部份中所有的编程练习。
这部分上课是一带而过,只讲其中的一些要点,完整内容同学们需自学。
第1讲 Java导论与Java开发环境
包括两个PPT:
(1)Java导论与Java开发环境:介绍Java开发的基础知识,学会安装相应的软件并正确地配置好它们。
(2)Eclipse初步:学会使用Eclipse编写Java应用程序。
包括两个PPT:
(1)Java Application基础:这是最简单的Java程序类型,本课程大部分实例是此类型,用它来学习Java非常合适。
(2)Java Applet基础:Java Applet是运行在浏览器环境中的Java应用程序,不过此技术在实际中很少用,此讲同学们只需浏览一下,只要知道Applet是怎么回事,如何运行它就够了。
包括两个PPT:
(1)Java语法基础,介绍数据类型、变量、运算符等基础知识,注意与C的区别。
(2)控制结构:Java分支与循环语法。
这一讲的重点是Java方法重载的语法特性,以乃训练递归的编程技巧。另外,本讲还介绍了Java中日期相关的类型、如何处理大数字以及浮点数比较等内容。本讲包容不少的编程练习,主要目的是训练最基本的编程技能。
本部分主要介绍Java实现面向对象编程(OOP)的基本方法,其中所介绍的OOP思想其实是独立于Java语言的,是现代软件工程师的基本功。需要下功夫扎实掌握,打好OOP基础非常关键,不然,在Java技术领域将行之不远。
本讲主要介绍如何在Java中设计一个类的基础知识,包括类的初始化方法,“==”的含义,this的用法,装箱与拆箱等,其中,理解对象变量的含义是关键。本讲还介绍了javap反汇编.class文件的基本方法。
本讲属于Java面向对象编程最为基础的内容,必须牢固掌握。
包类似于C++的namespace,主要用于解决同名冲突和实现代码重用,这部分的关键是要掌握如何定义包,如何使用包,包与文件系统的路径有何关系,请务必在命令行程序中实验成功如何运行放在包中的某个Java类中的main()方法。另外,本讲还介绍了Jar包的用途和制作方法。
Java的可复用组件多以Jar包的形式提供,因此,把握本节内容,对于实际开发很重要。
本讲包括两部份内容:
(1)字符串。在开发中,String算是最常用的数据类型了,它的最重要特点是String对象内容只读,另外,施加于两个String对象的“==”和"equas()",其含义是不同的。在比较大的循环中应该避免进行过多的字符串拼接操作,的确需要时,可以考虑使用StringBuffer或StringBuilder类取代。这些是String部分应该掌握的重点内容。
(2)正则表达式。本讲PPT只是介绍了正则表达式的基础知识,有专门介绍正则表达式的技术书籍,感兴趣的同学们可以在课外进一步地深入学习。强调一下,正则表达式在开发中非常有用,同学们必须具备基本的编写正则表达式的能力。
本讲的重点是理解对象数组,特别要注意在课上介绍过的它的内存分配模型。
这一讲是经典的面向对象编程内容,包容相当多的且非常重要而基础的知识与技能,难点也不少:
(1)重点注意子类父类字段与方法同名时出现的种种现象,并能解释其原因。
(2)不可变的类有什么好处?思索:为何String类要设计成只读的?
(3)理解多态这一概念,并体会多态给开发所带来的正面与负面影响。
请注意教师在课堂上现场编程演示和分析的那些代码示例。
本讲介绍了Java异常处理的基础知识。初学者往往对异常处理重视不够,事实上,在开发中带来麻烦的往往就是未经处理的各种异常,另外,用户往往也会因为你的程序中有未捕获的异常而对程序产生不满甚至立即卸载它。要想开发出健壮的应用,就必须认真掌握这部份知识。本讲中介绍了“捕获JDK异常转换为业务逻辑异常”的异常处理策略,这在多层应用中很有用,需要特别注意一下。
Java最初在设计时是没有考虑要支持泛型的,只是后来随着Java应用越来越广,开发者有这个需求,才加入了泛型特性,但由于JVM不好改,所以javac编译器对泛型代码采用了“擦除”的方式进行编译,这是Java泛型技术的重要特点。本讲介绍了Java泛型编程语法特性,JDK中广泛使用了泛型,泛型知识对掌握Java技术很重要。
本讲介绍Java内部类语法,学习时注意其应用场景。
这部分重点介绍了Java编程实现对象比较、对象组合和对象复制的基本方式,是面向对象编程必须掌握的基础知识。
数据结构与算法对于开发而言属“内功”,很重要,也是许多公司面试题的重要内容。计算机专业学生都学过《数据结构》,因此本讲的重点在于如何用Java实现它们,并给出不少编程练习,许多练习进一步扩充就可以作为本课程大作业的内容。动手完成本讲所布置的编程作业,有助于培养同学们基本的Java面向对象编程技能。
JDK中包容数十种各种类型的对象集合,还有一堆的各种接口,给人的感觉相当混乱。在实际开发中,一定要花点时间依据具体应用场景选择合适的对象集合,并且要注意避开这些对象集合中隐藏的一些陷阱,因此,在使用它们之间进行充分的测试是有必要的,确保你真正地把握了要用的这些集合的特性。本讲内容较多,对JDK中最主要的一些集合类型进行了介绍,并提供了数十个实例展示它们的用法。本讲最后还给出了一些编程题目,同学们应动手完成它们。
在本部分中,将集中探讨一些JDK中的特定技术领域。这些技术领域在实际开发中被频繁地应用。
文件可用于存储应用程序数据,而流则是Java读取文件的基本方式。本讲介绍了JDK中与文件相关的类和组件的用法,包容大量实例,许多能直接应用于开发中。
序列化技术主要用于两个场景:(1)将对象当前状态保存到文件等持久介质中(2)在网络中远程传输对象到另一台机器上。在实际开发中,把对象进行序列化是非常常见的。本PPT主要介绍了Java中如何把对象以二进制形式序列化到文件中的方法,仅仅只涉及Java序列化技术领域的一部分。
所谓反射,就是在程序运行时通过动态查询Java组件的类型信息,完成对象创建、方法调用等功能。反射为设计开发支持插件的软件系统所必需。有大量的Java框架使用了反射技术。本讲分为三部分:
(1)反射:介绍Java反射的基础知识
(2)JavaBean:JavaBean其实可以看成是一种“遵循标准”而实现的类,Java平台为访问它们提供了额外的支持,JavaBean在Java EE中应用得比较多。
(3)注解:Java中的“注解(annotation)”指一些附加在代码之上的,以“@”打头的“小标签”,比如“@Override”,通过使用它们,能够在不更改类源代码的前提下,给类附加特定的功能或信息。各种Java框架和技术,比如JUnit之类,都大量地应用了它们。
本讲包容相当丰富的内容,共分为5个子部分:
(1) Java GUI设计基础:介绍了Java GUI设计中的一些基础知识和术语,本部分需重点注意“GUI程序设计的基本步骤”,理解“容器”、“控件”、“布局管理器”、“事件”几个重要概念。
(2) 使用GUI控件:包容大量的例子,介绍各个具体控件的使用方法。
(3) 容器布局管理器:介绍Swing界面设计中常用的几种布局管理器的用法,包容相应实例。
(4) Java事件处理模型:此部分极为重要,是Java GUI界面设计技术的核心所在,其所介绍的内容许多都可以用在Android上,此部分还包容大量的实例,可供同学们进行课程设计时参考。请同学们务必扎实掌握本部分内容。
(5)Java GUI编程技能训练:提供了一些编程场景,完成这些编程任务,能让你的Java开发能力提升一截。
本讲介绍JDK中所包容的2D绘图功能,包括各种绘图对象及绘图方法的介绍,还介绍了分形。本讲设计了丰富的编程练习。
在多核CPU大行于世的时代,多线程编程是每一个软件开发者的必备技能。经过多年的持续完善,JDK中包容了丰富的多线程组件,能满足绝大多数开发需求。本讲分为三部分,每部分都包容着重要的内容:
(1)多线程技术基础:介绍了进程、线程的基础知识,如何编写多线程代码,如何控制线程的执行过程,线程组,Thread Executor Framework以及GUI程序中的多线程等重要内容。
(2)线程同步:本部分介绍了Java同步方法、同步代码块的使用方法,如何协调线程之间的协作关系,锁,还有JDK所提供的各种线程同步对象和线程安全的集合对象。
(3)多线程部分练习手册:提供了多道由浅入深的编程训练题,完成它们能帮助同学们提升自己的开发能力。
Java多线程技术是Java学习中的难点,也是各公司面试题中经常出现的技术领域。
此部分请同学们务必下功夫掌握。
Android可以说是当前非常引人注目的一个技术领域,并且由于它的开放性造就了一个红火的社区,成为移动互联网时代最重要的智能手机操作系统之一。
Android应用主要采用Java开发,并且Google为其提供的组件库也与Java SE的JDK高度一致,因此,大家通常把它划归到Java这一技术阵营。
鉴于Android技术的实用性,我在《Java程序设计》这门课的教学内容中加入了Android的内容,其目的有二:
(1)激发学生学习Java的兴趣,倡导“学以致用”的理念
(2)掌握Android技术于学生具有很强的实用性,对其就业有直接帮助。
由于学时有限,因此,我计划只讲授Android中最为关键的技术点,其目的是为学生进一步深入学习和探索Android技术打下一个基础,引导他们进入Android开发的大门。至于学生能否成长为一名优秀的手机软件开发工程师,那就看他们自己的努力了。
“师傅领进门,修行靠个人”。
这一讲从零开始,介绍Android平台的基础知识,包容三部分:
(1)Android概述:介绍Android是什么,包容哪些东西,……
(2)搭建Android开发环境:如何基于JavaSE和Eclipse构建开发Android应用的环境。
(3)Eclipse开发Android应用全过程:展示典型的使用Eclipse开发Android应用的步骤和相关基础知识。
在手机上,你所看到的每一个应用界面都是Activity,本讲极为重要,是开发Android应用基础中的基础,能否掌握好它们,决定了你能否迈入Android开发的大门。
(1)Activity基础:此讲中最重要的是后半部分有关Activity状态、生命周期的内容,务必认真理解。
(2)多Activity开发:只有一个Activity的应用并不常见,本讲介绍了多Activity开发中最基础的编程技巧,重点放在各Activity间如何交换信息上,其中有关Back stack和Activity启动模式的内容是难点,初学不易把握,请同学们仔细阅读课件并运行示例,这个难点必须突破。
(3)Intent初步:灵活用好Intent是Android开发中的重要技巧。本部分重点解析Android中Intent的各个组成部分及作用,是进一步深入学习的基础。
对于Android智能手机应用而言,UI界面的重要性怎么强调也不过份,本讲介绍了以下内容:
(1)基础布局控件:View和ViewGroup的关系,各种布局控件的使用方法,控件的隐藏与显示,……
(2)常见界面元素:各种菜单,对话框,状态栏提示的实现技巧。
(3)动态界面切换:介绍如何依据具体运行场景,动态地更换UI界面元素的基本技巧。
(4)复合控件:介绍如何把多个基本控件组合起来以实现代码复用。
(5)手势操作:介绍使用手指点按、拖动、缩放的实现方法
这些内容在实际开发中天天要打交道,为Android应用开发所必须。
提示:建议学习本部分前先掌握《Java程序设计》课程的第19讲内容。
本讲介绍了Android多线程领域中的实用技术,包括以下内容:
(1)如果推送数据到UI线程
(2)定时调用
(3)AsyncTask组件的使用方法
(4)Looper和Handler
每个主题都关联着一个可运行的Android项目,帮助同学们掌握技术关键点。
提示:学习本部分前,先掌握《Java程序设计》课程的第21讲内容。
(other ppt ,coming soon……)