浅谈Java前奏,背景,JRE,JVM以及程序执行过程

好久没学习Java了,来复习一遍java的第一章吧。

一、特征--跨平台原理

1.语言的分类

1)机器语言  优点:直接运行,速度快   缺点:不能跨平台

2)c、c++等编译型语言

使用特定的编译器针对特定的平台,将代码一次性的翻译成该平台所能识别的机器指令,并包装为该平台所能识别的文件,可以脱离开发环境运行

优点:高效   缺点:可移植性不强

 3)perl,basic等解释型语言

使用专门的解释器,针对特定的平台,解释成该平台所能识别的机器码指令,解释一条执行一条

优点:可移植性好   缺点:代码外漏,低效

那么Java语言是编译解释型语言,java编译器把Java源码翻译为字节码指令,并存放在.class文件中,运行时使用特定的Java编译器,把字节码指令翻译成相应的机器码指令,边翻译边执行

java文件----->java编译器----->.class文件----->java解释器------>平台(os和硬件)

二、JRE

jre 意思就是java运行时的环境,包括java类库、jvm以及一些配置文件

就是安装目录中的jre文件,jdk文件则是软件开发者的工具包

三、JVM

jvm虚拟机是JRE中的核心部分,java程序运行时必须启动它包含了

  1)cpu:JAVA编译器

  2)栈内存:存放基本类型数据和引用

  3)堆内存:存放对象(这里我的理解就是,好比在一个鱼塘,鱼塘看作堆,然后往塘里放鱼,鱼比作对象)

  4)方法区:存放每个类的方法定义和方法体

  5)垃圾回收器:回收堆内存中的垃圾对象

  6)类加载器,用来加载.class文件,它分为三类

    i)一次性加载JVM运行所必须的类

    ii)加载API类

    iii)加载自定义类

四、执行过程

  1)加载字节码文件

  2)检验字节码的合法性

  3)分配和管理内存

  4)翻译字节码指令

  5)垃圾回收

五、环境变量

在OS中定义的,供应用程序访问的变量

查看:计算机-->属性-->高级系统设置-->环境变量

  DOS窗口:set命令 + 变量名

情空环境变量:set命令 + 变量名 =

六、path环境变量:

定义OS查找或运行可执行文件的路径

在设置环境变量时如果对dos命令不太熟悉可以直接在计算机--属性--环境变量中直接设置

一般情况下直接设置一个path变量,路径(java-jdk-bin这个文件的位置,因为这个文件中有java.exe,javac.exe程序,我们要编译、运行java文件时要运行这些程序):(默认)C:\Program Files\Java\jdk1.6.0_13\bin

当然也可以设置一个classpath变量,通过这个变量中的路径,运行时可以找到.class文件,这里定义了JVM查找或并运行字节码文件的路径(.class)

在Dos下运行时(这里之前没太注意,然后用绝对路径编译时后也运行时出了点问题)

javac  java文件路径名

java  类名

还有就是 .class文件和java文件分开存放在src,classes文件夹中

dos命令 javac -d 路径名:指定编译之后的.class文件存放的路径

差不多第一章的内容就是这些了,然后就是写一个伟大的程序,Hello World!。。

时间: 2024-10-11 07:42:45

浅谈Java前奏,背景,JRE,JVM以及程序执行过程的相关文章

【转】浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

浅谈java异常[Exception]

本文转自:focusJ 一. 异常的定义 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常.绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败.之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意. 记得当初学习java的时候,异常总是搞不太清楚,不知道这个异常是什么意思,为什么会有这个机制?但是随着知识的积累逐渐也

浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

浅谈java类集框架和数据结构(2)

继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主要有最重要的三种实现:ArrayList,Vector,LinkedList,三种List均来自AbstracList的实现,而AbstracList直接实现了List接口,并拓展自AbstractCollection. 在三种实现中,ArrayList和Vector使用了数组实现,可以认为这两个是

浅谈JAVA中的“hashcode()”方法

浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 一.hashCode方法的作用 对于包含容器类型的程

浅谈java线程池

熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor.大家可能了解到它的原理,甚至看过它的源码:但是就像我一样,大家可能对它的作用存在误解...现在问题来了,jdk为什么要提供java线程池?使用java线程池对于每次都创建一个新Thread有什么优势? 对线程池的误解 很长一段时间里我一直以为java线程池是为了提高多线程下创建线程的效率.创建好一些线程并缓存在线程池里,后面来了请求(Runn

浅谈-Java设计模式之动态代理

动态代理模式(Dynamic Proxy Pattern): 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的. 首先我们先来看看java的API帮助文档是怎么样对这两个类进行描述的: InvocationHandler该接口唯一方法 invoke(Object proxy, Method method, Object[] args) Object

浅谈Java中的栈和堆

人们常说堆栈堆栈,堆和栈是内存中两处不一样的地方,什么样的数据存在栈,又是什么样的数据存在堆中? 这里浅谈Java中的栈和堆 首先,将结论写在前面,后面再用例子加以验证. Java的栈中存储以下类型数据,栈对应的英文单词是Stack 基本类型 引用类型变量 方法 Java的堆中存储以下类型数据,堆对应的英文单词是Heap 实例对象 在函数中定义的一些基本类型的变量(8种)和对象的引用变量都是在函数的栈Stack内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当

浅谈Java接口(Interface)

浅谈Java接口 先不谈接口,不妨设想一个问题? 如果你写了个Animal类,有许多类继承了他,包括Hippo(河马), Dog, Wolf, Cat, Tiger这几个类.你把这几个类拿给别人用,但是别人想给动物加上宠物功能,要怎么办呢? 根据以往的知识,我们可以: 把Pet方法加入Animal类 这样所有的子类都有Pet方法,以后新继承Animal的动物也有这个方法. 这个方案很简单,但是这个方案也很操蛋.为什么? 有人会养河马吗?有人会养狼养狮子吗?不太行. 如果都是Pet方法,狗需要遛,