编译期java
classInitalizedClass{
static{
System.out.println("!");
}
publicstaticintinititalize_varible=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.inititalize_varible);
}
}
上面的结果是:
!
1
classInitalizedClass{
static{
System.out.println("!");
}
//和上面的例子唯一的差异就是此处的变量INITIALIZED_VARIBLE被声明为final
_VARIBLE=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.INITIALIZED_VARIBLE);
}
}
上面的结果是:
1
为什么两个例子执行结果不一样,原因是第二个例子中的INITIALIZED_VARIBLE为编译期常量,它不会导致类的初始化的
㈡ 请高手解释下java编译期错误与运行期错误
编译错误就是编译时候报的错,你写的java程序总不能马上就跑,先要编译成class吧,如果我写的程序是“我是大笨蛋”,那当然是不符合语法的,于是编译器会报错。如果我写的语法是正确的,那么编译器就会把他转换成适当的class文件,然后你就可以运行了,运行中再出错就是运行错误了。
㈢ java中创建对象时,在编译期和运行期的情形相同吗
就是创建的父类的对象了,因为你用子类创建对象可是复制给了父类变量,那样时候子类创建的对象失去自己的特性,于是转换父类的啊。。。所以创建的是父类的对象了。。。
㈣ 在java中,什么叫编译期间完全未知的classes
简单的来说,比如你用接口或者父类的引用,将来由spring或者ioc/di相关的技术注入一个子类的实现给它,那么它在编译期间,就是完全未知的。
所谓的ioc/di其实也就是通过反射的机制实现的,只是可以交给框架来做,也可以自己手动反射,因为你要new的那个类在编译的时候只是一个配置文件,或者只是一个字符串,JVM是没办法知道它具体是哪个类的,当然这个类有可能被转载在JVM中了(也有可能没有,如EJB中对于远程对象的调用),但是具体的实现要等被注入之后(或者说反射之后)才能知道。也就是要在运行期间才知道。所以对于编译期是未知的。
不知道我这么说你能不能明白,你可以再继续查反射方面的资料,或者阅读SSH相关的资料,能帮助你更好的理解反射。你也可以去看一下JVM原理,可以辅助理解编译期,运行期。
希望能帮到你。
㈤ 请问java中的编译期和运行期有什么区别
编译时是调用检查你的源程序是否有语法错误,如果没有就将其翻译成字节码文件。即.class文件。
运行时是java虚拟机解释执行字节码文件。
㈥ java中是什么时候分配内存编译期还是运行期
这肯定是运行期
编译的时候,跟内存都没关系,完全是java代码转成字节码的过程,你写的代码没有任何计算、运行,所以根本谈不上内存的分配。
㈦ java程序编译时
我把它保存为TwoListenInner.java 用javac编译时没问题啊。还能执行
㈧ java 程序如何得到编译时间 像C 里的 __DATE__ 一样 printf("%s", __DATE__);
写个批处理,在输入两次当前时间的命令之间加一句javac
㈨ java中在编译期就被确定是什么意思
我的理解是:编译器运行的东东是代码是否否何规范,类似于你写个void写错了写成vod这时编译器就会报错提醒你;
而运行期运行的就是代码的逻辑关系了,比如说你使用一个数组,未对他进行初始化分配空间,运行时就会出现空指针异常。
理解的较浅,不知能否帮到你。
㈩ java 中的编译期常量是什么使用它又什么风险
编译期常量就是所谓的 public final static 常量。
由于在编译时就确定了值,在使用的场合会直接写成值。而不是直接到原来的类中读取。
这样会有一个问题。 如果 类 A 提供了常量 类B使用了常量。并都进行了编译。
然后,修改了类A的源码,调用系统进行编译。
系统发现类A是新的代码,编译了,类B是旧的代码,就不进行编译,使用旧的类。
由于类B中直接编译进了旧的值,导致类A的修改无法反映到类B中。
这样造成了风险。