【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
说起来,在大学里面我学过的编程语言只有c++和java。这其中c++是作为必修课学的,而java是作为选修课学的。至于后面的c、汇编、python、js这些语言,那都是工作了之后才学的。至于这些语言有什么用,在什么场景下使用效率最高,其实说实话,当时心里不是很清楚,等到真正明白过来,基本上已经是工作几年后的事情了。
asm和c一般用作底层开发,虽然大多数学习都把c语言作为必修课,但是坦率来讲,真正高水平的c语言开发工程师其实不多,汇编就更少了,看过nginx和lua代码的同学应该深有体会。通讯厂商、芯片厂商,还有一些单片机设备、白色家电、黑色家电,这些设备上运行的代码大多数都是asm和c编写的。c++和java是上层应用使用较多的编程语言,c++在游戏和大型软件开发中使用较多,当然这也和具体公司有关。按我的了解,c++在腾讯就用的比较多,java在阿里巴巴用的不少。使用c++多数是为了兼顾效率和面向对象,而java语言则照顾到网络开发、网站开发、分布式、android开发等很多方面。另外,合格的java工程要比c++工程师多很多。一个5年的工程师,他可以说精通java,但是同样的年限下,他一般不会说自己精通c++。而python、js、html这些,也是使用较多的脚本语言。python用于机器学习、网站搭建、软件原型、测试脚本开发,十分方便。而js,既可以勇于前端开发。也可以用于后端开发。自从出现了node.js之后,使用js的场景也越来越多了。甚至于,由于混合编程的流行,使用js和ionic这样的框架开发app也不是多复杂的事情。
如果只是开发上层应用,java无疑是比较好的选择。不管是下载、安装,还是学习资源、学习教程,都非常方便,更不用说五花八门的jsp开发框架了。但是对于我来说,学习java的根本动力就是分布式开发,特别是apache下面的hadoop、hdfs、hbase,这些基本是分布式开发的标配。此外,编写健壮的java程序相对而言是容易的,而同样的逻辑用c或者c++程序来开发要复杂的多,单是关于内存的问题就够让人头痛的了。
1、jdk安装
如果是windows开发,一般使用oracle公司的jdk进行开发。如果是ubuntu开发,既可以选择openjdk,也可以选择oracle公司的jdk。jdk一般包括了编译环境和运行环境两个部分。
2、ide安装
很多同学安装完jdk之后,都喜欢安装ide,比如说eclipse,或者是netbeans。如果是项目开发,这无可厚非,但是如果自己学习,我还是建议大家安装一个代码编辑工具就可以了。比如说sublime就不错了,在windows、linux、mac上面都可以安装这个软件。
3、设置环境变量
设置环境变量比较简单。一般设置三个系统变量,分别是JAVA_HOME、CLASSPATH、Path。其中JAVA_HOME设置为C:/Program Files (x86)/Java/jdk1.8.0_91,CLASSPATH设置为.;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar;,Path只需要在原来的环境变量下面添加这两个属性就可以了,分别是%JAVA_HOME%/bin和%JAVA_HOME%/jre/bin。
4、常用的java工具
常用的命令工具主要有javac、jar、java、javadoc、javap、jdb。javac是编译工具,它既可以编译单个文件,也可以编译多个文件。jar负责生成jar文件,主要是将多个class文件压缩在一起。java是虚拟机命令,它负责将class文件加载到虚拟机执行。javadoc负责文档的自动生成,内容来自于java文件中的注释。javap是反汇编文件,一般添加一个-c选项即可。jdb类似于gdb,可以用它对生成的class文件进行调试。
5、入门demo
public class hello { public static void main(String[] args){ System.out.println("hello, world"); } }
这个无敌的入门demo几乎是各个语言学习的标配。javac hello.java & java hello,这样可以运行起来了。主要执行的时候是java hello,而不是java hello.class。
6、多个java文件编译
如果需要对多个文件进行编译,也可以直接用javac来进行处理。假设有一个目录test,test中有两个文件a.java和b.java。那么在a.java和b.java的开头,都要添加代码package test;。然后进行编译,输入javac test/*.java。最后执行的时候,只要输入java test/hello即可。
7、引用第三方库
如果编译的过程中使用了第三方库,那么只要在javac中添加cp选项即可。比如,像这样javac -cp test/junit-4.12.jar test/*.java。
8、反汇编java
多实用javap工具是学习java的一个重要方法,它可以清楚地告诉你,代码最终是编译成什么样子,比如说最简单的hello程序,最后编译出来是这样的,
Compiled from "hello.java" public class hello { public hello(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3 // String hello, world 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return }
9、jdb调试
还是以刚才的hello程序为例,开始的时候输入jdb hello,接着输入stop in hello.main,最后输入run。有了这三步,程序就已经加载好了,后面就可以单步调试了。不管java语言是这样,几乎所有的脚本语言都可以编译、调试、反汇编,这三个工具真的非常重要,希望大家好好掌握和应用。
正在初始化jdb... > stop in hello.main 正在延迟断点hello.main。 将在加载类后设置。 > run 运行hello 设置未捕获的java.lang.Throwable 设置延迟的未捕获的java.lang.Throwable > VM 已启动: 设置延迟的断点hello.main 断点命中: "线程=main", hello.main(), 行=7 bci=0 7 System.out.println("hello, world"); main[1]
10、参考书籍
建议先学习好一本书的情况再去参考其他的数据,比如说《java编程思想》。如果这本书看完了,那么可以去参考其他的书籍,比如说《java核心技术》等等。