现在的位置: 首页 > 综合 > 正文

Java学习从这里开始

2014年05月21日 ⁄ 综合 ⁄ 共 6426字 ⁄ 字号 评论关闭

           一个语言的诞生有其目的,因为这个目的而成就了语言的主要特性,探索Java的历史演进,对于掌握Java特性与各式可用资源,着实有其帮助。

          从1995年至今,Java已经超过15个年头,经过这些年的演进,Java已不仅是个程序语言,也代表了解决问题的平台(Platform),更代表了原厂、各个厂商、社群、开发者与用户沟通的成果。若仅以程序语言的角度来看待Java,正如冰山一角,你仅看到Java身为程序语言的一部分,而没看到Java身为程序语言之外,更可贵也更为庞大的资源。

           java不仅是程序语言,还是标准规范,每个标准代表着厂商面临的问题,代表着解决问题的方案,也因此,学习Java,就等于在面临各式问题如何解决,然而,这么多的问题,衍生出如此多的解决方案,也因此对于初学Java的人,如同面临满载产品的庞大货轮,不知从何开始,也不知将来何去何从。

 

如果程序语言被比喻为一艘船,JAVA语言会是如何呢?

   Java是一个货船它非常庞大。它可以比喻为一个企业~因为它可以携带大量的重量,他/她将带动一个庞大的项目,然而事件都是有两面性,遗憾的是货船可能没有更多的驾驶乐趣。

          在Java的官方网站提供有一份Java技术观念地图(Java Technology Concept Map)的文件

 

Java技术观念地图

 

         在这份文件中,密密麻麻地列出了大部分Java相关地图与简要说明,也代表了Java技术范畴的广泛,然而要从这么庞大的地图中找出一条适合初学Java的路线图绝非易事。以下是我基于经验与教学建议的学习路径。

1. 深入了解JVM/JRE/JDK

      许多书籍对于JVM/JRE/JDK的说明,通常以极短的篇幅介绍,就是在短短几页中,请使用者依书中步骤安装与设定PATHCLASSPATH后,就开始介绍Java程序语言,而许多人到了业界后就开始使用IDE(Integrated
Development Environment)
代劳所有JDK细节。这么做的结果就是,在IDE中遇到与JDK相关的问题,就完全不知道如何解决。

       JVM/JRE/JDK并不是用短短几页就可以说明,若没有“JVM是Java程序唯一认识的操作系统,其可执行文件为.class文档”的重要观念,就无法理解PATHCLASSPATH并非同一层级的环境变量,JDK中许多指令与选项,其实都可以对应至IDE中某个设定与操作,你对JVM/JRE/JDK有足够的认识,对IDE中相关选项就不会有疑问,也不会换个IDE就不

知所适,或没有IDE就无法撰写程序。

2. 理解封装、继承、多态

       对于Java程序语言,if...else、for、while、switch等流程语法早已是必须熟练的基础,更重要的是,Java支持面向对象(Object Oriented),你必须理解面向对象中最重要的封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)概念,以及如何用Java相关语法来实现。

       许多人撰写Java程序,并没有善用其支持面向对象的特性,问到何谓封装而无法回答(甚至回答定义类即为封装),滥用Java继承语法,不懂多态而不知如何运用API文件(更别说运用多态设计程序了),最后的结果就是沦于死背API文件、使用“复制、粘贴”大法来撰写程序,整个应用程序架构杂乱无章而难以维护。

3. 掌握常用Java SE API架构

        Java并非只是程序语言,还带有庞大的各式链接库(Library),对初学者而言,首要是掌握常用的Java SE API,像是异常(Exception)、集合(Collection)、输入/输出串流(Stream)、线程(Thread)等。学习这些标准API,绝不要沦于死背,应先掌握API在设计时的封装、继承、多态架构。以Collection为例,在学习时必须先理解为何要设计为图的架构。

 

Collection API架构范例

      学习相关链接库或API,先理解主要架构绝对是必要的,这样才不会沦于死背API或抄写范例的窘境。更进一步地,还可以从API中学习到良好设计的观念,有了这样的好习惯,以后对新的API或链接库就能更快掌握如何使用甚至改进。

 

