大家可能看到HelloWorld例子是不是都觉得博主脑子是不是有问题,怎么拿这么一个弱智的问题和例子拿来讲。实际上并不是这样的,如果是这样的我相信我就没有写这篇博客意思了。因为当我第一次看到java中第一个例子HelloWorld原来还有这么多内容。自己当时也听的懵逼。当然是这样的,懵逼过后就必须要清醒,当我醒后第一反应就是写篇博客来纪念我当时懵逼的样子。当然希望下次各位不要懵逼,并且很淡定说“HelloWorld始终是HelloWorld永远是那么简单”。

这次开发java这个例子呢,采用的开发工具就是记事本就够了,当然如果你用什么Eclipse,那就没什么意思,而且你用的Eclipse用的也是很懵逼的,因为你根本就不懂得Eclipse从编译java到运行Java整个机制过程,只知道写好了,然后“Run as",那是给码农,相信大家都是想成为攻城狮而不是码农吧。成为攻城狮的第一步,先把本博客学下,just for fun 。开始吧

首先,我们先来谈下java环境变量,打开“我的电脑”--->"属性"--->"高级系统设置"--->"环境变量"

大家都很清楚,java的环境变量主要配置三个操作:第一个新建JAVA_HOME环境变量,第二个配置path,第三个配置CLASSPATH

JAVA_HOME="为你的java的JDK中bin文件夹所在的目录",在path最前面追加:"%JAVA_HOME%\bin;%JAVA_HOME%\jre" ,CLASSPATH=".

";相信大家对前面两个为什么这么应该容易了解。我相信大多数人对CLASSPATH=“."为什么只配置一个点即可。这个点的意思是表示当前目录下意思。我们都知道在java中实际上.java文件先编译成.class文件实际上最后运行的就是.class文件。CLASSPATH=“."表示在执行运行命令的时候,会在当前目录路径下去找到.class文件;可能大家还看过这样去配置CLASSPATH的。CLASSPATH=“.;./bin";这里表示就是先在当前目录下寻找相应指定的.class文件,如果没找到,再去当前目录下的bin目录中去找。

为什么要讲解这个呢?这个原理有助于理解下面我们运行java程序。

讲完环境变量的配置我们就开始来编写我们java中的第一个例子

在写java代码之前,我们首先说下一个java代码中的顶级三元素:package、import、class

可能我们在写代码的时候,不太注意这些,但是这些都是规范。所以这次这个HelloWorld的例子中也会遵循这个规范来。

第一步:先在我的桌面创建一个Demo文件夹,并且在文件夹内分别创建src和bin文件夹,大家都知道src文件夹是存放源代码的,bin主要存放编译后的.class文件。

第二步:在src目下新建一个文本文件,修改后缀名为".java"

第三步:打开终端编译

先进入src和bin所在的目录,而不要进入src目录,运行javac编译命令:

大家可能看到为什么和我们平时编译命令有些不一样,这里我们通过-d 目录 将编译好的字节码文件放到指定的目录下,这里的意思就是将编译好的字节码文件放到当前目录的bin目录文件夹下。 那么我们可以打开所在目录的bin目录来看看,原来是空的而现在是有一个带包的HelloWorld.class文件,这是因为我们在写代码时候加上了package com.mikyou.test;所以看到下图就不感到奇怪了。

编译完后就是运行了,大家都知道运行我们使用的是java命令就行,是这么直接这么简单吗?大家都知道我们在运行过程中就和.java文件没有关系,我们需要找的是编译后的.class文件,然后直接用java运行即可。

先说下-cp的意思:-cp 路径 指定类加载路径(CLASSPATH),为什么要使用-cp呢?这就得从刚开始配置环境变量说起了,就是配置环境变量的时候我们配置了一个CLASSPATH为一个点,并且我们说这个点表示在当前目录下去找.class文件的意思,然后我们当前目录是src和bin所在的目录并没有所要的.class文件,所以如果按系统环境变量中来找的话,肯定是找不到的,所以既然系统中找不到的话,那我们就通过-cp自己来指定类加载的路径。不信我们可以试试

注意: java运行时类加载的方式有三种分别是本地类加载、系统类加载、扩展类加载。他们在类加载的时候遵循双亲委托机制。

本地类加载-----委托-->系统类加载(CLASSPATH)-----委托--->扩展类加载:(双亲委托)
         先是本地类加载委托给系统类加载系统类加载再委托给扩展类加载
         扩展类加载没有其他的委托了,那么每次最先查询就是扩展类加载,如果扩展类加载找不到那么就会往上走,查询系统类加载(CLASSPATH)
                       如果系统类加载(CLASSPATH)找不到往上走本地类加载

接下来就是将我们一个HelloWorld打包成.jar文件

我们先在src和bin目录下然后进入bin,然后再将bin目录下的所有文件和目录都打包成jar

这个jar命令的意思就是将bin目录下的所有文件和目录打包(*就是表这个意思),-cvf (c是表示压缩命令,v表示显示压缩的过程信息 f表示 后面要跟上输出文件名称)实际上和Linux系统压缩文件命令很像。打包后文件放到bin目录里面的上级目录也就是bin所处的那个目录。打包完成后大家可以看到和src,bin所在的同一目录下有一个hello.jar

打包好了后,我们就要把这个jar发给客户,客户怎么去运行呢?

