您的位置:首页 > 编程语言 > Java开发

回忆java来时路-第一章 关于那个美好的梦:“一次编写,到处运行”

2016-09-13 10:39 204 查看
     回想自己的工作和学习经历,作为程序猿已经走过了20个年头,从1999年接触java到现在也有17个年头,可以说自己的程序猿生涯已经接近尾声。现在脱离一线开发工作,因此有时间来梳理下过去这些年自己所学所想的一点收获,算对这段生涯有个交代。如果能够对新生代在java学习路上有所助益、少走弯路,就算意外之喜。
     在这系列文章里,我不会就java的各种语法规则做非常详细和系统的描述,因为这方面的书籍和好文章已经够多,我只想从自己一个普通程序猿的角度,记录那些曾经困扰过我、阻碍自己的一些知识点做些说明,仅仅是个人自圆其说的了解。因为知识是永无止尽的,我只能在自己所了解的知识范围内做到尽量的能够自洽,不对之处请高手纠正,也可以讨论。
     第一章 关于那个美好的梦:“一次编写,到处运行”
     java语言的初衷,作为一个高级语言,希望能够在各种软硬件体系中能够运行,写代码的程序猿不用关心宿主机器和操作系统的本地特性限制。于是为了实现这个目标,java弄了一个虚拟机,其实就是增加了一层隔离语言编译和机器内核的中介。但一开始这个jvm在各平台的安装和使用本身也是各种环境问题,所以起初的java学习者,为了运行一个最基本的main程序也是颇费周折,最后成了“一次编写,到处编译”。不过这个想法的基本方向还是正确的,后来随着各个版本优化,java影响力的逐步扩大,各个硬件、系统平台也逐渐对jvm支持得更好,对现在的程序员来说,确实减少了被环境折磨的痛苦。
     尽管如此,现在让一个从未学过java的初学者,在不借助任何IDE的情况下,运行起来一个基本的java main程序还是会有磕磕绊绊的感觉,不知道其他人如何,反正我是有这种经历。那么这个过程主要是哪些问题拦路?
     1)环境变量设置:
          大多人从官网上下载jdk安装包,直接运行安装,此时会碰到JSE、JRE、JEE等一堆雷同的概念,他不知道通常说的jdk其实就是指JSE,他可能一股脑全下载下来都安装了。
          然后下载来,安装完成后,设置系统环境变量,此时他又分不清PATH和CLASSPATH该设置哪个路径。其实这里通常说的就是PATH,目的是为了在不提供全路径的情况下,能够直接输入javac等jdk的命令,因此这里应该把javac这个命令所在的目录加到PATH路径里。
     通常是先设置JAVA_HOME这个值为jdk1.x.x这个目录的全路径,然后把$JAVA_HOME/bin加到PATH后面,这样设置的原因是有可能多处使用jdk1.x.x这个目录的地方,以及方便地改动这个目录值。
      设置好这个变量后,命令模式下,cd到任意目录执行命令行javac、java等都是系统可以认识的。否则会提示你找不到这个命令的错误,你得写全jdk1.x.x/bin/javac这样的全路径,系统才认识。
      2)名字的困扰:一个初学者,他意识中既然是一门语言,那就按基本语法写代码就够了,大多书上也是这么说明的,列给你一个简单的HelloWorld代码,里面有个main函数,像这样:
package com.learn.test;

/**
 * Created by xxxxx on 16/9/13.
 */
public class HelloWorld {

    public static void main(String[] args) {

        System.out.println("hello world!");

    }
}
然后把这个文件保存在一个目录下,此时会碰到第一个容易忽略的地方,有人会随便命名(例如Test.java),这样在当前目录的命令行下执行javac编译时会出错。java要求文件名和类名必须严格一样,也就是这里一定要保存为HelloWorld.java这个文件名,不能随便取名。
     改名后,你执行javac编译成功了,接下去继续执行java运行这个类,发现还是报错:“错误: 找不到或无法加载主类 HelloWorld”,按提示是说找不到这个类,这个时候就迷惘了,内心的疑问是:“明明就在当前目录下,怎么说找不到?”。后续不知道怎么做才能编译成功,如果没人指导,估计这里要折腾半天,消耗你学习之初的兴趣与激情,当时我就放弃了。
     其实这里隐含的java思维逻辑是这样:java的包路径一定要和类所在的实际目录路径严格一样,以上面代码为例,它的 package 是com.learn.test,那么这个类的物理位置应该从当前目录算起,在它的 com/learn/test子目录中。因此老实在当前目录下新建com/learn/test的子目录,把HelloWorld.java移到这个子目录里,然后再执行java HelloWorld,此时成功。

以上就是我记得头几天学习java时碰到过的困惑,如果你没中招,恭喜你幸运儿,如果中招,当你看到这篇文章,就释然了:)。
     
     
      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