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

Thinking in Android — Java入门 (1)相关推荐

  1. 涵盖从java入门到深入架构,Linux、云计算、分布式、大数据Hadoop、ios、Android、互联网技术应有尽有

    [涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有] 1.javascript视频教程 链接: http://pan.baidu ...

  2. Android Java层和Native层通信入门指南开篇

        Android Java层和Native层通信入门指南开篇 引言    做Android平台系统开发的小伙伴,应该经常会遇到要打通Android Framework层和C/C++层通信的通道问 ...

  3. Java实用教程笔记 Java入门

    Java入门 JDBC Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新 ...

  4. Android Volley入门到精通:初识Volley的基本用法

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

  5. android+studio入门指南+pdf,android+studio使用指南v0.1.pdf

    androidstudio使用指南v0.1 <Android Studio入门指南>作者:毕小朋 博客:/wirelessqa Android Studio入门指南v0.1 作者:毕小朋 ...

  6. 【极客学院每日1课 】Java入门与常用技巧

    2019独角兽企业重金招聘Python工程师标准>>> Java是Android开发者必学的基础编程语言.你的基础怎么样? 遥想当年,小乔还未出嫁,小编在大学里面,啃书本,听教授在课 ...

  7. Android编译系统入门(二)

    Android.mk的使用方法 在上一篇Android编译系统入门(一)中我们只要介绍了Android系统使用make命令默认编译的依赖树是droid,而droid是一个伪目标,它有两个先决条件dro ...

  8. android开发入门_Android开发入门

    android开发入门 Android is an open source, Linux-based mobile operating system. Android was developed by ...

  9. Android 渗透测试学习手册 第一章 Android 安全入门

    第一章 Android 安全入门 作者:Aditya Gupta 译者:飞龙 协议:CC BY-NC-SA 4.0 Android 是当今最流行的智能手机操作系统之一. 随着人气的增加,它存在很多安全 ...

最新文章

  1. Windows系统安装改磁盘格式
  2. linux 硬链接 软链接 简介
  3. mysql正则表达式关键字_《MySQL必知必会》正则表达式
  4. linux-时间日期类
  5. 为什么又要造一个叫 Latke 的轮子
  6. js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
  7. android studio 集成 第三方sdk,Android FrameWork集成第三方SDK的jar包和so庫
  8. magento 高级搜索 brand实例 Magento ‘Shop By Brand’ in SideBar
  9. 6.4 Ext.core.DomQuery 单实例查询选择器,通过正则表达式查找DOM或者HTM
  10. [leetcode] 4. 寻找两个有序数组的中位数
  11. WINCC的一套教程 有视频 有VBS开发基础 Excel导出
  12. 计算机与量子力学交叉,量子计算主要是基于量子力学的相干特征.PPT
  13. 微信公众号怎么上传资料?
  14. C语言中task的用法,C++11中std::packaged_task的使用详解
  15. 计算机网络基本知识(四):网络传输介质
  16. hutool工具类生成二维码案例
  17. 数组与数字之间的转换
  18. nc命令卡住不返回的分析
  19. 使用 Hugo 和阿里云ECS搭建个人站
  20. GSM通话断续问题分析

热门文章

  1. Ajax无法传递参数
  2. js验证身份证号码是否正确(整理)
  3. 打开CorelDRAW提示:不能创建dom文档,没有注册类别,验证msxml4已经安装
  4. 浅谈汽车网络安全(Cyber Security)-MCU
  5. oracle 发票核销 接口,ebs r12.1.3收款核销发票LOV个性化?
  6. 《猫和老鼠》里的魔术艺术(一)——经典的印记
  7. 全面了解H5重要入口“微信小游戏”,LayaAir引擎支持一键发布!
  8. 【Android -- UI 开发】Spinner 的基本使用
  9. Dolphinscheduler执行MySQL任务时报错execute sql error java.lang.RuntimeException: send mail failed!
  10. 酷比魔方iplay20_主打性价比的全网通平板酷比魔方iPlay 20体验评测