4.学习容器观念

     在步入Java EE领域之后,经常接触到容器(Container)的观念,许多人完全以API层次来使用Java EE相关组件,这是不对的。容器就操作层面来说,就是执行于JVM上的Java应用程序,从抽象层面来说,就是你的应用程序沟通、协调相关资源的系统。

     初次接触容器的开发人员会觉得容器很抽象。以实际的例子来说,通常初学者步入Java EE,会从学习Servlet/JSP开始,而Servlet/JSP是执行于Web容器之中,这是学习容器观念时不错的开始,你必须知道“Web容器是Servlet/JSP唯一认识的HTTP服务器,是使用Java撰写的应用程序,运行于JVM之上”,如果希望用Servlet/JSP撰写的Web应用程序可以正常运作,就必须知道Servlet/JSP如何与Web容器沟通,Web容器如何管理Servlet/JSP的各种对象等问题。

 

关于Servlet/JSP的说明,可参考我撰写的《JSP  & Servlet学习笔记(2)(清华大学出版社),或是Servlet/JSP在线文件:

http://caterpillar.onlyfun.net/Gossip/ServletJSP/

     容器的观念无所不在,Applet会执行于Applet容器中,因此相关资源受到Applet容器的管理与限制,Servlet/JSP执行于Web容器中,EJB执行于EJB容器中,Java应用程序客户端执行于应用程序客户端容器中,如图所示。不理解组件如何与容器互动,就无法真正使用或理解组件的行为。

 

 

摘自http://download.oracle.com/javaee/6/tutorial/doc/bnacj.html

5. 研究开放原始码项目

      Java不仅是程序语言,也是个标准,在共同标准下有不同的运行方式,在Java领域的许多操作都是以开放原始码的方式存在,只要你有兴趣,可以下载原始码了解运行方式,从中了解甚至吸收他人设计、实现产品的技巧或理念。

    许多基于Java各标准平台发展出来的产品也值得研究,如测试框架(Framework)Web框架、持久层(Persistance)框架、对象管理容器等,这些产品补足标准未涵盖之处,各有其设计上优秀与精良之处,有些更进而回馈至Java而成为标准之一,重点是它们也多以开放原始码的方式存在,让开发人员可以使用、研究甚至参与改进。

6. 学习设计模式与重构

     在程序设计上,“经验”是最重要的,在经验传承上,归纳而言,无非就是“如何根据需求做出好的设计”、“如何因应需求变化调整现有程序架构”,对于前者,流传下来的设计经验就是设计模式(Design pattern),对于后者,流传下来的调整手法就是重构(Refactor)。

    “如果我当初就这么设计,现在就不会发生这个问题了!”这种对话应该很熟悉,“当初就这么设计”就是所谓设计模式。“如果我当初先这么改,再那么改,就不会把程序改到烂了!”这种对话也经常听到,“当初先这么改,再那么改”就是所谓重构。

     无论好的设计还是不好的设计,都要有经验传承。经验可以口耳相传,可以从原始码中观摩,也可以从书籍或网络上优秀的技术文件中学得。对于初学者,从书籍或网络上优秀的技术文件学习设计模式与重构,是积累经验的快捷方式。

7. 熟悉相关开发工具

     除了累积足够的实力与基础,善用工具是必要的,开发工具可以避免烦琐的指令、减少重复性的操作、提示可用的API、自动产生程序代码、降低错误的发生,甚至执行各种自动化的测试、报告产生与发送邮件等任务。有些开发人员鄙视开发工具,这是不必要的,两个实力相同的开发人员撰写相同的应用程序,使用良好开发工具的人必然有较好的效率。

      在Java领域难能可贵的,是存在不少优秀的开发工具,而且多以开放架构、开放原始码的方式存在,如Eclipse IDENetBeans IDE都是相当不错的选择。还可以搭配Ant构建工具、Maven项目工具等一同使用,大大地提升开发人员的产能。

     建议初学Java的人,可以挑选一种开发工具来熟悉。所谓熟悉,不是指“下一步要按哪个按钮、接下来要执行哪个菜单”,而是指这些开发工具相关操作,是为了代劳你手动执行哪些指令,开发工具中的某些选项,是为了代劳你设定哪些变量,错误提示原本是来自JDK的什么信息等。以这样的过程来熟悉开发工具,才能善用开发工具提升产能,而不是受制于开发工具,这样就算换了另一套开发工具,也可以在最短时间内上手。

 

以上内容是基于我的新作《Java Jdk7学习笔记》历时5 2012年全新升级,希望能给学习JAVA的朋友一些建议。

 

下面这份导读让你可以更了解如何使用本书。

字型

本书正文中与程序代码相关的文字,都用固定大小字体来加以呈现,以与一般名词相区别。例如,JDK是一般名词,而String为程序代码相关文字,使用了固定大小字体。

程序范例

本书许多的范例都使用完整程序操作来展现,当看到以下程序代码示范时:

ClassObject Guess.java

package cc.openhome;

 

 

   

    

