0.引言
乔布斯曾说过计算机是大脑的自行车,非常形象生动的概括了人与计算机之间的关系。我们为什么在小的时候会去学习骑自行车那?因为骑自行车的速度要快于我们步行的速度,人类发明了计算机也是出于同样的目的,人类的大脑的计算速度有限,并且容易产生疲劳,通过计算机的帮助,则不会再受到这些问题的限制,我们要做的就只是将这些复杂的运算交给我们的助手计算机。
如果想要同英国人打交道,我们需要学习英语,同法国人打交道,则需要学习法语,类似的,想要同计算机打交道,我们则需要学习一门计算机语言。计算机语言也是多种多样的,其多样化的原因是为了适应不同的使用场景,例如,在嵌入式开发中,我们通常会使用C语言,原因在于C语言运行速度快,贴近底层硬件,开发网页,网站,我们则可以选择PHP这门语言,原因在于其可以简单快速的构建网站,而在Android开发,则使用了Java这门语言,Java的优点在于其面向对象的特点,更加贴近人类的思维模式。不同的语言有不同的特点,以适应不同的场景,学习Android开发我们首先就要掌握好Java这门语言。
相比于C语言,Java更容易上手,Java具有跨平台的特点,帮我们解决掉了许多容易出现问题的细节,Java同时帮助我们进行内存管理。但这并不意味着精深Java要比精深C更容易,Java帮助我们将精力更加集中于程序的设计,这就要求我们要有更好的大局观,要去学习和理解Java中的核心思想,面向对象。
你还记得你第一次学习骑自行车吗?我反正是印象深刻,那时候我大概十几岁,不知摔了多少次才学会。。囧。。但是当我能够驾驭我的自行车时,夏日里,穿着背心大裤衩,撒开车把,张开双臂,自由自在的在马路上”飞驰“,都成为了我快乐的回忆。Java相比于自行车可能要难一些,入门的过程也会痛苦一些,我写博客的目的也是希望能够帮助想要学习Java的同学少走一些弯路,在较短的时间里掌握Java的基本知识。当你能够忍受住花费数小时依然不能解决某个bug的痛苦,没有放弃学习时,相信你离成功已经不远了。接下来就让我们就开始进入Java的世界吧。
1.Java的开发工具JDK
很多人将编程同建筑进行对比,但是我更认同《Thinking in Java》作者对编程的认识,编程更像是在培育有机生命体。现在,我们可以将编写Java程序想象成培育花朵,从0开始,首先我们所需要的东西就是种子,花盆,浇水的工具。培育花朵需要环境及工具,那么JDK就是我们开发Java程序所需要的环境和工具了。JDK是英文Java Development Kit的缩写,顾名思义。
接下来我们如何获取JDK这个工具那?学习编程的好处就是,开源软件都是免费的,JDK也不例外,我们可以在Google或者百度搜索JDK关键字就可以下载得到,不过我还是比较推荐你直接去JDK官方网站去下载,如果你看NBA,就一定知道金州勇士队的主场是甲骨文(Oracle)球馆,那么拥有Java的公司就是甲骨文(英文:Oracle)了。另外介绍一些科技圈的小常识,甲骨文公司主要的业务是做关系型数据库,数据库的名字也叫Oracle,Java最开始并不是由甲骨文公司开发的,而是由Sun公司开发的,但是Sun公司后来日薄西山,最终被甲骨文公司收购,因此Java现在就归了甲骨文了。
回到主题,我们一起来下载一遍JDK吧,我希望通过这个过程,能够在你需要下载其他软件时,不必害怕这些英文网站。毕竟这些语言、工具都是老外搞的,能够读懂老外的网站也是软件开发工作者必备的能力。
点击进入下面这个网站:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
你会看到下面这个页面。
点击红圈圈中的地方,你会进入下面的页面。
点击红圈同意使用协议,你会看到下面的页面。
选择你电脑操作系统的类型,点击进行下载,下载后得到的文件如下图。
这个文件就是我们开发Java程序的花盆和喷壶了,我们可以看下这个文件的全名jdk-8u121-windows-x64.exe,在jdk后面的8u121意思是指,Java已经发展到第八代了,人称Java8,121你可以认为是Java8中的一些小的改动和修复,一个不恰当的例子,火影忍者中鸣人已经是第七代的火影了,火影基本是一代比一代强的吧(差也不会太差)。。那么Java8自然相比与前几代增加了许多的新的东西,也更加强大,windows自然是我们电脑使用的操作系统,x64指的就是操作系统的位数,x64是64位,x86则是32位,.exe表明了这是一个可执行文件,我们双击一下就可以进行安装了。
安装步骤如下:
点击下一步。
点击下一步。
点击下一步。
安装进行中。
安装成功,点击关闭。
到这里,我们的JDK安装就算完成了,接下来就是写我们第一个小程序,开始我们的种植工作了。
2.第一个Java程序
进入到JDK的安装目录下,我安装的目录是C:\Program Files\Java,会看到如下两个文件夹。
其中的jdk我们都清楚,是指Java开发工具集,那么jre是什么那?jre是英文单词Java Runtime Environment的缩写,顾名思义,它是Java程序的运行环境,如果我们不是进行Java的开发工作而只是运行一下Java的程序,那么jre就足够了,但是要进行开发则需要更多的工具,jdk其实同jre之间是包含关系。
jdk中不仅由Java程序运行所需要的环境,还包含了开发所需要的工具。打开jdk1.8.0_121文件夹我们可以看到,其中又出现了jre这个文件夹,其实它同外面那个jre1.8.0_121是同一个东西。
接下来我们要关注的就是jdk1.8.0_121文件夹中的bin这个文件夹,打开后我们可以看到一大堆的exe可执行文件,这些就是我们开发Java所要用得到的工具了。
看到如此多的exe程序是否会有些眼花缭乱的,难道我们每一个程序的功能都要去掌握吗?别害怕,举个栗子,如果你玩过Dota,LOL,或者王者荣耀,你可以思考一下,你是否需要把其中的每一个装备的价格和属性都准确记住?反正我玩是记不住,但是记不住没关系,一样可以上钻石,原因在于我们只要知道有那些装备,大致的属性,该什么时候出就OK了,只要知道它们的存在,我们就可以在想要用的时候去查看其准确的属性。这些工具也是一样,尤其是在开发工作中,集成开发环境通常都会帮我们默默的调用这些工具,因此大部分的工具我们了解它是做什么的就可以了,以下是这些工具的解释。
工具名称 | 描述 |
---|---|
javac.exe | Java编译工具(Java Compiler),用于编译Java源代码文件。 |
java.exe | Java运行工具,用于运行.class字节码文件或.jar文件。 |
jar.exe | jar文件管理工具,主要用于打包压缩、解压jar文件。 |
appletviewer.exe | 用于运行并浏览applet小程序。 |
apt.exe | 注解处理工具(Annotation Processing Tool),主要用于注解处理。 |
extcheck.exe | 扩展检测工具,主要用于检测指定jar文件与当前已安装的Java SDK扩展之间是否存在版本冲突。 |
idlj.exe | IDL转Java编译器(IDL-to-Java Compiler),用于为指定的IDL文件生成Java绑定。IDL意即接口定义语言(Interface Definition Language)。 |
jabswitch.exe | Java访问桥开关(Java Access Bridge switch),用于启用/禁用Java访问桥。Java访问桥内置于Java 7 Update 6及以上版本,主要为Windows系统平台提供一套访问Java应用的API。 |
jarsigner.exe | jar密匙签名工具。 |
javadoc.exe | Java文档工具,主要用于根据Java源代码中的注释信息生成HTML格式的API帮助文档。 |
javafxpackager.exe | JavaFX包装器,用于执行与封装或签名JavaFX应用有关的任务。 |
javah.exe | Java头文件工具,用于根据Java类生成C/C++头文件和源文件(主要用于JNI开发领域)。 |
javap.exe | Java反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件。 |
java-rmi.exe | Java远程方法调用(Java Remote Method Invocation)工具,主要用于在客户机上调用远程服务器上的对象。 |
javaw.exe | Java运行工具,用于运行.class字节码文件或.jar文件,但不会显示控制台输出信息,适用于运行图形化程序。 |
javaws.exe | Java Web Start,使您可以从Web下载和运行Java应用程序,下载、安装、运行、更新Java应用程序都非常简单方便。 |
jcmd.exe | Java 命令行(Java Command),用于向正在运行的JVM发送诊断命令请求。 |
jconsole.exe | 图形化用户界面的监测工具,主要用于监测并显示运行于Java平台上的应用程序的性能和资源占用等信息。 |
jdb.exe | Java调试工具(Java Debugger),主要用于对Java应用进行断点调试。 |
jhat.exe | Java堆分析工具(Java Heap Analysis Tool),用于分析Java堆内存中的对象信息。 |
jinfo.exe | Java配置信息工具(Java Configuration Information),用于打印指定Java进程、核心文件或远程调试服务器的配置信息。 |
jmap.exe | Java内存映射工具(Java Memory Map),主要用于打印指定Java进程、核心文件或远程调试服务器的共享对象内存映射或堆内存细节。 |
jmc.exe | Java任务控制工具(Java Mission Control),主要用于HotSpot JVM的生产时间监测、分析、诊断。 |
jps.exe | JVM进程状态工具(JVM Process Status Tool),用于显示目标系统上的HotSpot JVM的Java进程信息。 |
jrunscript.exe | Java命令行脚本外壳工具(command line script shell),主要用于解释执行javascript、groovy、ruby等脚本语言。 |
jsadebugd.exe | Java可用性代理调试守护进程(Java Serviceability Agent Debug Daemon),主要用于附加到指定的Java进程、核心文件,或充当一个调试服务器。 |
jstack.exe | Java堆栈跟踪工具,主要用于打印指定Java进程、核心文件或远程调试服务器的Java线程的堆栈跟踪信息。 |
jstat.exe | JVM统计监测工具(JVM Statistics Monitoring Tool),主要用于监测并显示JVM的性能统计信息。 |
jstatd.exe | jstatd(VM jstatd Daemon)工具是一个RMI服务器应用,用于监测HotSpot JVM的创建和终止,并提供一个接口,允许远程监测工具附加到运行于本地主机的JVM上。 |
jvisualvm.exe | JVM监测、故障排除、分析工具,主要以图形化界面的方式提供运行于指定虚拟机的Java应用程序的详细信息。 |
keytool.exe | 密钥和证书管理工具,主要用于密钥和证书的创建、修改、删除等。 |
kinit.exe | 主要用于获取或缓存Kerberos协议的票据授权票据。 |
klist.exe | 允许用户查看本地凭据缓存和密钥表中的条目(用于Kerberos协议)。 |
ktab.exe | Kerberos密钥表管理工具,允许用户管理存储于本地密钥表中的主要名称和服务密钥。 |
native2ascii.exe | 本地编码到ASCII编码的转换器(Native-to-ASCII Converter),用于”任意受支持的字符编码”和与之对应的”ASCII编码和(或)Unicode转义”之间的相互转换。 |
orbd.exe | 对象请求代理守护进程(Object Request Broker Daemon),它使客户端能够透明地定位和调用位于CORBA环境的服务器上的持久对象。 |
pack200.exe | JAR文件打包压缩工具,它可以利用Java类特有的结构,对普通JAR文件进行高效压缩,以便于能够更快地进行网络传输。 |
packager.exe | 这是微软提供的对象包装程序,用于对象安装包。 |
policytool.exe | 策略工具,用于管理用户策略文件(.java.policy)。 |
rmic.exe | Java RMI 编译器,为使用JRMP或IIOP协议的远程对象生成stub、skeleton、和tie类,也用于生成OMG IDL。 |
rmid.exe | Java RMI 激活系统守护进程,rmid启动激活系统守护进程,允许在虚拟机中注册或激活对象。 |
rmiregistry.exe | Java 远程对象注册表,用于在当前主机的指定端口上创建并启动一个远程对象注册表。 |
schemagen.exe | XML schema生成器,用于生成XML schema文件。 |
serialver.exe | 序列版本命令,用于生成并返回serialVersionUID。 |
servertool.exe | Java IDL 服务器工具,用于注册、取消注册、启动和终止持久化的服务器。 |
tnameserv.exe | Java IDL瞬时命名服务。 |
unpack200.exe | JAR文件解压工具,将一个由pack200打包的文件解压提取为JAR文件。 |
wsgen.exe | XML Web Service 2.0的Java API,生成用于JAX-WS Web Service的JAX-WS便携式产物。 |
wsimport.exe | XML Web Service 2.0的Java API,主要用于根据服务端发布的wsdl文件生成客户端存根及框架 |
xjc.exe | 主要用于根据XML schema文件生成对应的Java类。 |
上面的工具中最重要的就是头两个工具,javac.exe和java.exe,想要我们编写的Java程序运行起来,就必须要使用它们。先知道我们要用到这两个工具,在我们完成我们的第一个程序后再来详细介绍它们。
首先我们在桌面上创建一个txt文件,然后将它重命名为Hello.java,注意我们要正确修改其后缀,我们的工具只认后缀为.java的文件。编辑器有很多种,我们这里用记事本就可以了。
打开Hello.java文件,输入下面的代码:
public class Hello {
public static void main(String []args) {
System.out.println("Hello World");
}
}
上面的代码只干了一件事,就是输出”Hello World“这么一句话,暂时我们先不考虑Java的语法规则,但它确实是你写的程序,将它运行起来,那么你就成为Java程序员了,接下来我们就要考虑如何将这段代码运行起来了。这时候我们就要用到上面提到的两个工具,javac.exe和java.exe。我们如何用这两个工具那?首先我们需要配置下操作系统的环境变量,配置操作系统的环境变量的目的是,让操作系统帮助我们去寻找这两个工具。举个栗子,打开你的命令提示符,没错就是下面这个黑乎乎的东西:
你可以在查找中输入cmd就可以直接打开这个软件了,我们在其中输入notepad,然后回车:
你会发现,你的记事本软件被打开了,这是怎么回事那?这其实就是环境变量所起的作用,因为在环境变量中配置了笔记本软件的路径,因此我输入notepad后,我们的计算机就能够根据路径找到这个程序啦!OK,我们现在要做的就是配置javac.exe和java.exe这两个软件的路径啦,配置方法如下:
右键我的电脑,选择属性后就会进入上面的界面,点击高级系统设置进入到下面的界面:
选择高级,点击环境变量进入下面的界面:
选择系统变量中的Path这一项,进入下面的界面:
将我们JDK的工具目录填入变量值的最后面,记得不要忘记了我们工具的目录同前面的目录用”;“进行分割。
在配置完成后,点击确定,退出即可。
接下来将之前打开的命令提示符关闭,再重新打开,向其中输入javac,如果能出现下图中的一堆用法说明,就说明我们配置成功了:
就好像将大象关进冰箱要分步一样,我们想要我们的程序跑起来也要分几步,第一步是编译,第二步是执行。
将我们的所在目录切换到我们Hello.java目录下:
接下来我们所要做的就是编译我们文件了,再输入javac Hello.java,后回车:
似乎什么也没发生,别急观察下你当前所在的目录,你会发现多出了一个文件,如下:
没错就是这个了,Hello.class文件,这个就是我们第一步编译所产生的编译文件,我们要运行的也就是这个文件了,你也许会问,为什么不去直接执行Hello.java文件而是要生成这个Hello.class文件,原因其实就在于,Java程序是通过class文件进行分发的,通过执行class文件可以达到语言的无关性,并且会对我们的代码进行优化,所以就有了这个中间步骤,以后学习的更多,你就会明白Java什么这样进行设计了。
再下一步就是执行了,再输入java Hello,然后回车:
你会发现,屏幕上打印出了”Hello World“这两个单词,至此,我们的Java程序终于运行起来了!欢迎来到Java的世界!
广义上来说,你已经成为了一名Java开发工程师了,但是光会这个相信没有公司会给你Offer的,我们还并不知道我们所编写代码的含义,仅仅是copy了一下而已。
public class Hello {
public static void main(String []args) {
System.out.println("Hello World");
}
}
不过也不要灰心丧气,即便伟大的牛顿也要站在巨人的肩膀上,如果你能够知其然,copy也将会成为程序员的一个好习惯。接下来的路就需要你不断的进行探索了,要从枯燥的语法开始一点一滴的积累,最终相信你会从Java程序员变为优秀的Java程序员的。我本人现在是一名Android程序员,我深知万事开头难,写博客的目的就是希望更多对编程感兴趣的朋友能够加入到Android开发的行列中来,接下来我会再用几篇博客帮助想要学习Android开发的同学了解和认识Java这门语言。
3.Java的学习建议
学习Java可以说是幸福的,最起码相对于C/C++来说,理解上要简单一些,但是这并不意味着Java是很容易掌握的,学习Java最初是语法规则,常用类,再然后可能就要学会重构,设计模式等等这些东西。开始学习Java无疑要经历一段时间的学习以及刻意练习才能够真正较好的运用,最开始最好的办法无疑就是多写多练,这个时候是最容易放弃的,所以你要坚持住才可以,当感觉基本的语法掌握后,我建议你去找一份Java的实习工作,这样就会有人逼着你去做Java的工作了,在实际的工程中与你写的练习代码又是两回事了,尽管这时候压力会大些,但是放弃就没有工资发了,所以你应该可以,再挺过这阶段,你就成为了真正的Java程序员了。
接下来推荐几本Java相关的很棒的书籍,记住,很多烂书都是在误人子弟的,费钱费时最后学习到的东西不多,极其坑爹,就好像郭敬明那些没大脑的电影一样危害众生,所以一定要选择好书,下面这些书都是Java学习中的经典了。
1.《Thinking in Java》
2.《重构-改善既有代码的设计》
3.《设计模式》(四人帮的版本)
4.《Effective java》
如果你能够把上面的四本书完整的读过两遍,并且有一定的理解,相信你已经成为了一名优秀的Java程序员了,但是在学习Java开始我并不建议你直接开始看这些书,有时这些书的厚度会打击你的积极性,最好在有一定的Java编程实践经验后来阅读,这样你会感触更深。
4.资源
我将上面JDK安装包上传到了我的百度云,有需要的同学可以进行下载:http://pan.baidu.com/s/1eSstNcI
同样有需要上面四本书的同学可以通过这个连接进行下载,不过我还是推荐你购买实体的图书,体验会好很多,尊重知识产权,同时也可以坚定你学习Java的决心:http://pan.baidu.com/s/1pLDamJh