许多书籍对于 JVM/ JRE/JDK的说明,通常以极短的篇幅介绍,就是在短短几页中,请使用者依书中步骤安装与设定PATH、 CLASSPATH后,就开始介绍Java程序语言,而许多人到了业界后就开始使用IDE( Integrated Development Environment,
代劳所有JDK细节。这么做的结果就是,在IDE中遇到与JDK相关的问题,就完全不知道如何解决。
JVM/REJDK并不是用短短几页就可以说明,若没有“JVM是Java程序唯一认识的操作系统,其可执行文件为 class文档”的重要观念,就无法理解PATH与 CLASSPATH并非同一层级的环境变量,JDK中许多指令与选项,其实都可以对应至IDE中某个设定与操作。对JVM/ JRE/JDK有足够的认识,对IDE中相关选项就不会有疑问,也不会换个IDE就不知所适,或没有DE就无法撰写程序。
2.理解封装、继承、多态
对于Java程序语言,if.else、for、 while、 switch等流程语法早已是必须熟练的基础更重要的是,Java支持面向对象( Object Oriented),你必须理解面向对象中最重要的封装 Encapsulation)、继承( (nheritance)、多态( Polymorphism)概念,以及如何用Java相关语法来实现
许多人撰写Java程序,并没有善用其支持面向对象的特性,问到何谓封装而无法回答(甚至回答定义类即为封装),滥用Java继承语法,不懂多态而不知如何运用API文件(更别说运用多态设计程序了),最后的结果就是沦于死背API文件、使用“复制、粘贴”大法来撰写程序,整个应用程序架构杂乱无章而难以维护
3.掌握常用 Java SE API架构
ava并非只是程序语言,还带有庞大的各式链接库( Library),对初学者而言,首要是掌握常用的 Java SE API.,例如异常( Exception)、集合( Collection)、输入/输出串流( Stream)、线程( Thread)等。学习这些标准API,绝不要沦于死背,应先掌握API在设计时的封装、继承、多态架构。学习相关链接库或API,先理解主要架构绝对是必要的,这样才不会沦于死背API或抄写范例的窘境。更进一步地,还可以从API中学习到良好设计的观念,有了这样的好习惯以后对新的API或链接库就能更快掌握如何使用甚至改进
4.学习容器观念
在步入 Java EE领域之后,经常接触到容器( Container)的观念,许多人完全以API层次来使用 Java EE相关组件,这是不对的。容器就操作层面来说,就是执行于JVM上的Java应用程序;从抽象层面来说,就是你的应用程序沟通、协调相关资源的系统。
初次接触容器的开发人员会觉得容器很抽象。以实际的例子来说,通常初学者步入JavaEE,会从学习 Servlet/JSP开始,而 Servlet/JSP是执行于Web容器之中,这是学习容器观念时不错的开始,你必须知道“Web容器是 Servlet/JSP唯一认识的HTTP服务器,是使用Java撰写的应用程序,运行于JM之上”。如果希望用 Servlet/JSP撰写的Web应用程序可以正常运作,就必须知道 Servlet/JSP如何与Web容器沟通,Web容器如何管理 Servlet/JSP的各种对象等问题
容器的观念无所不在, Applet会执行于 Applet容器中,因此相关资源受到 Applet容器的管理与限制, Servlet/JSP执行于Web容器中,EJB执行于EJB容器中,Java应用程序客户端执行于应用程序客户端容器中,如图1.6所示。不理解组件如何与容器互动,就无法真正使用或理解组件的行为。
5.研究开放原始码项目
Java不仅是程序语言,也是个标准,在共同标准下有不同的运行方式,在java领域的许多操作都是以开放原始码的方式存在,只要你有兴趣,可以下载原始码了解运行方式,从中了解甚至吸收他人设计、实现产品的技巧或理念
许多基于Java各标准平台发展出来的产品也值得研究,如测试框架( Framework)、Web框架、持久层( Persistance)框架、对象管理容器等,这些产品补足标准未涵盖之处,各有其设计上优秀与精良之处,有些更进而回馈至Java而成为标准之一,重点是它们也多以开放原始码的方式存在,让开发人员可以使用、研究甚至参与改进.
6.学习设计模式与重构
在程序设计上,“经验”是最重要的,在经验传承上,归纳而言,无非就是“如何根据需求做出好的设计”“如何因应需求变化调整现有程序架构”,对于前者,流传下来的设计经验就是设计模式( Design Pattern),对于后者,流传下来的调整手法就是重构 Refactor)“如果我当初就这么设计,现在就不会发生这个问题了!”这种对话应该很熟悉,“当初就这么设计”就是所谓设计模式。“如果我当初先这么改,再那么改,就不会把程序改到烂了!”这种对话也经常听到,“当初先这么改,再那么改”就是所谓重构。
无论好的设计还是不好的设计,都要有经验传承。经验可以口耳相传,可以从原始码中观摩,也可以从书籍或网络上优秀的技术文件中学得。对于初学者,从书籍或网络上优秀的技术文件学习设计模式与重构,是积累经验的快捷方式
7.熟悉相关开发工具
除了累积足够的实力与基础,善用工具是必要的,开发工具可以避免烦琐的指令、减少重复性的操作、提示可用的API、自动产生程序代码、降低错误的发生,甚至执行各种自动化的测试、报告产生与发送邮件等任务。有些开发人员鄙视开发工具,这是不必要的,两个实力相同的开发人员撰写相同的应用程序,使用良好开发工具的人必然有较好的效率在Java领域难能可贵的,是存在不少优秀的开发工具,而且多以开放架构、开放原始码的方式存在,如 Eclipse IDE、 Netbeans IDE都是相当不错的选择。还可以搭配Ant构建工具、 Maven或 Gradle项目工具等一同使用,大大地提升开发人员的产能。
建议初学Java的人,可以挑选一种开发工具来熟悉。所谓熟悉,不是指“下一步要按哪个按钮、接下来要执行哪个菜单”,而是指这些开发工具相关操作是为了代劳你手动执行哪些指令,开发工具中的某些选项是为了代劳你设定哪些变量,错误提示原本是来自JDK的什么信息等。以这样的过程来熟悉开发工具,才能善用开发工具提升产能,而不是受制于开发工具,这样就算换了另一套开发工具,也可以在最短时间内上手