u     告诉编译程序接下来想偷懒

    importjava.util.Scanner;

 

public class Guess {

    publicstatic void main(String[] args) {

 

   

    

v     建立Scanner实例

            Scanner scanner = newScanner(System.in);

       int number = (int) (Math.random() * 10);

       int guess;

       

        do{

           System.out.print("猜数字(0 ~ 9):");

 

   

    

w     取得下一个整数

                guess = scanner.nextInt();

        }while(guess != number);

       

       System.out.println("猜中了...XD");

    }

}

     范例开始的左边名称为ClassObject,表示可以在书附光盘的samples文件夹的各章节文件夹中找到对应的ClassObject项目,而右边名称为Guess.java,表示可以在项目中找到Guess.java文件。如果程序代码中出现标号与提示文字,表示后续的正文中,会有对应于标号及提示的更详细说明。

原则上,建议每个项目范例都亲手动作撰写,但如果由于教学时间或操作时间上的考虑,本书有建议进行的练习。如果在范例开始前有个图标,例如:

Game1  SwordsMan.java

package cc.openhome;

 

public class SwordsMan extends Role {

    publicvoid fight() {

       System.out.println("挥剑攻击");

    }

}

     表示建议范例动手操作,而且在书附光盘的labs文件夹中会有练习项目的基础,可以打开项目后,完成项目中遗漏或必须补齐的程序代码或设定。

     如果使用以下的程序代码呈现,表示它是一个完整的程序内容,但不是项目的一部分,主要用来展现一个完整文档如何撰写:

public class Hello {

    public static void main(String[] args) {

         System.out.println("Hello!World!");

     }

}

如果使用以下的程序代码,则表示它是个代码段,主要展现程序撰写时需要特别注意的片段:

SwordsMan swordsMan = new SwordsMan();

...

System.out.printf("剑士 (%s, %d, %d)%n", swordsMan.getName(),

       swordsMan.getLevel(), swordsMan.getBlood());

Magician magician = new Magician();

...

System.out.printf("魔法师 (%s, %d, %d)%n", magician.getName(),

       magician.getLevel(), magician.getBlood());

操作步骤

    本书将IDE进行设定的相关操作步骤也作为练习的一部分,你会看到如下的操作步骤说明:

(1) 选择“文件”|“新建项目”命令,在弹出的“新建项目”对话框的“类别”列表中选择Java,在“项目”列表中选择“Java应用程序”,接着单击“下一步”按钮。

(2) 在“项目名称”文本框中输入项目名称Hello2,在“项目位置”文本框中输入C:\workspace。注意,“项目文件夹”会储存至C:\workspace\Hello2

(3) 在“创建主类”文本框中输入cc.openhome.Main,这表示会有个Main类放在cc.openhome包,当中会自动建立main()程序进入点的方法,接着单击“完成”按钮建立项目。

    如果操作步骤旁有个图标,表示书附光盘的videos文件夹中对应的章节文件夹有操作步骤的视频,可观看它以更了解实际操作过程。

    本书针对JDK7全新改版,如果发现页侧有图标,表示是JDK7的新功能,本书亦提供有JDK7新功能快速查询目录。

提示框

在本书中会出现以下提示框:

     针对课程中所提到的观点,提供一些额外的资源或思考方向,暂时忽略这些提示对课程进行并没有影响,但有时间的话,针对这些提示做阅读、思考或讨论是有帮助的。

 

    针对课程中所提到的观点,以提示框方式特别呈现出必须注意的一些使用方式、陷阱或避开问题的方法,看到这个提示框时请集中精神阅读。

附录

书附光盘包括本书中所有范例,提供NetBeans范例项目,附录A说明如何使用这些范例项目,本书也说明了如何使用JDBC操作数据库,操作范例时使用的数据库为MySQL,附录B包括MySQL的入门简介。

关于认证

本书涵盖了Oracle Certified Professional, Java SE Programmer考试范围,也就是原Sun Certified Java ProgrammerSCJP),不过11.2节之后不在考试范围,而是为了Java
SE
相关技术范围完整性而做介绍。

关于Java认证介绍,建议直接参考Oracle University网站上的认证介绍:

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id

=140

每章最后都会有“重点复习”,为针对该章的重要提示,可作为考前复习时使用。

 

作者:林信良
出版社:清华大学出版社
ISBN9787302282082
上架时间:2012-5-1
出版日期:2012 5
开本:16
页码:562
版次:1-1

 

图书预售:

互动网:http://product.china-pub.com/199212

当当网:http://product.dangdang.com/product.aspx?product_id=22643687

 

 

 

 

抱歉!评论已关闭.