1、 将.jar文件放入某个盘,可直接从盘中根目录运行:假如我放在C盘的根目录下

又使用到了-cp,这个还是蛮有用的吧

另一种方法就是无论在哪种路径下,都可以运行这个hello.jar:将.jar文件放入到扩展类加载库(该库所在目录是在你的jdk目录中的jre目录下的libs文件夹内):我的是这个E:\Android\Java\jdk8.0_11\jre\lib\ext:  运行命令: java com.mikyou.test.HelloWorld

会发现无论在哪个路径下都可以运行。并且这个方法还有一点很好就是,你打开Eclispe会发现,jre中的加载jar包中有一个hello.jar,也就是我们以后可以将我们自己封装一些框架代码打包成一个jar包,然后放在该目录下,每次新建一个程序自动加载就不用每次去新建一个libs然后再去add Build Path了,很是方便。

到这里我们java中一个最简单HelloWorld就完成了,是不是没有我们想象中的那么简单。

java中HelloWorld原来还可以这样玩相关推荐

  1. 我的世界java营火如何合成_我的世界如果有了篝火会怎么样? 原来MC还可以这样玩...

    众所周知<我的世界>JAVA版1.14,PE版1.10都加入了全新的方块"篝火".对于这个方块,我们充满了期待!若在这样的版本里玩MC,会发生什么呢? 这次" ...

  2. 在Java中调用Python,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 写在 ...

  3. java中的四个跳转语句_Java中的流程控制语句 (基础篇四)

    流程控制就是对事物次序的布置和安排,在程序中就是对代码执行次序的安排和控制 程序中的流程控制主要有三种:顺序流程.选择流程.循环流程. 顺序流程:比如打印输出的代码按照指定的顺序结构依次排序,打印的结 ...

  4. java中的switch用法,循环,方法,数组以及类

    选择结构语句之switch: switch语句在开发过程中的使用仅次于if语句的使用. switch语句: switch语句格式: switch(表达式) { case 值1: 语句体1; break ...

  5. java中调用python

    在Java中调用Python </h1><div class="clear"></div><div class="postBod ...

  6. java自适应table_【进阶之路】包罗万象——JAVA中的锁

    导言 大家好,我是练习java两年半时间的南橘,下面是我的微信,需要之前的导图或者想互相交流经验的小伙伴可以一起互相交流哦. 在Java中,我们能接触到各种各样的锁,而每种锁因其特性的不同,在不同的的 ...

  7. java中showconfirmdialog_Java小游戏之连连看

    连连看大家应该都玩过,不多说直接上一个做好的界面截图吧,所有的功能都在上面的,要做的就只是如何去实现它们了. 差不多就是这个样子.先说一下大致的思路吧.首先编写基本的界面:把什么按钮啊,表格啊什么的都 ...

  8. Java中的50个关键字

    2019独角兽企业重金招聘Python工程师标准>>> Java中的50个关键字 关键字也称为保留字,是指java语言中规定了特定含义的标示符.对于保留字,用户只能按照系统规定的方式 ...

  9. Java中的简单工厂模式(转)

    Java中的简单工厂模式 举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人 话说:"天地开辟,未有人民,女娲抟土为人."女娲需要用土造出一个个的人,但在女娲造出人之前, ...

最新文章

  1. php image mask,PHP GD使用一个图像来遮蔽另一个图像,包括透明度
  2. php清空dns缓存文件,dns清空-windows刷新本地DNS缓存的几种方法
  3. 从独角兽到上市:我们与TAPD的故事
  4. Go中对两个 nil 进行比较的结果是什么?
  5. 《面向数据科学的概率论》翻译活动期待大家的参与 | ApacheCN
  6. Query siblings()
  7. oracle to date mysql_mysql中怎么实现oracle中的to_char和to_date
  8. (十二)Linux内核驱动之poll和select
  9. 某些函数原型及其用法
  10. tensorflow中的py_function与watch
  11. vue点击后html放大,vue实现点击图片放大效果
  12. win10各版本的历史记录
  13. Microsoft Excel 教程:如何在 Excel 中使用条件格式?
  14. Code39码和Code93码的区别
  15. 区块链+珠宝供应链金融:除了解决信任问题,他们想让数字资产流动起来
  16. 国学大师 master of Chinese culture
  17. Python报错ModuleNotFoundError: No module named ‘concurrent‘
  18. 直播平台搭建中使用Nginx推流多个直播平台解决方案
  19. BZOJ 1124 [POI2008]枪战Maf 贪心+乱搞
  20. 计算机组成原理3.6高速缓冲存储器Cache

热门文章

  1. 中南大学材料院matlab考试题,中南大学材料院matlab操作题集答案
  2. 智慧工地安全施工实时监测系统解决方案
  3. 编译原理基本定义(文法、算符文法、算符优先文法、算符优先关系表、算符优先分析过程)
  4. Microbiome:西农韦革宏团队简化合成菌群通过激活ISR防治黄芪根腐病
  5. impala中 alter table add partition 对HDFS文件权限的影响
  6. 从刚体动力学方程到 MATLAB 多种方法仿真验证
  7. 人类高质量文章:阿里大佬的回顾
  8. 英语单词Caement水泥
  9. H5怎么制作?快来看这个H5制作平台的案例你可能就明白了
  10. 轻量级网络Ghostnet(GhostConv(幻影卷积)、Ghost BottleNeck)详解