字节码文件和settings、project、classpath的作用

1.为什么说Java具有平台无关性?
  这里所说的平台无关性,是要在不同的平台上装Java 虚拟机(Jvm),比如在windows安装虚拟机编译的文件,放在linux系统上运行,linux就要装Jvm,Jvm可以将Java文件编译成字节码文件(二进制文件),字节码与平台无关。
2.什么是字节码文件?
  字节码文件是经过编译器预处理过的一种文件,是JAVA的执行文件存在形式,它本身是二进制文件,但是不可以被系统直接执行,而是需要虚拟机解释执行,由于被预处理过,所以比一般的解释代码要快,但是仍然会比操作系统直接执行的慢。(后面有案例)
3.编译执行过程?
  源文件(就是我们所写的程序)经过编译器后编译成了二进制字节码文件,用户要看到结果,需要Java虚拟机(可以通过软件实现)此虚拟机可以读取和执行字节码。
字节码文件和settings、project、classpath的作用_第1张图片
(1)源代码:

public class HelloWorld {
public static void main(String[] args) {
    System.out.println("hello wrold");
}
}

(2)经过编译器处理的字节码文件(位置在工作目录下的bin目录,具体编译后的字节码见图)
位置:
字节码文件和settings、project、classpath的作用_第2张图片
字节码文件:

漱壕   4 "  com/unistrong/day01/HelloWorld  java/lang/Object <init> ()V Code
      LineNumberTable LocalVariableTable this  Lcom/unistrong/day01/HelloWorld; main ([Ljava/lang/String;)V      java/lang/System   out Ljava/io/PrintStream;  hello wrold
    java/io/PrintStream   println (Ljava/lang/String;)V args [Ljava/lang/String; 
SourceFile HelloWorld.java !               /     *??   
                 
           7      ???   

                            !

目录解析:
./settings(放置一些配置文件信息)

eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8

./classpath(工程的依赖文件,运行环境)


<classpath>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="output" path="bin"/>
classpath>

   运行的系统环境(kind=”con”),工程的library的版本是1.8

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

   源文件的具体位置(kind=”src”),path放在src目录下的Helloworld.java

<classpathentry kind="src" path="src"/>

   项目的输出目录(kind=”output”),path编译后字节码文件所在的目录Helloworld.class

<classpathentry kind="output" path="bin"/>

    总体上说这个文件就是配置整个工程的运行环境。
.project 文件


<projectDescription>
    <name>javasename>
    <comment>comment>
    <projects>
    projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuildername>
            <arguments>
            arguments>
        buildCommand>
    buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanaturenature>
    natures>
projectDescription>

从数据上看,我们可以了解到这些配置主要是描述工程的基本信息:
工程名javase
工程注释描述
运行时需要的额外Eclipse插件

org.eclipse.jdt.core.javanature

及其具体加载方式信息


org.eclipse.jdt.core.javabuilder




  如果在开发过程中向工程里面加入了很多额外的插件,则必然会导致你的Eclipse启动速度变慢。在这种情况下,可以到这个文件里面去掉一些插件,不过这样一来你在开启那些关联文件的时候会加载那些插件。
总结: java所说的平台无关性是指编译后的字节码文件,各个工程目录的作用是什么,我们都弄明白,这只是对javase目录结构解析,只是用java基础工程。

你可能感兴趣的:(JavaSE基础原理)