文章编号:11540时间:2024-10-01人气:
如果您正在寻找一种快速有效的方法来下载 JDK 1.5,那么您来对地方了。本文将指导您完成从官方来源下载 JDK 1.5 的步骤,并提供一些有用的提示和技巧,以帮助您顺利完成下载。
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。 Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程[1]。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点[2]。 Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等[3]。 外文名Java现公司Oracle推出时间1995年5月快速导航编程开发 语言特点 工作原理 语言基础 语言标准 语言规范 技术应用 学习指南 语言评价发展历程20世纪90年代,硬件领域出现了单片式计算机系统,这种价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品(如电视机顶盒、面包烤箱、移动电话等)的智能化程度。 Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。 JAVA由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。 但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。 另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。 为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为“字节码”的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台。 对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。 由于在开发Oak语言时,尚且不存在运行字节码的硬件平台,所以为了在开发时可以对这种语言进行实验研究,他们就在已有的硬件和软件平台基础上,按照自己所指定的规范,用软件建设了一个运行平台,整个系统除了比C++更加简单之外,没有什么大的区别。 1992年的夏天,当Oak语言开发成功后,研究者们向硬件生产商进行演示了Green操作系统、Oak的程序设计语言、类库和其硬件,以说服他们使用Oak语言生产硬件芯片,但是,硬件生产商并未对此产生极大的热情。 因为他们认为,在所有人对Oak语言还一无所知的情况下,就生产硬件产品的风险实在太大了,所以Oak语言也就因为缺乏硬件的支持而无法进入市场,从而被搁置了下来。 1994年6、7月间,在经历了一场历时三天的讨论之后,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。 他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。 作为原型,帕特里克·诺顿写了一个小型万维网浏览器WebRunner。 [4]1995年,互联网的蓬勃发展给了Oak机会。 业界为了使死板、单调的静态网页能够“灵活”起来,急需一种软件技术来开发一种程序,这种程序可以通过网络传播并且能够跨平台运行。 于是,世界各大IT企业为此纷纷投入了大量的人力、物力和财力。 这个时候,Sun公司想起了那个被搁置起来很久的Oak,并且重新审视了那个用软件编写的试验平台,由于它是按照嵌入式系统硬件平台体系结构进行编写的,所以非常小,特别适用于网络上的传输系统,而Oak也是一种精简的语言,程序非常小,适合在网络上传输。 Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的Applet(Applet是一种将小程序嵌入到网页中进行执行的技术),并将Oak更名为Java(在申请注册商标时,发现Oak已经被人使用了,再想了一系列名字之后,最终,使用了提议者在喝一杯Java咖啡时无意提到的Java词语)。 5月23日,Sun公司在Sun world会议上正式发布Java和HotJava浏览器。 IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微软等各大公司都纷纷停止了自己的相关开发项目,竞相购买了Java使用许可证,并为自己的产品开发了相应的Java平台。 [5] [6]1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。 9月,约8.3万个网页应用了Java技术来制作。 10月,Sun公司发布了Java平台的第一个即时(JIT)编译器。 1997年2月,JDK 1.1面世,在随后的3周时间里,达到了22万次的下载量。 4月2日,Java One会议召开,参会者逾一万人,创当时全球同类会议规模之纪录。 9月,Java Developer Connection社区成员超过10万。 1998年12月8日,第二代Java平台的企业版J2EE发布。 1999年6月,Sun公司发布了第二代Java平台(简称为Java2)的3个版本:J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。 Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及。 1999年4月27日,HotSpot虚拟机发布。 HotSpot虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及之后所有版本的Sun JDK的默认虚拟机[7] 。 2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发布,几周后其获得了Apple公司Mac OS X的工业标准的支持。 2001年9月24日,J2EE1.3发布。 2002年2月26日,J2SE1.4发布。 自此Java的计算能力有了大幅提升,与J2SE1.3相比,其多了近62%的类和接口。 在这些新特性当中,还提供了广泛的XML支持、安全套接字(Socket)支持(通过SSL与TLS协议)、全新的I/OAPI、正则表达式、日志与断言。 2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。 为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0(内部版本号1.5.0),代号为“Tiger”,Tiger包含了从1996年发布1.0版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。 Java创始人之一:詹姆斯·高斯林2005年6月,在Java One大会上,Sun公司发布了Java SE 6。 此时,Java的各种版本已经更名,已取消其中的数字2,如J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。 [8]2006年11月13日,Java技术的发明者Sun公司宣布,将Java技术作为免费软件对外发布。 Sun公司正式发布的有关Java平台标准版的第一批源代码,以及Java迷你版的可执行源代码。 从2007年3月起,全世界所有的开发人员均可对Java源代码进行修改[9] 。 2009年,甲骨文公司宣布收购Sun[10] 。 2010年,Java编程语言的共同创始人之一詹姆斯·高斯林从Oracle公司辞职。 2011年,甲骨文公司举行了全球性的活动,以庆祝Java7的推出,随后Java7正式发布。 2014年,甲骨文公司发布了Java8正式版[11] 。 编程开发编程环境Java概念图JDK(Java Development Kit)称为Java开发包或Java开发工具,是一个编写Java的Applet小程序和应用程序的程序开发环境。 JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一些Java工具和Java的核心类库(Java API)。 不论什么Java应用服务器实质都是内置了某个版本的JDK。 主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如,IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK[13] 。 另外,可以把Java API类库中的Java SE API子集和Java虚拟机这两部分统称为JRE(JAVA Runtime Environment),JRE是支持Java程序运行的标准环境[14] 。 JRE是个运行环境,JDK是个开发环境。 因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE。 而JDK里面已经包含了JRE,因此只要安装了JDK,就可以编辑Java程序,也可以正常运行Java程序。 但由于JDK包含了许多与运行无关的内容,占用的空间较大,因此运行普通的Java程序无须安装JDK,而只需要安装JRE即可[15] 。 编程工具Eclipse:一个开放源代码的、基于Java的可扩展开发平台[16] 。 NetBeans:开放源码的Java集成开发环境,适用于各种客户机和Web应用。 IntelliJ IDEA:在代码自动提示、代码分析等方面的具有很好的功能。 [17]MyEclipse:由Genuitec公司开发的一款商业化软件,是应用比较广泛的Java应用程序集成开发环境[18] 。 EditPlus:如果正确配置Java的编译器“Javac”以及解释器“Java”后,可直接使用EditPlus编译执行Java程序[19] 。 语言特点1.简单性Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。 例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。 Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。 因为Java没有结构,数组和串都是对象,所以不需要指针。 Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。 2.面向对象Java是一个面向对象的语言。 对程序员来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。 在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。 数据和方法一起描述对象(object)的状态和行为。 每一对象是其状态和行为的封装。 类是按一定体系和层次安排的,使得子类可以从超类继承行为。 在这个类层次体系中有一个根类,它是具有一般行为的类。 Java程序是用类来组织的。 Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。 例如,Java提供产生图形用户接口部件的类(包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(包)和支持网络功能的类(包)。 3.分布性Java设计成支持在网络上应用,它是分布式语言。 Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。 网络变成软件应用的分布运载工具。 Java程序只要编写一次,就可到处运行。 4.编译和解释性Java编译程序生成字节码(byte-code),而不是通常的机器码。 Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。 Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。 在一个解释性的环境中,程序开发的标准“链接”阶段大大消失了。 如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。 因此,Java支持快速原型和容易试验,它将导致快速程序开发。 这是一个与传统的、耗时的“编译、链接和测试”形成鲜明对比的精巧的开发过程。 5.稳健性Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。 Java消除了某些编程错误,使得用它写可靠软件相当容易。 JavaJava是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。 Java要求显式的方法声明,它不支持C风格的隐式声明。 这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。 Java不支持指针,它消除重写存储和讹误数据的可能性。 类似地,Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。 Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。 异常处理是Java中使得程序更稳健的另一个特征。 异常是某种类似于错误的异常条件出现的信号。 使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。 6.安全性Java的存储分配模型是它防御恶意代码的主要方法之一。 Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。 更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。 编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。 Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。 这个安全机制部分包括类如何从网上装载。 例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。 7.可移植性Java使得语言声明不依赖于实现的方面。 例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。 Java环境本身对新的硬件平台和操作系统是可移植的。 Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。 8.高性能Java是一种先编译后解释的语言,所以它不如全编译性语言快。 但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。 Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。 9.多线程性Java是多线程语言,它提供支持多线程的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。 Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。 Java的线索支持也包括一组同步原语。 这些原语是基于监督程序和条件变量风范,由开发的广泛使用的同步化方案。 用关键词synchronized,程序员可以说明某些方法在一个类中不能并发地运行。 这些方法在监督程序控制之下,确保变量维持在一个一致的状态。 10.动态性Java语言设计成适应于变化的环境,它是一个动态的语言。 例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。 [20]工作原理由四方面组成:工作原理(1)Java编程语言(2)Java类文件格式(3)Java虚拟机(4)Java应用程序接口[21]当编辑并运行一个Java程序时,需要同时涉及到这四种方面。 使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类[22] ,通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用[6] 。 语言基础基本数据结构在Java中有8种数据类型来存储数值、字符和布尔值。 整数类型整数型用来存储整数数值,即没有小数部分的数值。 可以是正数,也可以是负数。 整数数据在Java程序中有3种表示形式,分别为十进制、八进制和十六进制。 整型数据根据它所占内容大小的不同可分为4种类型。 数据类型内存byte8位short16位int32位展开全部浮点类型数据类型内存float32位double64位字符类型字符类型用于存储单个字符,占用16位(两个字节)的内存空间。 在定义字符型变量时,要以单引号表示。 使用char关键字可定义字符变量。 数据类型内存char16位布尔类型布尔类型又称逻辑类型,通过关键字boolean来定义布尔类型变量,只有只有true和false两个取值,分别代表布尔逻辑中的“真”和“假”。 布尔类型通常被用在流程控制中作为判断条件。 关键字关键字含义abstract抽象类或方法Assert用来查找内部程序错误break跳出一个switch或循环展开全部关键字参考资料来源[23]运算符运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较方面。 赋值运算符赋值运算符以符号“=”表示,它是一个二元运算符(对两个操作数作处理),其功能是将右方操作数所含的值赋给左方的操作数。 例如:int a = 100;算术运算符运算符说明+加-减*乘展开全部自增和自减运算符自增和自减是单目运算符,可以放在操作元之前,也可以放在操作元之后。 操作元必须是一个整型或浮点型变量。 自增、自减运算符的作用是使变量的值增1或减1。 放在操作元前面的自增、自减运算符,会先将变量的值加1或减1,然后再使该变量参与表达式的运算。 放在操作元后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量的值加1或减1。 例如:假设a=5b=++a;//先将a的值加1,然后赋值给b,此时a的值为6,b的值为6b=a++;//先将a的值赋值给b,再将a的值变为6,此时a的值为6,b的值为5比较运算符比较运算符属于二元运算符,用于程序中的变量之间,变量和自变量之间以及其他类型的信息之间的比较。 比较运算符的运算结果是boolean型。 当运算符对应的关系成立时,运算的结果为true,否则为false。 比较运算符共有6个,通常作为判断的依据用于条件语句中。 运算符说明>比较左方是否大于右方<比较左方是否小于右方==比较左方是否等于右方展开全部逻辑运算符运算符作用&&逻辑与||逻辑或!逻辑非语言基础参考资料来源[24]程序举例/*一个简单的Java应用程序,显示内容:Hello World!文件名为Hello.java*/class Hello{//程序开始于main()public static void main(String args[]){(Hello World!);} }main方法,正如注释所说,这是程序开始执行的第一行。 对于一个Java应用程序来说,main方法是必需的,Java解释器在没有生成任何对象的情况下,以main作为入口来执行程序。 每个类中可以定义多个方法,但main方法只能有一个。 关键字public表示访问权限,指明所有的类都可以使用这一方法。 本例中,main必须被定义为public类型,因为当程序开始执行时它需要被它的类之外的代码调用。 关键字static指明该方法是一个类方法。 关键字void指明main()方法不返回任何值。 main方法圆括号中定义的String args[]是传送给main方法的参数,参数名为args,它是类String的一个对象。 方法的参数用“类名参数名”来指定,多个参数间用逗号分隔。 该行的最后一个字符是“{”,它表示了main程序体的开始,一个方法中包含的所有代码都将包括在这对花括号中间。 另外,main仅是解释器开始工作的地方,一个复杂的程序可能包含几十个类,但这些类仅需要一个main方法。 [25]语言标准1997年11月17日,国际标准化组织(ISO)同意采纳Sun公司的专利技术——Java作为ISO标准。 JAVA作为一个技术标准供公众无偿使用。 根据ISO的批准,Sun公司将可提交JAVA的标准化平台规范。 [26]发布时间名称2000年11月15日ISO/TS -27年5月15日ISO/IEC -2年7月15日ISO/IEC TR -6:2014展开全部语言标准参考资料[27] [28] [29] [30] [31]语言规范JCP(Java Community Process)是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新Java技术规范、参考实现(RI)、技术兼容包(TCK)。 JCP维护的规范包括Java ME、Java SE、Java EE、XML、OSS、JAIN等。 组织成员可以提交JSR(Java Specification Requests),通过特定程序以后,进入到下一版本的规范里面。 JSR是早期提议和最终发布的Java平台规范的具体描述。 通常,一个新的JSR的提出是为了增加或者规范Java平台的功能。 某个具体的JSR由专家组共同来制定,工作由组长协调。 例如,CLDC1.0(Connected Limited Device Configuration,JSR30)由Sun公司的Antero Taivalsaari担任组长,同时专家组的成员还包括Siemens、Motorola、Nokia、Symbian等。 Java ME平台规范是在JSR68中定义的,规范组长是Sun公司的Jon Courtney。 JSR完成后,相关的规范及JavaAPI会在JCP的官方网站发布。 设备制造商可以在自己的产品中实现某个JSR,如MIDP2.0(JSRll8)。 但是这些都必须要通过TCK(Technology Compatibility Kit)测试以确保技术兼容性。 [32]按照技术类别可以分成以下几类:1、J2EE平台规范[33]2、J2SE平台规范[34]3、J2ME平台规范[35]4、运营支持系统规范(OSS)[36]5、综合网络的Java 应用(JAIN)[37]6、XML 操作规范[38]技术应用1、Android应用许多的 Android应用都是Java程序员开发者开发。 虽然 Android运用了不同的JVM以及不同的封装方式,但是代码还是用Java语言所编写。 相当一部分的手机中都支持JAVA游戏,这就使很多非编程人员都认识了JAVA。 2、在金融业应用的服务器程序Java在金融服务业的应用非常广泛,很多第三方交易系统、银行、金融机构都选择用Java开发,因为相对而言,Java较安全[39] 。 大型跨国投资银行用Java来编写前台和后台的电子交易系统,结算和确认系统,数据处理项目以及其他项目。 大多数情况下,Java被用在服务器端开发,但多数没有任何前端,它们通常是从一个服务器(上一级)接收数据,处理后发向另一个处理系统(下一级处理)。 3、网站Java 在电子商务领域以及网站开发领域占据了一定的席位。 开发人员可以运用许多不同的框架来创建web项目,SpringMVC,Struts2.0以及frameworks。 即使是简单的 servlet,jsp和以struts为基础的网站在政府项目中也经常被用到。 例如医疗救护、保险、教育、国防以及其他的不同部门网站都是以Java为基础来开发的。 4、嵌入式领域Java在嵌入式领域发展空间很大。 在这个平台上,只需130KB就能够使用Java技术(在智能卡或者传感器上)。 5、大数据技术Hadoop以及其他大数据处理技术很多都是用Java,例如Apache的基于Java的HBase和Accumulo以及 ElasticSearchas。 6、高频交易的空间Java平台提高了这个平台的特性和即使编译,他同时也能够像 C++ 一样传递数据。 正是由于这个原因,Java成为的程序员编写交易平台的语言,因为虽然性能不比C++,但开发人员可以避开安全性,可移植性和可维护性等问题。 7、科学应用Java在科学应用中是很好选择,包括自然语言处理。 最主要的原因是因为Java比C++或者其他语言相对其安全性、便携性、可维护性以及其他高级语言的并发性更好。 Java语言好学难精,配置东西比较复杂
Java学习之路:不走弯路,就是捷径 (1) 作者: ∣来源:中国Java技术网∣原文地址∣2006-3-14 0.引言 在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于如何学习编程?Java该如何学习?。 类似的问题回答多了,难免会感觉厌烦,就萌生了写下本文的想法。 到时候再有人问起类似的问题,我可以告诉他(她),请你去看看《Java学习之路》。 拜读过台湾蔡学镛先生的《Java夜未眠》,有些文章如《Java学习之道》等让我们确实有共鸣,本文题目也由此而来。 软件开发之路是充满荆棘与挑战之路,也是充满希望之路。 Java学习也是如此,没有捷径可走。 梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的。 每天仰天大叫天神啊,请赐给我一本葵花宝典吧,殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了东方不败,倒是成西方失败的几率高一点。 不走弯路,就是捷径,佛经说的不无道理。 1.如何学习程序设计? Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于Java,对C++等其他程序设计语言也一样管用。 有编程高手认为,Java也好C也好没什么分别,拿来就用。 为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。 如何学习程序设计理所当然也有许多共通的地方。 1.1 培养兴趣 兴趣是能够让你坚持下去的动力。 如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了。 多关心一些行业趣事,多想想盖茨。 不是提倡天天做白日梦,但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭空多出个食利阶层。 你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。 1.2 慎选程序设计语言 男怕入错行,女怕嫁错郎。 初学者选择程序设计语言需要谨慎对待。 软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识。 软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落。 如果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域。 如果你对电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期进入电信软件开发领域。 如果你对操作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。 如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,你可以选择J2EE或,甚至LAMP组合。 每个领域要求的背景知识不一样。 做应用软件需要对数据库等很熟悉。 总之,你需要根据自己的特点来选择合适你的编程语言。 1.3 要脚踏实地,快餐式的学习不可取 先分享一个故事。 有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞。 有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了几天以后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来。 这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来。 这个小孩看着看着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出。 但蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来。 这个故事给我们的启示是:欲速则不达。 浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样,都想大步跨入共产主义社会。 现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。 就拿笔者比较熟悉的深圳IT培训行业来说吧,居然有的打广告宣称参加培训,100%就业,居然报名的学生不少,简直是藐视天下程序员。 社会环境如是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵。 许多初学者C++/Java没开始学,立马使用VC/JBuilder,会使用VC/JBuilder开发一个Hello World程序,就忙不迭的向世界宣告,我会软件开发了,简历上也大言不惭地写上精通VC/Java。 结果到软件公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容。 到处碰壁之后才知道捧起《C++编程思想》《Java编程思想》仔细钻研,早知如此何必当初呀。 你现在讲究简单方便,你以后的路就长了,好象也是佛经中的劝戒。 1.4 多实践,快实践 彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。 从前,四川边境有两个和尚,一个贫穷,一个有钱。 一天,穷和尚对富和尚说:我打算去南海朝圣,你看怎么样?富和尚说:这里离南海有几千里远,你靠什么去呢?穷和尚说:我只要一个水钵,一个饭碗就够了。 富和尚为难地说:几年前我就打算买条船去南海,可至今没去成,你还是别去吧! 一年以后,富和尚还在为租赁船只筹钱,穷和尚却已经从南海朝圣回来了。 这个故事可解读为:任何事情,一旦考虑好了,就要马上上路,不要等到准备周全之后,再去干事情。 假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了。 软件开发是一门工程学科,注重的就是实践,君子动口不动手对软件开发人员来讲根本就是错误的,他们提倡动手至上,但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有时候蓬头垢面的一副比尔盖茨样。 有前辈高人认为,学习编程的秘诀是:编程、编程、再编程,笔者深表赞同。 不仅要多实践,而且要快实践。 我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点。 1.5 多参考程序代码 程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂。 许多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。 为什么要以悲剧结尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局,他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息。 多多参考代码例子,对Java而言有参考文献[4.3],有API类的源代码(JDK安装目录下的文件),也可以研究一些开源的软件或框架。 1.6 加强英文阅读能力 对学习编程来说,不要求英语, 但不能一点不会,。 最起码像Java API文档(参考文献[4.4])这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个金山词霸。 看多了就会越来越熟练。 在学Java的同时学习英文,一箭双雕多好。 另外好多软件需要到英文网站下载,你要能够找到它们,这些是最基本的要求。 英语好对你学习有很大的帮助。 口语好的话更有机会进入管理层,进而可以成为剥削程序员的周扒皮。 1.7 万不得已才请教别人 笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决。 请教别人之前,你应该先回答如下几个问题。 你是否在google中搜索了问题的解决办法? 你是否查看了Java API文档? 你是否查找过相关书籍? 你是否写代码测试过? 如果回答都是是的话,而且还没有找到解决办法,再问别人不迟。 要知道独立思考的能力对你很重要。 要知道程序员的时间是很宝贵的。 1.8 多读好书 书中自有颜如玉。 比尔?盖茨是一个饱读群书的人。 虽然没有读完大学,但九岁的时候比尔?盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可以说比尔?盖茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富。 笔者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱怨,天呐,这么多书到什么时候才能看完了,学软件开发,感觉上了贼船。 这时候,我的回答一般是,别着急,什么时候带你们去看看我的书房,到现在每月花在技术书籍上的钱400元,这在软件开发人员之中还只能够算是中等的,学生当场晕倒。 (注:这一部分学生是刚学软件开发的) 对于在Java开发领域的好书在笔者另外一篇文章中会专门点评。 该文章可作为本文的姊妹篇。 1.9 使用合适的工具 工欲善其事必先利其器。 软件开发包含各种各样的活动,需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没有工具帮忙可以说是寸步难行。 工具可以提高开发效率,使软件的质量更高BUG更少。 组合称手的武器。 到飞花摘叶皆可伤人的境界就很高了,无招胜有招,手中无剑心中有剑这样的境界几乎不可企及。 在笔者另外一篇文章中会专门阐述如何选择合适的工具(该文章也可作为本文的姊妹篇)。 2.软件开发学习路线 两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之道,而是找寻学习软件开发的正确路线与规律。 从软件开发人员的生涯规划来讲,我们可以大致分为三个阶段,软件工程师→软件设计师→架构设计师或项目管理师。 不想当元帅的士兵不是好士兵,不想当架构设计师或项目管理师的程序员也不是好的程序员。 我们应该努力往上走。 让我们先整理一下开发应用软件需要学习的主要技术。 A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等,它们并非不重要。 如不想成为计算机科学家的话,可以采取用到的时候再来学的原则。 B.一门编程语言,现在基本上都是面向对象的语言,Java/C++/C#等等。 如果做WEB开发的话还要学习HTML/JavaScript等等。 C.一种方法学或者说思想,现在基本都是面向对象思想(OOA/OOD/设计模式)。 由此而衍生的基于组件开发CBD/面向方面编程AOP等等。 D.一种关系型数据库,ORACLE/SQLServer/DB2/MySQL等等 E.一种提高生产率的IDE集成开发环境JBuilder/Eclipse/等。 F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模。 G.一种软件过程,RUP/XP/CMM等等,通过软件过程来组织软件开发的众多活动,使开发流程专业化规范化。 当然还有其他的一些软件工程知识。 H.项目管理、体系结构、框架知识。 正确的路线应该是:B→C→E→F→G→H。 还需要补充几点: 1).对于A与C要补充的是,我们应该在实践中逐步领悟编程理论与编程思想。 新技术虽然不断涌现,更新速度令人眼花燎乱雾里看花;但万变不离其宗,编程理论与编程思想的变化却很慢。 掌握了编程理论与编程思想你就会有拨云见日之感。 面向对象的思想在目前来讲是相当关键的,是强势技术之一,在上面需要多投入时间,给你的回报也会让你惊喜。 2).对于数据库来说是独立学习的,这个时机就由你来决定吧。 3).编程语言作为学习软件开发的主线,而其余的作为辅线。 4).软件工程师着重于B、C、E、D;软件设计师着重于B、C、E、D、F;架构设计师着重于C、F、H。 3.如何学习Java? 3.1 Java学习路线 3.1.1 基础语法及Java原理 基础语法和Java原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。 学习Java也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。 参加SCJP(SUN公司认证的Java程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉Java基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。 获得真正的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。 3.1.2 OO思想的领悟 掌握了基础语法和Java程序运行原理后,我们就可以用Java语言实现面向对象的思想了。 面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。 当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。 使用面向对象的思想进行开发的基本过程是: ●调查收集需求。 ●建立用例模型。 ●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。 ●细化分析模型到设计模型。 ●用具体的技术去实现。 ●测试、部署、总结。 3.1.3 基本API的学习 进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的不需要重新发明轮子。 我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。 那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。 他们只能提供文档给我们查看,Java DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。 基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等。 我们又把它成为类库。 熟悉API的方法一是多查Java DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。 3.1.4 特定API的学习 Java介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。 如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟 悉Servlet等API啦。 总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。 3.1.5 开发工具的用法 在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对Java技术本身的注意力。 过了这一阶段你就可以开始熟悉IDE了。 程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错。 在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。 应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。 从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑。 Java开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的。 JBuilder在近几年来一直是Java集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的Java IDE大战中,以其快速的版本更新击败IBM的Visual Age for Java等而成就一番伟业。 IBM在Visual Age for Java上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓柳暗花明又一村。 浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。 3.1.6 学习软件工程 对小型项目而言,你可能认为软件工程没太大的必要。 随着项目的复杂性越来越高,软件工程的必要性才会体现出来。 参见软件开发学习路线小节。 3.2学习要点 确立的学习路线之后,我们还需要总结一下Java的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。 3.2.1勤查API文档 当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。 这时候你要使用Javadoc工具(包含在JDK中)生成标准的Java DOC文档,供同行使用。 J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外。 J2SE DOC文档官方下载地址:,你可以到google搜索CHM版本下载。 也可以在线查看:。 对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。 当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。 使用步骤一般如下: ●找特定的包,包一般根据功能组织。 ●找需要使用类,类命名规范的话我们由类的名字可猜出一二。 ●选择构造器,大多数使用类的方式是创建对象。 ●选择你需要的方法。 3.2.2 查书/google->写代码测试->查看源代码->请教别人 当我们遇到问题的时候该如何解决? 这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。 可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。 而像某些类/方法如何使用的问题,DOC文档就是答案。 对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。 而有的问题,你可能需要直接看API的源代码验证你的想法。 万不得已才去请教别人。 3.2.3学习开源软件的设计思想 Java领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。 这些可是前辈给我们留下的瑰宝呀。 入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。 分析开源软件其实是你提高技术、提高实战能力的便捷方法。 3.2.4 规范的重要性 没有规矩,不成方圆。 这里的规范有两层含义。 第一层含义是技术规范,多到下载JSRXXX规范,多读规范,这是最权威准确最新的教材。 第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;同时,没给程序作注释,以显示你的编程功底是多么的深厚。 这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。 Java编码规范到此查看或下载,中文的也有,啊,还要问我在哪,请参考3.2.2节。 3.2.5 不局限于Java 很不幸,很幸运,要学习的东西还有很多。 不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。 幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。 Java不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。 如学习Java集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是需要的时候再学的原则。 4.结束语 需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千万不要半途而废。 本文如果能对一直徘徊在Java神殿之外的朋友有所帮助的话,笔者也欣慰了。 哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小老头了。 最后奉劝各位程序员尤其是MM程序员,完成工作后赶快远离电脑,据《胡播乱报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比…… (转载文章请保留出处:Java家())
Java学习之路:不走弯路,就是捷径 (1) 作者: ∣来源:中国Java技术网∣原文地址∣2006-3-14 0.引言 在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于如何学习编程?Java该如何学习?。 类似的问题回答多了,难免会感觉厌烦,就萌生了写下本文的想法。 到时候再有人问起类似的问题,我可以告诉他(她),请你去看看《Java学习之路》。 拜读过台湾蔡学镛先生的《Java夜未眠》,有些文章如《Java学习之道》等让我们确实有共鸣,本文题目也由此而来。 软件开发之路是充满荆棘与挑战之路,也是充满希望之路。 Java学习也是如此,没有捷径可走。 梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的。 每天仰天大叫天神啊,请赐给我一本葵花宝典吧,殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了东方不败,倒是成西方失败的几率高一点。 不走弯路,就是捷径,佛经说的不无道理。 1.如何学习程序设计? Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于Java,对C++等其他程序设计语言也一样管用。 有编程高手认为,Java也好C也好没什么分别,拿来就用。 为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。 如何学习程序设计理所当然也有许多共通的地方。 1.1 培养兴趣 兴趣是能够让你坚持下去的动力。 如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了。 多关心一些行业趣事,多想想盖茨。 不是提倡天天做白日梦,但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭空多出个食利阶层。 你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。 1.2 慎选程序设计语言 男怕入错行,女怕嫁错郎。 初学者选择程序设计语言需要谨慎对待。 软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识。 软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落。 如果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域。 如果你对电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期进入电信软件开发领域。 如果你对操作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。 如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,你可以选择J2EE或,甚至LAMP组合。 每个领域要求的背景知识不一样。 做应用软件需要对数据库等很熟悉。 总之,你需要根据自己的特点来选择合适你的编程语言。 1.3 要脚踏实地,快餐式的学习不可取 先分享一个故事。 有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞。 有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了几天以后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来。 这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来。 这个小孩看着看着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出。 但蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来。 这个故事给我们的启示是:欲速则不达。 浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样,都想大步跨入共产主义社会。 现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。 就拿笔者比较熟悉的深圳IT培训行业来说吧,居然有的打广告宣称参加培训,100%就业,居然报名的学生不少,简直是藐视天下程序员。 社会环境如是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵。 许多初学者C++/Java没开始学,立马使用VC/JBuilder,会使用VC/JBuilder开发一个Hello World程序,就忙不迭的向世界宣告,我会软件开发了,简历上也大言不惭地写上精通VC/Java。 结果到软件公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容。 到处碰壁之后才知道捧起《C++编程思想》《Java编程思想》仔细钻研,早知如此何必当初呀。 你现在讲究简单方便,你以后的路就长了,好象也是佛经中的劝戒。 1.4 多实践,快实践 彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。 从前,四川边境有两个和尚,一个贫穷,一个有钱。 一天,穷和尚对富和尚说:我打算去南海朝圣,你看怎么样?富和尚说:这里离南海有几千里远,你靠什么去呢?穷和尚说:我只要一个水钵,一个饭碗就够了。 富和尚为难地说:几年前我就打算买条船去南海,可至今没去成,你还是别去吧! 一年以后,富和尚还在为租赁船只筹钱,穷和尚却已经从南海朝圣回来了。 这个故事可解读为:任何事情,一旦考虑好了,就要马上上路,不要等到准备周全之后,再去干事情。 假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了。 软件开发是一门工程学科,注重的就是实践,君子动口不动手对软件开发人员来讲根本就是错误的,他们提倡动手至上,但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有时候蓬头垢面的一副比尔盖茨样。 有前辈高人认为,学习编程的秘诀是:编程、编程、再编程,笔者深表赞同。 不仅要多实践,而且要快实践。 我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点。 1.5 多参考程序代码 程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂。 许多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。 为什么要以悲剧结尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局,他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息。 多多参考代码例子,对Java而言有参考文献[4.3],有API类的源代码(JDK安装目录下的文件),也可以研究一些开源的软件或框架。 1.6 加强英文阅读能力 对学习编程来说,不要求英语, 但不能一点不会,。 最起码像Java API文档(参考文献[4.4])这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个金山词霸。 看多了就会越来越熟练。 在学Java的同时学习英文,一箭双雕多好。 另外好多软件需要到英文网站下载,你要能够找到它们,这些是最基本的要求。 英语好对你学习有很大的帮助。 口语好的话更有机会进入管理层,进而可以成为剥削程序员的周扒皮。 1.7 万不得已才请教别人 笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决。 请教别人之前,你应该先回答如下几个问题。 你是否在google中搜索了问题的解决办法? 你是否查看了Java API文档? 你是否查找过相关书籍? 你是否写代码测试过? 如果回答都是是的话,而且还没有找到解决办法,再问别人不迟。 要知道独立思考的能力对你很重要。 要知道程序员的时间是很宝贵的。 1.8 多读好书 书中自有颜如玉。 比尔?盖茨是一个饱读群书的人。 虽然没有读完大学,但九岁的时候比尔?盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可以说比尔?盖茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富。 笔者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱怨,天呐,这么多书到什么时候才能看完了,学软件开发,感觉上了贼船。 这时候,我的回答一般是,别着急,什么时候带你们去看看我的书房,到现在每月花在技术书籍上的钱400元,这在软件开发人员之中还只能够算是中等的,学生当场晕倒。 (注:这一部分学生是刚学软件开发的) 对于在Java开发领域的好书在笔者另外一篇文章中会专门点评。 该文章可作为本文的姊妹篇。 1.9 使用合适的工具 工欲善其事必先利其器。 软件开发包含各种各样的活动,需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没有工具帮忙可以说是寸步难行。 工具可以提高开发效率,使软件的质量更高BUG更少。 组合称手的武器。 到飞花摘叶皆可伤人的境界就很高了,无招胜有招,手中无剑心中有剑这样的境界几乎不可企及。 在笔者另外一篇文章中会专门阐述如何选择合适的工具(该文章也可作为本文的姊妹篇)。 2.软件开发学习路线 两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之道,而是找寻学习软件开发的正确路线与规律。 从软件开发人员的生涯规划来讲,我们可以大致分为三个阶段,软件工程师→软件设计师→架构设计师或项目管理师。 不想当元帅的士兵不是好士兵,不想当架构设计师或项目管理师的程序员也不是好的程序员。 我们应该努力往上走。 让我们先整理一下开发应用软件需要学习的主要技术。 A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等,它们并非不重要。 如不想成为计算机科学家的话,可以采取用到的时候再来学的原则。 B.一门编程语言,现在基本上都是面向对象的语言,Java/C++/C#等等。 如果做WEB开发的话还要学习HTML/JavaScript等等。 C.一种方法学或者说思想,现在基本都是面向对象思想(OOA/OOD/设计模式)。 由此而衍生的基于组件开发CBD/面向方面编程AOP等等。 D.一种关系型数据库,ORACLE/SqlServer/DB2/MySQL等等 E.一种提高生产率的IDE集成开发环境JBuilder/Eclipse/等。 F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模。 G.一种软件过程,RUP/XP/CMM等等,通过软件过程来组织软件开发的众多活动,使开发流程专业化规范化。 当然还有其他的一些软件工程知识。 H.项目管理、体系结构、框架知识。 正确的路线应该是:B→C→E→F→G→H。 还需要补充几点: 1).对于A与C要补充的是,我们应该在实践中逐步领悟编程理论与编程思想。 新技术虽然不断涌现,更新速度令人眼花燎乱雾里看花;但万变不离其宗,编程理论与编程思想的变化却很慢。 掌握了编程理论与编程思想你就会有拨云见日之感。 面向对象的思想在目前来讲是相当关键的,是强势技术之一,在上面需要多投入时间,给你的回报也会让你惊喜。 2).对于数据库来说是独立学习的,这个时机就由你来决定吧。 3).编程语言作为学习软件开发的主线,而其余的作为辅线。 4).软件工程师着重于B、C、E、D;软件设计师着重于B、C、E、D、F;架构设计师着重于C、F、H。 3.如何学习Java? 3.1 Java学习路线 3.1.1 基础语法及Java原理 基础语法和Java原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。 学习Java也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。 参加SCJP(SUN公司认证的Java程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉Java基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。 获得真正的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。 3.1.2 OO思想的领悟 掌握了基础语法和Java程序运行原理后,我们就可以用Java语言实现面向对象的思想了。 面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。 当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。 使用面向对象的思想进行开发的基本过程是: ●调查收集需求。 ●建立用例模型。 ●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。 ●细化分析模型到设计模型。 ●用具体的技术去实现。 ●测试、部署、总结。 3.1.3 基本API的学习 进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的不需要重新发明轮子。 我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。 那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。 他们只能提供文档给我们查看,Java DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。 基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等。 我们又把它成为类库。 熟悉API的方法一是多查Java DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。 3.1.4 特定API的学习 Java介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。 如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟 悉Servlet等API啦。 总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。 3.1.5 开发工具的用法 在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对Java技术本身的注意力。 过了这一阶段你就可以开始熟悉IDE了。 程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错。 在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。 应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。 从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑。 Java开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的。 JBuilder在近几年来一直是Java集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的Java IDE大战中,以其快速的版本更新击败IBM的Visual Age for Java等而成就一番伟业。 IBM在Visual Age for Java上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓柳暗花明又一村。 浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。 3.1.6 学习软件工程 对小型项目而言,你可能认为软件工程没太大的必要。 随着项目的复杂性越来越高,软件工程的必要性才会体现出来。 参见软件开发学习路线小节。 3.2学习要点 确立的学习路线之后,我们还需要总结一下Java的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。 3.2.1勤查API文档 当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。 这时候你要使用Javadoc工具(包含在JDK中)生成标准的Java DOC文档,供同行使用。 J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外。 J2SE DOC文档官方下载地址:,你可以到google搜索CHM版本下载。 也可以在线查看:。 对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。 当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。 使用步骤一般如下: ●找特定的包,包一般根据功能组织。 ●找需要使用类,类命名规范的话我们由类的名字可猜出一二。 ●选择构造器,大多数使用类的方式是创建对象。 ●选择你需要的方法。 3.2.2 查书/google->写代码测试->查看源代码->请教别人 当我们遇到问题的时候该如何解决? 这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。 可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。 而像某些类/方法如何使用的问题,DOC文档就是答案。 对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。 而有的问题,你可能需要直接看API的源代码验证你的想法。 万不得已才去请教别人。 3.2.3学习开源软件的设计思想 Java领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。 这些可是前辈给我们留下的瑰宝呀。 入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。 分析开源软件其实是你提高技术、提高实战能力的便捷方法。 3.2.4 规范的重要性 没有规矩,不成方圆。 这里的规范有两层含义。 第一层含义是技术规范,多到下载JSRXXX规范,多读规范,这是最权威准确最新的教材。 第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;同时,没给程序作注释,以显示你的编程功底是多么的深厚。 这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。 Java编码规范到此查看或下载,中文的也有,啊,还要问我在哪,请参考3.2.2节。 3.2.5 不局限于Java 很不幸,很幸运,要学习的东西还有很多。 不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。 幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。 Java不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。 如学习Java集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是需要的时候再学的原则。 4.结束语 需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千万不要半途而废。 本文如果能对一直徘徊在Java神殿之外的朋友有所帮助的话,笔者也欣慰了。 哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小老头了。 最后奉劝各位程序员尤其是MM程序员,完成工作后赶快远离电脑,据《胡播乱报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比…… (转载文章请保留出处:Java家())
内容声明:
1、本站收录的内容来源于大数据收集,版权归原网站所有!
2、本站收录的内容若侵害到您的利益,请联系我们进行删除处理!
3、本站不接受违法信息,如您发现违法内容,请联系我们进行举报处理!
4、本文地址:http://www.jujiwang.com/article/46e19c74f98fe7bb5114.html,复制请保留版权链接!
简介随机数在科学计算和工程应用中无处不在,从模拟物理现象到优化算法,可靠的随机数对于获得准确和可重复的结果至关重要,MATLAB,作为一种广泛使用的技术计算语言,提供了各种函数,使我们能够生成各种分布的随机数,在文章中,我们将深入研究MATLAB的随机数生成器,探讨其优点、限制和最佳实践,以帮助您生成可靠和可信的随机数,MATLAB随...。
互联网资讯 2024-09-29 20:19:57
前言欢迎来到排版基础知识的终极指南!本指南将带你从排版新手成长为一位排版大师,让你在创建视觉上令人愉悦且易于阅读的设计时能够自信自如,排版基础字体字体是指字母、数字和符号的特定样式,选择正确的字体对于营造正确的基调和氛围至关重要,以下是选择字体的几个关键因素,可读性,字体必须清晰易读,即使是小尺寸,调性,不同的字体会传达不同的情绪和印...。
互联网资讯 2024-09-23 17:29:06
引言人工智能,AI,算法是当今技术领域最具影响力和变革性的工具之一,它们为解决复杂问题、自动化任务和做出明智决策提供了强大的解决方案,本文旨在提供人工智能算法设计和实施的全面指南,涵盖从基本原理到实际应用的各个方面,人工智能算法的基础1.机器学习机器学习是人工智能的一个子领域,允许算法从数据中学习而无需明确编程,它分为以下类型,监督学...。
最新资讯 2024-09-15 16:05:38
焦点图库是任何网站或应用程序的必备元素,它们可用于展示图像、视频或其他内容,有多种JavaScript焦点图库可供选择,每个焦点图库都有自己独特的优点和缺点,在本文中,我们将比较一些最流行的JavaScript焦点图库,我们将根据以下标准对它们进行评估,功能易用性性能文档支持焦点图库比较表名称功能易用性性能文档支持Slick响应式自动...。
技术教程 2024-09-15 08:12:32
按钮,是,当您使用`history.back,`方法返回页面时,浏览器前进按钮将变为可用,因为它现在可以向前导航到当前页面,我可以使用`history.back,`方法在不同的域之间导航吗,否,`history.back,`方法只能在当前域的历史记录中导航,如果您需要在不同的域之间导航,您需要使用`window.location...。
本站公告 2024-09-13 18:31:02
锦囊妙计1,熟练掌握C语言基本语法和概念了解变量类型、指针、数组和结构体等基本概念,掌握运算符、语句和控制结构的用法,练习编写简单的C语言程序,锦囊妙计2,理解C语言指针了解指针的基本概念,包括指针变量和解引用,掌握指针运算和数组指针,练习使用指针操作数据结构,锦囊妙计3,了解数据结构和算法熟悉常见的线性数据结构,如链表和...。
最新资讯 2024-09-12 22:09:05
成为C语言编程大师提升技能,把握机遇C语言作为一种低级编程语言,在计算机科学领域发挥着至关重要的作用,它以其可移植性、高效性和对硬件的低级访问而闻名,精通C语言可以为你的职业生涯打开一扇大门,让你有机会在各个行业工作,免费下载C语言PDF为了帮助你踏上成为C语言编程大师的旅程,我们提供了一份免费的PDF指南,其中包含以下内容,C语言...。
互联网资讯 2024-09-09 10:26:28
PHP是一个强大的服务器端编程语言,广泛用于Web开发,像任何软件一样,PHP也容易受到安全漏洞的影响,为了应对这些威胁,PHP5.2.6引入了多项安全强化措施,以保护应用程序免受攻击,安全强化措施PHP5.2.6中引入的安全强化措施包括,register,globals禁用register,globals是一个PHP设置,允许将UR...。
技术教程 2024-09-07 14:35:44
对联广告是一种在社交媒体上越来越流行的广告形式,它通过在用户分享的内容旁边显示广告,为品牌提供了一个有效的方式来吸引受众,对联广告的优势对联广告为企业提供了许多好处,包括,提高品牌知名度,对联广告可以帮助企业扩大其品牌的覆盖面,从而吸引更多潜在客户,提升转化率,对联广告可以吸引相关受众并鼓励他们采取行动,例如访问网站或购买产品,增加参...。
技术教程 2024-09-06 19:44:09
简介在JavaScript中,bind函数是一个强大的工具,它允许您控制函数的执行上下文,通过绑定一个函数到一个特定的对象,您可以显式地设置函数中的`this`关键字的值,从而在调用函数时控制上下文,什么是执行上下文执行上下文是JavaScript引擎在执行代码时创建的环境,它包含了函数执行所需的所有信息,包括,作用域链,一系列对象,...。
最新资讯 2024-09-06 16:02:27
优势网址全面详尽的教程,提供从入门到高级的全面教程,涵盖广泛的主题,针对特定主题的深入文章,专注于特定主题的深入文章,提供深入的见解和分析,大量实践问题,提供大量的实践问题和练习题,帮助巩固所学知识,优点全面详尽的教程这些网站提供从入门到高级的全面教程,涵盖从基础概念到高级技术等广泛的主题,它们按照循序渐进的方式组织内容,使学习者能够...。
互联网资讯 2024-09-05 15:15:58
现在是互联网快速发展的时代,拥有一个优秀的网站就相当于做生意拥有了一个流量火爆的店面,网站的好坏将会直接影响到企业网络营销的效果,虽说现在的建站公司有很多,但许多都是鱼龙混杂,真心能帮助企业解决网站制作难题的少之又少,网站建设非常多都是直接套用模板,没有针对企业需求进行定制化服务,推广效果也比较差,但奥晶科技会根据用户的不同需求提供个...。
技术教程 2024-09-02 00:35:46