在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.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 ...
随机推荐
-
分析DH加密算法,一种适基于密钥一致协议的加密算法。
DH Diffie-Hellman算法(D-H算法),密钥一致协议.是由公开密钥密码*的奠基人Diffie和Hellman所提出的一种思想.简单的说就是允许两名用户在公开媒体上交换信息以生成&quo ...
-
解决SharePoint文档库文件在搜索结果页面显示的标题和文档的标题不一致问题(search result)
问题表现: SharePoint 2013 爬网后,搜索一个文档,虽然搜到了,但是显示有点问题,如图: 原因分析: 造成该问题的原因是,该文档除了本身有一个名称外,在文档metadata的title属 ...
-
ASP.NET动态加载用户控件的方法
方法是使用LoadControl方法,根据用户控件的相对路径,动态生成用户控件对象 用户控件 public class UserControlA :UserControl { public UserC ...
-
WPF数字输入框和IP地址输入框
数字输入框 简介 在业务中,我们经常需要限制用户的输入,比如限制输入长度,限制只能输入数字等等.限制输入长度WPF内置的TextBox已经帮我们解决了,但是限制输入数字却并未在WPF中内置解决方案.使 ...
-
keepalived+mysql主主
实验架构图: 一.mysql 5.5双机热备份 master-master 1.系统环境 操作系统:centos6.6 masterA IP:192.168.166.161 masterB ip:19 ...
-
易通电脑锁2007V6.3.3.3无法卸载问题解决办法
易通电脑锁2007V6.3.3.3无法卸载问题解决办法把原版文件拷贝回去.bat@echo offcolor 2Fecho 该批处理会把易通电脑锁2007版原文件拷贝回去,解决易通电脑锁卸载时出现的运 ...
-
真机无法接收到android.provider.Telephony.SMS_RECEIVED的问题
小米2S有一个设定会导致,App无法接收到android.provider.Telephony.SMS_RECEIVED广播. 解决方案 关闭系统短信优先设置 短信-设置-高级设置-系统短信优先 ...
-
Uva 548 二叉树的递归遍历lrj 白书p155
直接上代码... (另外也可以在递归的时候统计最优解,不过程序稍微复杂一点) #include <iostream> #include <string> #include &l ...
-
使用Laya引擎开发微信小游戏(上)
本文由云+社区发表 使用一个简单的游戏开发示例,由浅入深,介绍了如何用Laya引擎开发微信小游戏. 作者:马晓东,腾讯前端高级工程师. 微信小游戏的推出也快一年时间了,在IEG的游戏运营活动中,也出现 ...
-
Confluence 6 附件存储提取文本文件
当基于文本的文件上传到 Confluence(例如,Word,PowerPoint 等),这些文件中的文本是可以提取并且添加到索引中的,用户可以通过索引来搜索这些文件中的文本内容,不仅仅是搜索文件名. ...