为什么80%的码农都做不了架构师?>>>   

一个语言的诞生有其目的,因为这个目的而成就了语言的主要特性,探索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的说明,通常以极短的篇幅介绍,就是在短短几页中,请使用者依书中步骤安装与设定PATH、CLASSPATH后,就开始介绍Java程序语言,而许多人到了业界后就开始使用IDE(Integrated Development Environment)代劳所有JDK细节。这么做的结果就是,在IDE中遇到与JDK相关的问题,就完全不知道如何解决。

JVM/JRE/JDK并不是用短短几页就可以说明,若没有“JVM是Java程序唯一认识的操作系统,其可执行文件为.class文档”的重要观念,就无法理解PATH与CLASSPATH并非同一层级的环境变量,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 IDE、NetBeans 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 Programmer(SCJP),不过11.2节之后不在考试范围,而是为了Java SE相关技术范围完整性而做介绍。

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

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

=140

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

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

图书预售:

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

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

转载于:https://my.oschina.net/cjkall/blog/195964

Java学习从这里开始相关推荐

  1. Java学习路线图,如何学习Java事半功倍?

    作为一个初学者想掌握Java并不是很容易,Java本身是具有一定难度的,虽然说兴趣这东西可以让我们学习不累,但是有多少人学习是因为兴趣,或者有多少人知道自己的兴趣在哪?所以我很明确的告诉你学习这事本来 ...

  2. Java学习必不可少的网站,快收藏起来

    java技术在IT互联网行业的发展前景一直在提升,越来越多的人都在学习java技术,今天小编来给大家提供一些学习Java的网站集合,希望能够帮助到正在学习java技术的同学. Java学习必不可少的网 ...

  3. 分享五款java学习辅助工具,总有你用的上的~

    想要学好java技术,除了自身的努力,辅助工具也不缺少,辅助工具可以帮助大家在今后的工作中可以提高工作效率,下面小编就来分享五款java学习辅助工具,总有你用的上的~ 五款java学习辅助工具: 1. ...

  4. Java学习从入门到精通的学习建议

    想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此.如:基础语法.核心类库.面向对象编程.异常.集合.IO流等基础如果学不好,那么后边更深入的语法也不容易学会. ...

  5. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  6. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  7. JAVA学习资源网站

    中文java技术网--http://www.cn-java.com/ 灰狐动力(http://www.huihoo.com/)-- 该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向 ...

  8. 我的WEB之路(一)-2.JAVA学习路线

    第一阶段:针对性夯实JAVA基础 课程名称 核心要点 完成目标 Java基础入门 搭建Java开发和运行环境等,IDE工具的学习和使用,Java语言基础,数据类型,运算符,条件和循环,数组使用等,Ja ...

  9. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

  10. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

最新文章

  1. python3 redis 设置连接超时
  2. xmind快速上手使用教程,提高工作效率
  3. ZBrushCore中文版
  4. Princess Principal(思维题)
  5. Android中使用Canvas和Paint绘制一个安卓机器人
  6. obs 推流编码在哪设置_OBS录屏软件
  7. oracle pdb 表空间,Oracle 12c CDB 和 PDB 表空间管理和配置 说明
  8. 互联网日报 | 6月12日 星期六 | BOSS直聘正式登陆纳斯达克;腾讯回应“试点强制6点下班”;数据安全法9月1日起实施...
  9. ip在线代理网页联合早报_一次免费代理ip的爬取实战
  10. 记录windows下docker常见错误与解决办法
  11. java基础 super 子类调用父类
  12. 双缝干涉实验,在双缝之后加一个反射,会怎样
  13. 算法:翻转图片Rotate Image
  14. android 计步器acc,基于加速度的门限检测计步算法设计
  15. Android增量升级方案
  16. 散列表的开放定址法以及再散列法(C语言)
  17. 使用SQL管理数据库
  18. #第四章 星光灿烂4.1苍穹
  19. APP提现之微信服务号红包
  20. 【xml 报错】xml编译错误

热门文章

  1. 高等数学上学习总结(集合,邻域,函数)
  2. linux硬盘识别过程
  3. 副族元素从上到下原子半径_原子的大小以原子半径来表示
  4. 巧用R语言挖掘谁是全网最受欢迎和最高产武侠作者
  5. Atitit保证架构超前性 前瞻性 目录 第一章 简单抽象原则 道和术的区别 1 第一节 原则 kiss 1 第二节 提升到层次哲学层次 1 第三节 命名也要通用抽象 隐藏细节 1 第二章 通用性原
  6. office2007 ppt制作与应用母板
  7. 写给 Linux 初学者的一封信
  8. 3D模型制作的流程的步骤
  9. CAD制图初学入门 零基础学CAD要掌握技能精选
  10. 戴尔服务器raid用联想硬盘吗,戴尔服务器安装centons系统硬盘格式是raid还是ahci...