`

运行时与编译时

阅读更多
运行时与编译时

博文转载:http://www.importnew.com/1796.html

总结:

1.
public class ConstantFolding {
 
    static final  int number1 = 5;
 
    static final  int number2 = 6;
 
    static int number3 = 5;
 
    static int number4= 6;
 
    public static void main(String[ ] args) {
 
          int product1 = number1 * number2;         //line A
 
          int product2 = number3 * number4;         //line B
 
    }
 
}


win+r -> javac ConstantFolding.java -> 使用反编译器打开 ConstantFolding.class

public class ConstantFolding
{
  static final int number1 = 5;
  static final int number2 = 6;
  static int number3 = 5;
  static int number4 = 6;
 
  public static void main(String[ ] args)
  {
      int product1 = 30;
      int product2 = number3 * number4;
      System.out.println(product1 + " "+product2);
  }
}


说明:
(1)执行java ConstantFolding,两者结果都为30
但product1的值是在编译期计算的,product2则是在运行时计算的
(2)原因:常量折叠是一种Java编译器使用的优化技术。由于final变量的值不会改变,因此就可以对它们优化。

2.编译时与运行时



说明:
(1)一个java文件的编译执行过程
Test.java(Java文件)  ->  javac.exe  -> Test.class(字节码文件)-> java -> 运行结果
注:java 执行时,文件不加后缀名.class
原因:java执行中规定,java xxx.yyy ,xxx.yyy表示yyy类在xxx包内,即 java Test.class表示执行 Test包中的class类



小技巧:
在java源文件所在文件夹建立一个记事本文档,输入以下3行代码
javac HelloWorld.java
java HelloWorld
@pause
将其保存为"Java运行批处理.bat"
然后双击这个批处理文件,将出现cmd窗口下的编译运行结果

(2)图中概念解析
a.JDK(java development kit)Java 语言的软件开发工具包
具体参考:
百度知道JDK

b.JRE(Java Runtime Environment,Java运行环境)
具体参考:
百度知道JRE

c.JVM(Java Virtual Machine,Java虚拟机)
具体参考:
百度知道JVM

d.JIT Compiler(Just-in-time Compiler) 即时编译
具体参考:
百度知道JIT

e.
JDK、JRE与JVM的区别
JIT的概念

3.常见发生在编译时或运行时的概念

编译时运行时
方法重载方法重写
@Override@Test
泛型构造代理
继承组合


(1)查看编译过的代码的作用
a.代码优化
b.解决泛型相关的问题

(2)方法重载与方法重写
(3)泛型
Test.java
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("1");
		list.add("1");
		list.add("1");
		list.add("1");
		list.add("1");
		for(String str : list){
			System.out.println(str);
		}	
	}

Test.class
  public static void main(String[] paramArrayOfString)
  {
    ArrayList localArrayList = new ArrayList();
    localArrayList.add("1");
    localArrayList.add("1");
    localArrayList.add("1");
    localArrayList.add("1");
    localArrayList.add("1");
    for (Iterator localIterator = localArrayList.iterator(); localIterator.hasNext(); ) { String str = (String)localIterator.next();
      System.out.println(str);
    }
  }

(4)
继承 – 发生在编译时,因为它是静态的

代理或者组合 – 发生在运行时,因为它更加具有动态性和灵活性。

(5)注解
@Override是一个简单的编译时注解,它可以用来捕获类似于在子类中把toString()写成tostring()这样的错误。在Java 5中,用户自定义的注解可以用注解处理工具(Anotation Process Tool ——APT)在编译时进行处理。到了Java 6,这个功能已经是编译器的一部分了。

@Test是JUnit框架用来在运行时通过反射来决定调用测试类的哪个(些)方法的注解。

(6)其他内容
  • 大小: 53.7 KB
  • 大小: 63.8 KB
分享到:
评论

相关推荐

    java的编译时多态和运行时多态

    Java 编译时多态和运行时多态 Java 编译时多态和运行时多态是 Java 语言中两个重要的概念,它们都是多态性的实现方式,但它们在实现机制和应用场景上有所不同。 编译时多态 编译时多态是指在编译期根据参数列表的...

    java的编译路径与运行路径

    当你直接用`javac`命令编译单个源文件时,例如`javac HelloWorld.java`,编译后的类文件(HelloWorld.class)将被创建在与源文件相同的目录下。如果源文件包含`package`声明,例如`package com.test;`,那么`javac`...

    java代码快捷编译运行工具

    Java代码快捷编译运行工具是针对初学者设计的一款实用程序,旨在简化Java编程过程中常见的编译和运行步骤。对于刚接触Java编程的开发者来说,通过命令行(CMD)进行源码的javac编译和java运行可能会感到繁琐,而这款...

    Android-Android中编译时注解实际运行Demo仿照ButterKnife来写的

    在Android开发中,注解(Annotation)是一种强大的元数据,可以为代码添加额外的信息,而这些信息可以在编译时或运行时被解析和利用。ButterKnife是一款著名的Android视图绑定库,它通过注解简化了UI元素的绑定,...

    C语言性能提升:编译时与运行时优化深度解析

    ### C语言性能提升:编译时与运行时优化深度解析 C语言作为一种高效且灵活的编程语言,在系统软件开发领域有着不可替代的地位。其特点包括简洁高效、接近硬件、良好的可移植性、丰富的库支持、支持结构化编程以及...

    编译和运行java程序的小工具

    然而,对于初学者或需要快速测试代码的人来说,传统的编译和运行步骤可能会显得繁琐。这个名为“编译和运行Java程序的小工具”就是为了简化这一过程而设计的。下面将详细解释这款小工具的工作原理以及如何利用它来...

    交叉编译qt库并在树莓派上运行qt程序

    7. **32位与64位兼容性**:在选择编译器时必须注意,确保编译出的可执行文件与目标平台的位数匹配。例如,如果树莓派是32位系统,那么生成的可执行文件也应该是32位的。 8. **虚拟机环境**:在Windows上使用虚拟机...

    JAVA范例 四)异常处理---编译时异常、运行时异常

    本文将深入探讨"JAVA范例 四)异常处理---编译时异常、运行时异常"这个主题,结合标签"源码"和"工具",我们可以理解这与实际编程实践和可能使用的开发工具如Struts2框架相关。 首先,我们来看编译时异常。编译时...

    Java编译运行、反编译、制作javadoc工具

    当我们需要查看已编译的.class文件的源代码时,就需要反编译工具。Java的反编译工具有很多,如JAD、JD-GUI等。本工具集成了这一功能,可以将.class文件转换回.java源代码,帮助开发者理解已有的代码或逆向工程。 四...

    解决VS2010编译的程序在XP不能运行的问题

    在使用 VS2010 进行编译时,可能会遇到程序在 XP 系统上不能运行的问题。这主要是由于 VS2010 编译出的程序依赖于 Microsoft Visual C++ 2010 Redistributable-x86,但 XP 系统可能没有安装这个组件。今天,我们将...

    linux驱动编译与运行-驱动程序

    ### Linux驱动编译与运行详解 #### 一、理解Linux驱动程序 Linux驱动程序是操作系统与硬件设备之间的桥梁,负责管理硬件资源并提供相应的服务。它们通常被编写为内核模块,可以动态加载或卸载,以适应系统需求的...

    基于Redhat 9.0实现Linux 0.01编译与运行.pdf

    在实现Linux 0.01编译与运行时,作者采用了Redhat 9.0平台作为开发环境,GNU工具链作为开发工具,并使用GNU工具链的AT&T语法汇编器进行汇编程序的编译。在源代码语法的修改方面,作者参照Linux 0.11源代码,对Linux ...

    Java在线编辑编译运行示例

    3. **运行与调试**:成功编译后的Java程序可以在服务器上运行,返回执行结果。部分在线编辑器还提供了运行控制台,显示程序输出,甚至支持简单的调试功能,如设置断点、单步执行等。 4. **版本控制**:为了便于多...

    java源代码反编译

    尽管反编译的代码可能无法与原始源代码完全一致,尤其是当原始代码使用了复杂的编译器优化时,但JadGUI可以提供足够的信息来理解和研究代码逻辑。 反编译工具有时也用于分析恶意软件或版权保护的问题,但需要注意的...

    编译原理:第9章 运行阶段存储组织与分配.pdf

    编译原理中,运行阶段的存储组织与分配是程序运行时重要的支撑技术之一。它的核心是为程序中定义的变量、常量和函数等分配必要的存储空间,并在程序执行过程中对其进行有效的管理。 首先,运行时存储组织与分配的...

    运行时编译C#的unity pack

    运行时编译C#的unity pack

    .Net Core - 源代码动态编译

    动态编译与传统的静态编译有着显著的区别,静态编译是在应用程序发布之前将源代码转换为机器语言,而动态编译则是在程序运行过程中根据需要即时进行。这种技术在.Net Core中通过Just-In-Time(JIT)编译器得以实现。...

    命令行编译和运行java类

    - `java`:这是Java的运行时环境命令,用于运行Java程序。 - `-cp classes`:这个选项指定了类路径,即Java程序查找`.class`文件的目录。 - `hello.Hello`:这里指定了要运行的类的全限定名,包括包名和类名。 2...

Global site tag (gtag.js) - Google Analytics