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

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

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

(2)经过编译器处理的字节码文件(位置在工作目录下的bin目录,具体编译后的字节码见图)
位置:
这里写图片描述
字节码文件:

漱壕   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(工程的依赖文件,运行环境)

<?xml version="1.0" encoding="UTF-8"?>
<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 文件

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>javase</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

从数据上看,我们可以了解到这些配置主要是描述工程的基本信息:
工程名<name>javase</name>
工程注释描述<comment></comment>
运行时需要的额外Eclipse插件
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>

及其具体加载方式信息
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值