黑马程序员技术交流社区

标题: 每一个小问题,都要当成救命稻草(2) [打印本页]

作者: 多多米    时间: 2015-1-24 13:05
标题: 每一个小问题,都要当成救命稻草(2)
话说卤煮在某年某时某月看见过这么一个关于哥伦布环游世界的小故事。
      1492年,哥伦布发现了新大陆。从海上回来,他成了西班牙人民心目中的英雄。国王和王后也把他当作上宾,封他做海军上将。可是有些贵族瞧不起他,他们用鼻子一哼,说:“哼,这有什么希罕?只要坐船出海,谁都会到那块陆地的。”
       在一次宴会上,哥伦布又听见有人在讥笑他了。“上帝创造世界的时候,不是就创造了海西边的那块陆地了吗?发现,哼,又算得了什么!”哥伦布听了,沉默了好一会儿,忽然从盘子里拿个鸡蛋,站了起来,提出一个古怪的问题:“女士们,先生们,谁能把这个鸡蛋竖起来?”
       鸡蛋从这个人手上传到那个人手上,大家都把鸡蛋扶直了,可是一放手,鸡蛋立刻倒了。最后,鸡蛋回到哥伦布手上,满屋子鸦雀无声,大家都要看他怎样把鸡蛋竖起来。
       哥伦布不慌不忙,把鸡蛋的一头在桌上轻轻一敲,敲破了一点儿壳,鸡蛋就稳稳地直立在桌子上了。
    “这有什么希罕?”宾客们又讥笑起哥伦布来了。
    “本来就没有什么可希罕的,”哥伦布说,“可是你们为什么做不到呢?”
      宾客们一个个强词夺理:“鸡蛋都破了,那算什么呢?”
      哥伦布却继续保持不以为然的态度:“我在刚开始定条件时,曾有说过不允许把鸡蛋敲破?”
      宾客们一时哑口无言.
本系列的主题的帖子,仅仅针对新手,因为卤煮现在在JAVA方面也是新手。
每个人都说视频里面讲过,但是有谁在论坛当中总结过呢?
视频讲过那是视频的,就像写程序一样,某一个功能有人写出来有人写不出来,写不出来的人说写出来的人的代码简单,自己也想到过,但是为什么写不出来功能的那位,你当初就没这么写呢?

鄙人只是把一些大家相对可能会遗漏的地方补充整理出来。
我的目的只是想大家能热烈讨论,更多的思维才能碰撞出更多的火花。
话说这些都是卤煮看了老毕001-006这六个视频总结出来的笔记,各处找资料,亲们好歹给点面子。
不喜勿喷!

言归正传,本帖将会的问题如下:
1、Java语言的运行机制如何?
2、什么是JVM?有什么作用?工作机制?
3、什么是JRE(J2RE)?
作者: 多多米    时间: 2015-1-24 14:01
计算机高级编程语言按照程序的执行方式分为:编译型语言和解释型语言
    编译型语言:专门的编译器,针对特定的操作系统将源程序代码一次性编译为计算机能识别的语言(C、C++)
解释型语言:使用专门的解释器,将源程序代码逐条地解释成特定平台的机器指令,解释一句执行一句(PHP、ASP等)

Java字节码具有平台无关性,所以可以跨平台,只是Java虚拟机需要对应相应平台
Java语言并不属于以上分类,Java是编译型和解释型的综合体
首先,Java采用通用的编译器将源程序编译为与平台无关的字节码文件(class文件)
然后,Java虚拟机(JVM)对字节码文件解释执行
下图为Java代码的具体的执行过程:
C:\Users\Administrator\Desktop\1.png

3、什么是JVM?有什么作用?工作机制?
定义:
     JVM(Java Virtual Machine)意思为Java虚拟机。可在实际计算机上模拟各种计算机功能。有自己完善的硬件架构,例如处理器、堆栈和寄存器等还具有相应的指令系统。

作用:
     JVM中类的装载是由类加载器(ClassLoader)和它的子类实现,其负责在运行时查找和装入类文件的类。
     1、JVM是Java字节码的执行引擎,为Java程序的执行提供必要的支持。
     2、优化Java字节码,使之转化为更有效率的机器指令。
     3、JVM屏蔽了与具体操作系统相关的信息,Java程序生成能够在JVM上运行的字节码文件(class文件),JVM负责将每一条要执行的字节码送给解释器,解释器再将相应的字节码转化为对应平台的机器指令并执行,由此实现跨平台。(不同平台,不同的JVM)

工作原理:
JVM在整个JDK中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的操作系统环境。
操作系统中的JVM通过JDK中的java.exe来实现,主要通过以下步骤:
(1)创建JVM装载环境和配置
(2)装载jvm.dll
(3)初始化jvm.dll
(4)调用JNIEnv实例装载并处理class类
(5)运行Java程序

4、什么是JRE(J2RE)?
简介:JRE是Java Runtime Enviroment的简称,及Java运行时环境,是Java程序运行的必要环境集合,主要由:Java虚拟机、Java平台核心类以及若干支持文件组成。
Sun公司的JRE产品包括:Java Runtime Enviroment和Java Plug-in Java Runtim Enviroment两部分,是可以运行、测试和传输应用程序的Java平台。
如果需要在浏览器中运行Java Applet程序,JRE需要辅助软件:Java Plug-in。该软件可以使Java Applet和JavaBeans组件在使用Sun公司的JRE环境的浏览器环境中运行。该软件可以在Navigator和IE中,微软自带的虚拟机对Java环境支持并不完全,最好安装一个Sun公司的JRE或者JDK。

