【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;3: ldc           #3                  // String hello, world5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V8: return
}

详细的java反编译代码,可以参考这个链接

https://blog.csdn.net/wangfantastic/article/details/79736860

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、生成jar文件,且被引用

假设有test目录,test下有hello.java文件。首先hello.java的开头必须有package test;这段代码。其次,利用javac test/*.java生成class文件。接着,利用jar -cvf test.jar test/*.class创建test.jar文件。此时如果需要引用test.jar,直接利用javac -cp ./test.jar process.java即可。注意,在process.java中添加import test.hello代码。最后,如果需要执行process,直接输入java process即可。当然这个时候,如果用解压工具可以发现,jar文件中除了class文件之外,还有一个META-INF目录,这个目录下面有一个manifest.mf文件。

11、参考书籍

建议先学习好一本书的情况再去参考其他的数据,比如说《java编程思想》。如果这本书看完了,那么可以去参考其他的书籍,比如说《java核心技术》等等。

12、后面的话

一般教程上面学习java是这么安排的:a、学习基本语法,包括关键字、变量、计算、循环、判断、数组、编译、调试等等;b、学习类、包、继承、封装、多态、嵌套类、抽象类、接口、匿名类等等;c、学习第三方库,包括多线程、网络、数据库、日志、单元测试、gui、jni开发等等;d、到了这一步,一般会学习java的各个框架,比如structs、spring、hibernate、ibatis、mybatis等等,好一点的培训机构还说带一点hadoop、hdfs、hbase这些内容;e、等到上面的知识点都学完了,一般都会开始进行项目实战了,比如网上商城、爬虫、分布式监控、android开发等等。

大家可以根据自己的能力和兴趣,灵活调整内容,不断学习和进步。

13、资源

api文档,https://docs.oracle.com/javase/7/docs/api/

java教学视频,http://www.maiziedu.com/course/348-3765/ 和 http://www.maiziedu.com/course/804/

其他教程,http://www.runoob.com/java/java-filereader.html,

http://www.weixueyuan.net/java/rumen/

java分布式(java入门)相关推荐

  1. 分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)

     系列博文: 分布式.RPC调用-RMI & Hessian框架_闲猫的博客-CSDN博客 分布式.RPC-WebService三要素,三个规范, Soap协议_闲猫的博客-CSDN博客 分布 ...

  2. Java基础笔记(入门,语法基础,流程控制,数组)

    Java语言入门 发展历程 三大技术体系 JavaSE 标准版 JavaEE 企业版 JavaME 嵌入式版 Java语言特点 简单性 健壮性 面向对象 分布式 多线程 动态性 可移植性(跨平台) J ...

  3. Java分布式篇6——RabbitMQ

    Java分布式篇6--RabbitMQ 1.MQ(Message Queue)消息队列 消息队列中间件,是分布式系统中的重要组件 主要解决,异步处理,应用解耦,流量削峰等问题 实现高性能,高可用,可伸 ...

  4. JAVA分布式篇3——Dubbo

    JAVA分布式篇3--Dubbo 1.架构演变 1.1.单应用架构 当网站流量很小时,只需要一个应用,将所有的功能部署到一起(所有业务都放在一个tomcat 里),从而减少部署节点和成本 用于简化 增 ...

  5. 呕心沥血整理的Java零基础入门到精通全套知识点教程

    学习 Java,我将会从三个阶段来介绍,分为初级.中级和高级 计算机基础 计算机基础都包括哪些呢? 计算机组成原理.操作系统.计算机网络.数据结构与算法. 计算机组成原理 先说计算机组成原理,这部分内 ...

  6. Java分布式二手房项目尚好房第三课 利用Dubbo拆分微服务

    Java分布式二手房项目尚好房:Apache Dubbo介绍 一.分布式RPC框架Apache Dubbo 1.软件架构的演进过程 软件架构的发展经历了由单体架构.垂直架构.SOA架构到微服务架构的演 ...

  7. Marco's Java【Ngnix入门(二) 之反向代理及负载均衡】

    前言 能翻到这篇文章的朋友想必对Web服务器已经不陌生了,那么大家都用过哪些Web服务器服务器呢? 看过我SpringBoot系列文章的朋友,应该知道SpringBoot内置有三大服务器:Tomcat ...

  8. java 分布式计算框架_学Java分布式和高级架构,必懂的两大知识点!

    原标题:学Java分布式和高级架构,必懂的两大知识点! 第一部分:分布式 三步变成:分布式 1.将你的整个软件视为一个系统(不管它有多复杂) 2.将整个系统分割为一系列的 Process(进程), 每 ...

  9. 41..大数据之旅——java分布式项目02

    后台系统搭建 <build><finalName>jt-manage-web</finalName><plugins> <plugin> & ...

  10. 西安尚学堂Java 服务端入门(资料推荐)

    现在互联网上资源丰富,Java 学习并不难.贴个 Java 服务端入门和进阶指南,是给新人入门用的,包括了学习目标.需要掌握的技能和参考资料,并规划了学习阶段和时间,希望帮助到大家. 前言 关于如何获 ...

最新文章

  1. 编译32位扩展在64位环境
  2. 【图像处理opencv】_图像几何变换
  3. android java 打开snd,使用SndPlaySound从内存中播放WAV
  4. bzoj1084: [SCOI2005]最大子矩阵
  5. 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别
  6. MySQL5.7的配置文件
  7. 【cv2】:关于opencv-Python的函数
  8. 2021-2025年中国德国航空公司试剂行业市场供需与战略研究报告
  9. 如何用python做模型_python的模型如何使用?
  10. Babuk/AtomSilo/LockFile勒索软件免费解密工具
  11. Fixed-step size(Solver)、Sample time(模块)、Sample time(powergui)三者的辨析
  12. VOLATILE和队列
  13. 关于浏览器加载不出图片的问题
  14. java:定义一个Shape类,派生出Circle类和Rectangle类,手写模拟GeoArrayList,实现升序(升序以面积大小判断)存入Circle类和Rectangle类
  15. [日语二级词汇]日语二级必会汉字总结10
  16. 以太坊ETH源码分析(1):地址生成过程
  17. 123456789 往这串数字里插入3个乘号,使得结果最大
  18. 【openjudge】金银岛
  19. 【DASH】低延迟流式传输和新算法
  20. 无法挂载sd卡(android),不能安装APK(1)

热门文章

  1. System.Convert 的一些事
  2. 1 python简介与安装
  3. 大数据技术是“地球的神经系统”
  4. 当Node.js遇见Docker
  5. ORACLE数据库存储结构简介(转)
  6. CLR线程池的作用与原理浅析
  7. Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第一部分)
  8. 修改树状控件TreeCtrl的节点名称
  9. Git学习03-----最基本的几个命令
  10. centos7查看安装的是64位系统还是32位系统---linux工作笔记043