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 ...
随机推荐
- JS动态生成<style>
var nod = document.createElement(“style”), str = “body{background:#000;color:#fff} a{color:#fff;text ...
- android4.0 的图库Gallery2代码分析(二)
最近迫于生存压力,不得不给人兼职打工.故在博文中加了个求点击的链接.麻烦有时间的博友们帮我点击一下.没时间的不用勉强啊.不过请放心,我是做技术的,肯定链接没病毒,就是我打工的淘宝店铺.嘻嘻.http: ...
- html 自定义标签的作用
比如早期的时候,如果浏览器不支持 nav 这个标签的话, style标签中的样式 nav {color: yellow}会不起作用,字体不会变黄. 怎么处理兼容性呢? 用 javascript. 加上 ...
- ural1126 Magnetic Storms
Magnetic Storms Time limit: 0.5 secondMemory limit: 64 MB The directory of our kindergarten decided ...
- python第三方扩展库及不同类型的测试需安装相对应的第三方库总结
如何安装第三方库 1.通过python的第三方仓库pypi中查找想要的第三方库 pypi地址:https://pypi.python.org/pypi pip是一个安装和管理Python包的工具,通过 ...
- 改变cinder默认vg的方法
在存储节点:# pvcreate /dev/sdb# vgcreate vg100gb /dev/sdb # openstack-config --set /etc/cinder/cinder.con ...
- nginx+fastcgi php 使用file_get_contents、curl、fopen读取localhost本站点.php异常的情况
原文:http://www.oicto.com/nginx_fastcgi_php_file_get_contents/ 参考:http://os.51cto.com/art/201408/44920 ...
- mysql优化———第二篇:数据库优化调整参数
摘要 参数调优内容: 1. 内存利用方面 2. 日志控制方面 3.文件IO分配,空间占用方面 4. 其它相关参数 一 摘要 通过参数提高MYSQL的性能.核心思想如下: 1 提高my ...
- 用PS给图标添加外发光效果
最近在做app的时候用到了图标需要根据点击和非点击显示两种状态(原始状态和外发光状态). 如下图: 没办法,因为这是毕业设计的东西,总不能叫同事帮忙处理下.所以自己充当了回美工. 做法如下: 1.打开 ...
- 火狐上的一个post提交工具(主要用于测试接口时候)
添加的过程 安装完后,就可以在下图上,看到一个poster 点击poster就可以看到下图 图中红线圈好的,是必须要填写的 Url是访问路径 Name是参数名称 Value是参数值 需要注意一点的是: ...