JRE的版本管理:
同一台计算机上安装多个不同版本的JRE并不影响程序的运行,因为控制台使用java.exe工具执行java程序时,操作系统将按照如下顺序查找JRE环境:
(1)先查找当前目录下是否有JRE
(2)再查找父目录下是否有JRE
(3)接着再在环境变量PATH指定的路径中查找JRE
(4)注册表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Enviroment\查看 CurrentVersion的键值指向哪一个JRE
最常用的是在PATH中查找JRE环境,一般情况下,每一种Java软件在运行之前都会在批处理文件之中临时设置PATH值,然后把自己使用的JRE路径放置在PATH路径的最前端,所以肯定会使用自带的JRE,不会造成版本混乱

JRE的基础类库:
JRE自带的基础类库主要在JRE\lib\rt.jar文件中,该文件包括JAVA 2平台中运行的所有类库,与JRE的版本一致。
程序运行时,ClassLoader查找和加载程序引用到的基类库和其他类库。
基类库:ClassLoader会自动到rt.jar中加载(操作系统通过PATH环境变量定位JRE,再确定基类库的位置)
其他的类库:ClassLoader在环境变量CLASSPATH中指定的路径搜索,按照先来先到的原则搜索,放在CLASSPATH前面的类库优先被搜到
由此可知:在JAVA程序启动之前,先设置好PATH和CLASSPATH的环境变量
作者: 多多米    时间: 2015-1-24 14:04
Java代码具体执行过程
作者: 我为你着迷    时间: 2015-1-24 14:46
哥们 你这挖掘的东西实在太深了啊  完全跟不上啊{:3_50:}
作者: Hzw同学    时间: 2015-1-24 15:35
看到头大,不太懂。
作者: 多多米    时间: 2015-1-24 15:52
我为你着迷 发表于 2015-1-24 14:46
哥们 你这挖掘的东西实在太深了啊  完全跟不上啊

擦  每一东西都研究一下嘛   归纳一下
作者: 多多米    时间: 2015-1-24 15:53
Hzw同学 发表于 2015-1-24 15:35
看到头大,不太懂。

你就当顺序看
作者: 多多米    时间: 2015-1-24 18:22
沉了么?
作者: yueye13    时间: 2015-1-24 18:35
太细致了啊      
作者: 多多米    时间: 2015-1-24 19:48
yueye13 发表于 2015-1-24 18:35
太细致了啊

程序本身就要细致
作者: xiaoyi    时间: 2015-1-24 21:24
看之前回帖
作者: 多多米    时间: 2015-1-24 21:48
xiaoyi 发表于 2015-1-24 21:24
看之前回帖

呃  神马意思?
作者: 邓士林    时间: 2015-1-24 21:59
好的资料,看一遍加强记忆了
作者: 多多米    时间: 2015-1-24 23:02
邓士林 发表于 2015-1-24 21:59
好的资料,看一遍加强记忆了

常看常新
作者: cuixinfu    时间: 2015-1-24 23:13
什么情况 有点不太懂  讲的深啊
作者: 多多米    时间: 2015-1-24 23:23
cuixinfu 发表于 2015-1-24 23:13
什么情况 有点不太懂  讲的深啊

实话实说,这真是不深
作者: 多多米    时间: 2015-1-25 10:35
现在大家都学哪儿?
作者: 游人醉    时间: 2015-1-27 03:46
学渣表示技术分完全无从下手啊
作者: 以利亚    时间: 2015-1-27 10:23
哇去,这么精辟,到位
作者: enjoy    时间: 2015-1-27 11:26
牛逼啊!
作者: 多多米    时间: 2015-1-27 23:02
以利亚 发表于 2015-1-27 10:23
哇去,这么精辟,到位

慢慢看,时间长着呢
作者: 多多米    时间: 2015-1-27 23:04
enjoy 发表于 2015-1-27 11:26
牛逼啊!

我离牛逼还远着呢
作者: 多多米    时间: 2015-1-27 23:06
游人醉 发表于 2015-1-27 03:46
学渣表示技术分完全无从下手啊

深挖洞,广积粮,其实你看到的视频总结出来再扩展开来就是技术分
作者: 游人醉    时间: 2015-1-28 00:16
本帖最后由 游人醉 于 2015-1-28 00:18 编辑
多多米 发表于 2015-1-27 23:06
深挖洞,广积粮,其实你看到的视频总结出来再扩展开来就是技术分

了解了下,每天回复5次帖子,有5个币,发5次主题有10个币。黑马币
作者: 黑馬灬劍俠灬    时间: 2015-1-28 23:54
:dizzy:  深奥
作者: 多多米    时间: 2015-1-29 12:08
黑馬灬劍俠灬 发表于 2015-1-28 23:54
深奥

看看就行,以后能记得再回来看
作者: 多多米    时间: 2015-1-30 15:31
其实我是想让你们看见这篇帖子,这篇帖子不能沉
作者: yukuoyuan    时间: 2015-1-30 20:59
这写东西都是第一天的内容,很简单的。。
作者: 还是菜鸟    时间: 2015-1-30 23:21
看前回帖




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2