运行时编译时区别
❶ c++编译器里的调试,编译,运行都是什么意思啊,有什么区别啊
出现这种情况的原因可能有很多,最常见的就是源代码和程序不匹配导致的,可以这样设置
工具-》选项-》调试
将其中的“要求源文件与原始版本完全匹配”的钩去掉,然后再试试看。
❷ 1. 编译时的多态性与运行时的多态性有什么区别,他们的实现方法有什么不同
多态从实现的角度可以划为两类:编译时多态和运行时多态。
编译时的多态性:就是在程序编译的时候,也就是生成解决方案的时候就决定要实现什么操作。
运行时的多态性:就是指直到系统运行时,才根据实际情况决定实现何种操作。
1、多态实现形式不同:
编译时的多态是通过静态连编来实现的;运行时的多态是用动态连编来实现的。
2、多态性通过方式不同:
编译时的多态性主要是通过函数重载和运算符重载来实现的;运行时的多态性主要是通过虚函数来实现的。
(2)运行时编译时区别扩展阅读:
静态多态性又称编译时的多态性。静态多态性的函数调用速度快、效率高但缺乏灵活性,在程序运行前就应决定执行的函数和方法。
动态多态性的特点是:不在编译时确定调用的是哪个函数,而是在程序运行过程中才动态地确定操作所针对的对象。又称运行时的多态性。动态多态性是通过虚函数(virtual function)实现的。
❸ 编译运行编译运行,有什么区别
编译:
包括编译和链接两个过程。
编译部分,是把源文件(代码)转换成机器可以识别的二进制语言,这个过程是针对每一个源文件的。
链接,是把编译生成的二进制文件,组合成为一个系统可以执行的可执行文件。
这两部分整体也叫编译。也就是说,广义的编译,就是把代码,转换成可执行文件。
运行:
把编译出来的可执行文件,在系统中运行的过程,称为程序的运行。
打个比方,编译就是做饭的过程,而运行,就是吃饭。二者是完全不同的概念,是计算机软件开发的两个步骤。
❹ C++中什么是编译时,什么是运行时,二者有何区别
编译阶段主要进行语法的检查,无误。将程序代码转换成目标代码(二进制表示,打开看不懂),没有和操作系统进行连接,不能运行。完成连接后,程序能够进入系统运行。
运行时,一定是编译过的,没有语法错误。编译时,没有生成目标文件,可能有语法错误。
❺ java编译时注解和运行时注解有什么区别
重写,重载,泛型,分别是在运行时还是编译时执行的
1. 方法重载是在编译时执行的,因为,在编译的时候,如果调用了一个重载的方法,那么编译时必须确定他调用的方法是哪个。如:
当调用evaluate("hello")时候,我们在编译时就可以确定他调用的method #1.
2.
方法的重写是在运行时进行的。这个也常被称为运行时多态的体现。编译器是没有办法知道它调用的到底是那个方法,相反的,只有在jvm执行过程中,才知晓到底是父子类中的哪个方法被调用了当有如下一个接口的时候,我们是无法确定到底是调用父类还是子类的方法
3.
泛型(类型检测),这个发生在编译时。编译器会在编译时对泛型类型进行检测,并吧他重写成实际的对象类型(非泛型代码),这样就可以被JVM执行了。这个过程被称为"类型擦除"。
类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且再必要的时候添加类型检查和类型转换的方法。
类型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。类型擦除的主要过程如下:
1). 将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。
2). 移除所有的类型参数。
在编译后变成:
4. 注解。注解即有可能是运行时也有可能是编译时。
如java中的@Override注解就是典型的编译时注解,他会在编译时会检查一些简单的如拼写的错误(与父类方法不相同)等
同样的@Test注解是junit框架的注解,他是一个运行时注解,他可以在运行时动态的配置相关信息如timeout等。
5. 异常。异常即有可能是运行时异常,也有可能是编译时异常。
RuntimeException是一个用于指示编译器不需要检查的异常。RuntimeException
是在jvm运行过程中抛出异常的父类。对于运行时异常是不需要再方法中显示的捕获或者处理的。
已检查的异常是被编译器在编译时候已经检查过的异常,这些异常需要在try/catch块中处理的异常。
6. AOP. Aspects能够在编译时,预编译时以及运行时使用。
1).
编译时:当你拥有源码的时候,AOP编译器(AspectJ编译器)能够编译源码并生成编织后的class。这些编织进入的额外功能是在编译时放进去的。
2). 预编译时:织入过程有时候也叫二进制织入,它是用来织入到哪些已经存在的class文件或者jar中的。
3). 运行时:当被织入的对象已经被加载如jvm中后,可以动态的织入到这些类中一些信息。
7. 继承:继承是编译时执行的,它是静态的。这个过程编译后就已经确定
8. 代理(delegate):也称动态代理,是在运行时执行。
❻ Java之运行时异常与编译时异常区别
Java中用2种方法处理异常:
1.在发生异常的地方直接处理;
2.将异常抛给调用者,让调用者处理。
Java常见的异常:
(1)编译时异常:Java.lang.Exception
(2)运行期异常:Java.lang.RuntimeException
Java.lang.Exception和Java.lang.Error继承自Java.lang.Throwable;
Java.lang.RuntimeException继承自Java.lang.Exception.
编译时异常: 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
运行期异常: 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。
❼ 运行时和编译时有没有什么区别
运行时 编译连接并运行 大概意思检查错误并运行,如果错了,则返回重新编译,通过则运行
编译时 编译连接 检查错误,并不运行,不管对错,都返回编译状态.
关于SIZEOF()
SIZEOF() ()里加数据类型,则计算此数据类型所占的内存字节数.
如 SIZEOF( int ) 计算int型所占的内存字节数.
SIZEOF() ()里还可以加字符串或一个字符串数组,计算这个字符串的长度,即所占的内存字节数.
如 SIZEOF(abcd) 计算abcd这个字符串所占的内存字节数,
注意:
计算结果为5,字符型每个字符占一个字节,还有一个隐藏的\0,用来结束字符串的,所以要多加一个字节.
❽ 请问java程序在编译和运行时有什么区别,系统分别都会做什么
Java程序的编译
使用命令: javac *.java
编译时,会将写的.java文件(高级语言),生成相应的字节码文件.class文件(二进制代码)
Java程序的执行
使用命令:java *
流程: 加载到 -- 连接 ---- 初始化 ...
运行时,首先会由将相应的.class文件,加载到内存中,并验证.class文件的有效性,将相应类的Class加载到内存中,并对类中的静态变量进行初始化操作,然后就由 主 类开始执行
具体的可以看一下 JVM 类加载过程,以及jVM的内存分配机制