在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发。为什么突然间想学习Java呢?有以下几个原因:

1. 开发程序三年多来,已经对.NET相关体系完成了基本掌握,但是还不是炉火纯青的那种,我不想一直忙碌的奔跑,想停下来看看Java这位与.NET势均力敌的"大腕"的精妙之处,比较两者之间各自的优势与应用领域,以便为以后软件架构师(主要在扩展知识体系而非语言)做一定准备;

2. Java更加需要注重个人思维解决问题,而.NET却提供了丰富的体系结构更注重业务的搭建,对于目前我这个中高级软件工程师而言,最好的催化剂莫过于对软件思维的提升,而不是去"拿来"别人搭建的丰富类库及结构;

3. 还有比较现实的,为了工作,为了钱钱,为了丰富自己的职业视野等等....

好了,废话不多说,开始我们的Java学习之旅吧。我们都知道:Java分为三大应用领域:J2SE、J2EE、J2ME。J2SE是整个Java技术的核心和基础,同时也是J2EE和J2ME编程框架的基础。J2EE是企业级开发应用的完整解决方案。J2ME主要应用于移动通信设备和信息家电领域。Java是一种先编译后解释的高级语言,Java语言程序经过编译生成与平台无关的字节码(*.class文件,不可执行的),字节码文件经过Java虚拟机(JVM)转化为特定系统的机器码解释执行。也就是说,系统运行平台不针对任何Java程序,只针对JVM,而编译器生成的字节码也只针对JVM,提供相同的编程接口,实现了跨平台应用。

在开发Java程序之前,必须安装和配置JDK。这里涉及一个概念:JRE(Java运行时环境),前面提到JVM是虚拟机,负责将字节码文件转化为针对特定系统的机器码解释执行。但除了JVM之外,还需要安装JRE(包含JVM)提供Java运行环境支持,而JDK又包含JRE,如果你的应用程序是用于开发的话,则安装JDK;相反仅仅作为运行时,则仅安装JRE。简单总结一下,Java程序需要经历以下两个步骤:1.将源文件编译成与平台无关的字节码;2.将字节码解释成特定平台的机器码。分别对应于javac和java命令,要想使用这两个命令则需要设置Path环境变量,即将Java安装路径(如D:\Java\jdk1.7.0_05\bin)添加到"用户变量(JAVA_HOME)"中,可以通过"我的电脑"属性页设置,也可以运行一下批处理命令autoexec.bat(保存在系统盘根目录,重启将自动执行)。

set Path=%Path%;D:\Java\jdk1.7.0_05\bin

如果使用Linux配置环境变量进行开发时,首先必须进入当前用户(假设叫mirhe)的home路径下并使用命令(ls -a)查看当前路径的所有文件(包含隐藏文件),你会发现有一个文件.bash_profile,我们正是在这个文件中配置环境变量。使用无格式的记事本打开该文件并在PATH变量后追加(请注意Linux路径是用:来进行分割的,而Windows采用;分割):

# 设置PATH环境变量
PATH=.:$PATH:$HOME/bin:/home/mirhe/java/jdk_1.7.0_05/bin

完成设置后关闭该文件,你也可以再文件最后追加以下命令来查看当前的环境变量:

# 导出PATH环境变量
export PATH

重新登录Linux平台或执行以下命令(source .bash_profile)使PATH环境变量生效。
      可能很多朋友学习Java时还会设置另外一个环境变量CLASSPATH的值,那这个环境变量真的需要设置吗?它的作用是什么呢?我们都知道当执行"java 类名"时,JRE从哪里去搜索Java类呢?可能朋友会说:在当前路径下(.)搜索。但是JDK1.4之前版本并未设计这个自动在当前路径查找字节码的功能,也即当前路径下包含"类名.class"的字节码时,仍然会出现"找不到类"的错误。除此之外,还需要将JDK的lib路径下的dt.jar和tools.jar包含到CLASSPATH中。

classpath的值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(注意别忘记.;)

但JDK1.5之后版本加入了自动查找字节码文件的功能,因此不需要设置CLASSPATH变量。有时我们需要临时改变CLASSPATH变量的值,以便在我们定义的路径下去查找字节码文件。

java -classpath dir1;dir2;...;dirN

不过此时会覆盖此前系统设置的CLASSPATH变量的值,要想不覆盖则可以将之前的值追加到路径列表中。

java -classpath %CLASSPATH%;.;dir1;dir2;...;dirN

接下来我们以入门示例(HelloWorld)来说明Java编译和运行的整个过程。在记事本中(建议使用Notepad++)添加以下代码:

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

分别在源文件所在路径下执行javac HelloWorld.java和java HelloWorld将输出"Hello World!"。有时为了方便,我们不使用命令行运行程序,而是利用文本编译器中设置一些快捷方式(在Notepad++中直接编译运行java代码以及在Sublime Text 2中编译和运行Java程序),以更快的运行程序,强烈建议初学者使用轻量级记事本或文本编译器来练习,搞懂Java程序的运行原理,待比较熟练掌握基础知识后并需要项目开发实践时再选用适合自身的IDE

