编译期只会检查实例声明的类型和强制转化的类型是否存在extend/implement关系,因为从声明变量类型,到强制转化变量的类型之间可能存在编译期无法解析的代码,虽然示例中只是一个简单的赋值,肉眼就可以判断实际类型,但是对于编译器来说是无法判断的,举个简单的例子:
public static void foo(boolean flag) {
Useful xx = flag ? new Useful() : new MoreUseful();
((MoreUseful)xx).g(); // 编译器如何判断此处是否有错误?
// flag=false的时候可以正常运行,就不能说这里有编译期错误}public static void main(String[] args) {
foo(true);
foo(false);
}
‘贰’ C语言中编译 生成 调试 测试 运行各是什么意思有什么区别
C语言中编译 生成 调试 测试 运行的区别如下:
区别一:
从编译方面来看:
编译依赖于编译器,英文是compile, vc中这一过程是将源代码转换成目标文件,如:obj文件,rc文件等。
区别二:
从生成方面来看:
生成指的是连接的过程,英文是build,依赖于链接器。vc中在这一阶段将所有的目标文件和所有需要用到的组件组合成一个整体,例如需要生成的是windows系统下的PE可执行文件,链接器会依照特定格式将目标文件组合,最后生成PE格式的,exe或dll文件。
区别三:
从调试方面来看:
调试是所有或部分代码编写完成后,让程序在调试器中运行,用这种手段对程序进行分析,找出并修正潜在问题。
区别四:
从运行方面来看:
运行就是让程序在系统中运行。
C语言的介绍:
C语言是目前流行的通用程序设计语言,是计算机专业人员和计算机爱好者开发软件的首选开发工具。C语言源程序必须经过某种编译工具翻译成为目标机器语言程序才能够在计算机上执行。
然而随着程序编写规模的扩大,顺利编写出正确的程序绝非一件容易的事情,早期的许多编译工具仅仅提供翻译功能,已满足不了应用的要求,编程人员需要-种功能全面并高度集成的编译环境。
程序是一段具有一定功能的代码,编写程序的目的是解决问题。当程序人员写完程序后,其实并不起作用,只有当编写的程序经过一系列的处理后,能够解决问题时。
序才成为真正的程序,这一系列的处理过程,-般就是编辑、编译、连接、调试与运行等。目前最成熟的C语言集成环境主要有Turbo C2.0和Turbo C 3.0( 简称TC30)或Borland C++3.1( 简称BC31)以及Visual C++ 6.0。
‘叁’ JDK的编译和运行程序命令是什么个针对什么类型文件
javac针对.java文件,编译源代码为字节码文件
java针对.class文件,JVM解释执行程序
‘肆’ C语言文件的编译与执行的四个阶段并分别描述
开发C程序有四个步骤:编辑、编译、连接和运行。
任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。
1、预处理:导入源程序并保存(C文件)。
2、编译:将源程序转换为目标文件(Obj文件)。
3、链接:将目标文件生成为可执行文件(EXE文件)。
4、运行:执行,获取运行结果的EXE文件。
(4)运行类型和编译类型扩展阅读:
将C语言代码分为程序的几个阶段:
1、首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。文件不包含任何宏定义,因为所有宏都已展开,并且包含的文件已插入。我归档。
2、编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分,也是最复杂的部分之一。
3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可以运行的可执行程序。也就是说,您需要链接大量的文件才能获得“a.out”,即最终的可执行文件。
4、在链接过程中,需要重新调整其他目标文件中定义的函数调用指令,而其他目标文件中定义的变量也存在同样的问题。
‘伍’ 运行时和编译时有没有什么区别
运行时 编译连接并运行 大概意思检查错误并运行,如果错了,则返回重新编译,通过则运行
编译时 编译连接 检查错误,并不运行,不管对错,都返回编译状态.
关于SIZEOF()
SIZEOF() ()里加数据类型,则计算此数据类型所占的内存字节数.
如 SIZEOF( int ) 计算int型所占的内存字节数.
SIZEOF() ()里还可以加字符串或一个字符串数组,计算这个字符串的长度,即所占的内存字节数.
如 SIZEOF(abcd) 计算abcd这个字符串所占的内存字节数,
注意:
计算结果为5,字符型每个字符占一个字节,还有一个隐藏的\0,用来结束字符串的,所以要多加一个字节.
‘陆’ 关于JAVA多态的编译时类型与执行时类型的一个问题.
多态的对象,在编译器为sub分配内存空间的时候执行的父类的属性,
运行期,也就是调用方法的时候,指定是子类的行为
这是因为,对象的属性是在声明时指定,方法数据对象的行为
‘柒’ C++中什么是编译时,什么是运行时,二者有何区别
编译阶段主要进行语法的检查,无误。将程序代码转换成目标代码(二进制表示,打开看不懂),没有和操作系统进行连接,不能运行。完成连接后,程序能够进入系统运行。
运行时,一定是编译过的,没有语法错误。编译时,没有生成目标文件,可能有语法错误。
‘捌’ 编译时和运行时对象分别是什么数据类型
编译时被当做NSString 的实例来处理,运行时其isa指向的是[NSData Class],故运行时该实例只能收到NSData的固有实例方法(或者自己写的Category),如果对该实例发送诸如 testObject stringByAppendingString:@"哈哈哈" ,编译时不会报错只会给出黄色警告,但是运行时会直接崩溃,错误信息可能是
-[_NSZeroData stringByAppendingString:]: unrecognized selector sent to instance 0x8946440
故可以看出NSData 在运行时的真实类型是_NSZeroData(这里用的NSData alloc init,这里是个空的NSData,所以是ZeroData,不是说所有的)
如果对该实例发送诸如 testObject
::这类消息 编译器会直接给出红色错误,无法运行,但其实这个实例是有这个方法的。
这里如果改为 id testObject=[[NSData alloc]init];
那么发送NSString 的方法仍然会崩溃,发送NSData的实例方法则完全正常。并且两种情况编译器都不会再给出警告或错误。
‘玖’ java运行时类型和编译时类型都是什么意思
运行时类型是 程序运行过程中再判断是什么类型,
编译时类型是 在写好代码后,编译时已经确定是什么类型了