Java学习之旅开篇:运行机制及环境搭建
在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.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学习之旅开篇:运行机制及环境搭建的更多相关文章
- 从.Net到Java学习第一篇——开篇
以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...
- Java开发学习心得(一):SSM环境搭建
目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- Java学习之旅基础知识篇:数组及引用类型内存分配
在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...
- java 学习笔记(三)ZooKeeper集群搭建实例,以及集成dubbo时的配置 (转)
ZooKeeper集群搭建实例,以及集成dubbo时的配置 zookeeper是什么: Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式 ...
- ANTLR学习(一)ANTLR简介和环境搭建
一.ANTLR简介和学习动机 1. ANTLR简介 antlr是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器.ANTLR-Another Tool for Language Reco ...
- 勤拂拭软件Android开发之旅(1) 之 Android 开发环境搭建
勤拂拭软件工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html 勤拂拭软件Android开发之旅目录 ...
- Android开发之旅(1) 之 Android 开发环境搭建
工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html Android开发之旅目录 1 前言 很多朋友 ...
- JavaSE 学习笔记01丨开发前言与环境搭建、基础语法
本蒟蒻学习过C/C++的语法,故在学习Java的过程中,会关注于C++与Java的区别.开发前言部分,看了苏星河教程中的操作步骤.而后,主要阅读了<Java核心技术 卷1 基础知识>(第8 ...
随机推荐
- 基于Verilog HDL 的数字电压表设计
本次实验是在“基于Verilog HDL的ADC0809CCN数据采样”实验上进一步改进,利用ADC0809采集到的8位数据,进行BCD编码,以供查表方式相加进行显示,本次实验用三位数码管. ADC0 ...
- mysql基础---日志文件
一 基本日志文件 MYSQL有不同类型的日志文件(各自存储了不同类型的日志),从它们当中可以查询到MYSQL里都做了些什么,对于MYSQL的管理工作,这些日志文件是不可缺少的. 1.错误日志(The ...
- ecstore中kvstore之mongodb
mongodb安装 详细见 http://blog.csdn.net/motian06/article/details/17560067 mongodb扩展安装 详细见 http://blog.csd ...
- extjs最普通的grid
的 <script> Ext.onReady(function () { //1.定义Model Ext.define("MyApp.model.User", { ex ...
- Golang学习笔记:包制作
golang的包跟java as js之类的大不一样,一定要存在GOPATH里面,GOPATH是专门用于存放golang第三方的库,里面有两个文件夹, src:源代码目录 pkg:编译后的第三方包,这 ...
- Oracle GoldenGate 异构平台同步(Mysql到Oracle)
一.OGG安装配置(源端) 1.OGG下载 http://www.oracle.com/technetwork/cn/middleware/goldengate/downloads/index.htm ...
- python模块--ip地址转换为整数
python整数与IP地址转换 [转] 我们有时会将一个整数与IP地址进行互换,用python代码实现很简单 将一个整数如2000000,变为一个IP地址的方式 >>> import ...
- laravel5 html引用问题
1. Composer 安装 编辑 composer.json 文件, require 节点下增加: "illuminate/html": "~5.0" 然后 ...
- Linux下简单的取点阵字模程序
源:Linux下简单的取点阵字模程序 Linux操作系统下进行简单的图形开发,经常会用到取字模的软件,但是Linux并没有像Windows下的小工具可用,我们也并不希望为了取字模而频繁地切换操作系统. ...
- android NDK编译(导入).a文件和编译多个so文件(转)
源:android NDK编译(导入).a文件和编译多个so文件 一.编译一个静态库 libstatic_android.a LOCAL_PATH := $(call my-dir) include ...