编译Java: cmd /k javac "$(FULL_CURRENT_PATH)"&PAUSE, 快捷方式: Ctrl + C
运行Java: cmd /k cd /d "$(CURRENT_DIRECTORY)"&java "$(NAME_PART)"&PAUSE, 快捷方式: Ctrl + R
编译并运行Java: cmd /k javac "$(FULL_CURRENT_PATH)"&cd /d "$(CURRENT_DIRECTORY)"&java "$(NAME_PART)"&PAUSE,快捷方式: Ctrl + E

其中包含一些宏定义:$(FULL_CURRENT_PATH)"——当前带路径的文件名(如:C:\Project\HelloWorld.java);$(CURRENT_DIRECTORY)"——当前的路径(如:C:\Project\);$(NAME_PART)——不带扩展名的文件名(如:HelloWorld);此外还有:$(FILE_NAME)——完整的文件名(如:HelloWorld.java);$(EXT_PART)——文件的扩展名(如:java)等。

我们都知道,Java源文件名称是可以为任意的(除开源代码中包含public类,则源文件的主文件名与public类相同),因此一个源文件可包含多个类,但最多只能定义一个public类,且主文件名必须与这个public类名一致。因此通常建议:一个Java源文件只定义一个类,并将该类定义成public,保持源文件名与public类名一致

Java学习之旅开篇:运行机制及环境搭建的更多相关文章

  1. 从.Net到Java学习第一篇——开篇

    以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...

  2. Java开发学习心得(一):SSM环境搭建

    目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...

  3. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  4. Java学习之旅基础知识篇:数组及引用类型内存分配

    在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...

  5. java 学习笔记(三)ZooKeeper集群搭建实例,以及集成dubbo时的配置 (转)

    ZooKeeper集群搭建实例,以及集成dubbo时的配置 zookeeper是什么: Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式 ...

  6. ANTLR学习(一)ANTLR简介和环境搭建

    一.ANTLR简介和学习动机 1. ANTLR简介 antlr是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器.ANTLR-Another Tool for Language Reco ...

  7. 勤拂拭软件Android开发之旅(1) 之 Android 开发环境搭建

    勤拂拭软件工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html 勤拂拭软件Android开发之旅目录 ...

  8. Android开发之旅(1) 之 Android 开发环境搭建

    工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html Android开发之旅目录 1 前言 很多朋友 ...

  9. JavaSE 学习笔记01丨开发前言与环境搭建、基础语法

    本蒟蒻学习过C/C++的语法,故在学习Java的过程中,会关注于C++与Java的区别.开发前言部分,看了苏星河教程中的操作步骤.而后,主要阅读了<Java核心技术 卷1 基础知识>(第8 ...

随机推荐

  1. C++多线程一

    CreateThread()创建一个新的线程. ExitThread()正常的结束一个线程的执行. CloseHandle()关闭一个线程的句柄. CreateThread()函数原型如下: HAND ...

  2. PHP :Call to undefined function mysql_connect()

    今天配置apache ,php,mysql 的时候,一直报(Call to undefined function mysql_connect()),PHP一直连接不上数据库,从网上查,答案也都是千篇一 ...

  3. JavaScript 中实现继承的方式(列举3种在前一章,我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。)

    第一种:对象冒充 function ClassA(sColor) { this.color = sColor; this.sayColor = function () { alert(this.col ...

  4. Sencha Touch学习(一)

    一.Ext的内部类结构示意图 基类Ext.Base 该类是所有通过Ext.define定义出来的类的基类. 是所有Ext类的基石. 来自为知笔记(Wiz)

  5. Word字体与像素的对应关系(转)

    源:Word字体与像素的对应关系 英文字体的1磅(pt),相当于1/72 英寸(inch),约等于1/2.8mm.12PT的字打印出来约为4.2mm.网页中12px的字才相当于12像素. 虽然 四号= ...

  6. Lua学习系列(四)

    lua 资源:http://www.dcc.ufrj.br/~fabiom/lua/ 第一个Lua程序 http://www.dcc.ufrj.br/~fabiom/lua/ 原文:https://w ...

  7. 为HTTP分类作序

    作者:zccst 曾经,认为对HTTP已经非常熟悉了,觉得不需要学习什么,知道2014年春天,让我感觉到自己是如此的无知. 举例: 1,对HTTP头部信息知道多少?每一个字段分别都可以取哪些值,每一个 ...

  8. POJ 3187 Backward Digit Sums

    暴力DFS+验证. 验证如果是暴力检验可能复杂度会太高,事实上可以o(1)进行,这个可以o(n*n)dp预处理. #include<cstdio> #include<cstring& ...

  9. 如何在微软Hyper-V下发挥SQL Server最大功效

    要建设稳定运行的虚拟化SQL Server系统,关键是确保虚拟化管理软件配置能提供数据库所需的资源.SQL Server是CPU密集型技术,因此支撑它的虚拟机需要能获得充足的处理器资源,同时不能引起与 ...

  10. memcached命令和配置

    转自:http://www.tuicool.com/articles/VJzAvuB 安装配置 首先,编译.安装.配置libevent库,执行如下命令: wget https://github.com ...