java热点代码 java热点代码分析( 二 )


Java 中构造函数重载和方法重载很相似 。可以为一个类创建多个构造函数 。每一个构造函数必须有它自己唯一的参数列表 。
Java 不支持像 C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java 不会创建默认的复制构造函数 。
8.Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java 中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况 。与此相对 , 方法覆盖是说子类重新定义了父类的方法 。方法覆盖必须有相同的方法名,参数列表和返回类型 。覆盖者可能不会限制它所覆盖的方法的访问 。
9.接口和抽象类的区别是什么?
Java 提供和支持创建抽象类和接口 。它们的实现有共同点,不同点在于:
?接口中所有的方法隐含的都是抽象的 。而抽象类则可以同时包含抽象和非抽象的方法 。
?类可以实现很多个接口,但是只能继承一个抽象类
?类如果要实现一个接口,它必须要实现接口声明的所有方法 。但是 , 类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的 。
?抽象类可以在不提供接口方法实现的情况下实现接口 。
?Java 接口中声明的变量默认都是 final 的 。抽象类可以包含非 final 的变量 。
?Java 接口中的成员函数默认是 public 的 。抽象类的成员函数可以是 private,protected 或者是 public 。
?接口是绝对抽象的,不可以被实例化 。抽象类也不可以被实例化,但是 , 如果它包含 main 方法的话是可以被调用的 。
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本 。因此,就算是改变了对象副本 , 也不会影响源对象的值 。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用 。因此,外部对引用对象所做的改变会反映到所有的对象上 。
最后祝你面试顺利!
Java 虚拟机一样的速度甚至出现AOT编译方式吗不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行:
其中绿色的模块可以选择性实现 。很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行 , 如JavaScript) , 而下面的那条分支就是传统编译原理中从源代码到目标机器代码的生成过程 。
如今 , 基于物理机、虚拟机等的语言,大多都遵循这种基于现代经典编译原理的思路,在执行前先对程序源码进行词法解析和语法解析处理,把源码转化为抽象语法树 。对于一门具体语言的实现来说,词法和语法分析乃至后面的优化器和目标代码生成器都可以选择独立于执行引擎,形成一个完整意义的编译器去实现,这类代表是C/C++语言 。也可以把抽象语法树或指令流之前的步骤实现一个半独立的编译器,这类代表是Java语言 。又或者可以把这些步骤和执行引擎全部集中在一起实现,如大多数的JavaScript执行器 。
Javac编译
在Java中提到“编译”,自然很容易想到Javac编译器将*.java文件编译成为*.class文件的过程,这里的Javac编译器称为前端编译器,其他的前端编译器还有诸如Eclipse JDT中的增量式编译器ECJ等 。相对应的还有后端编译器,它在程序运行期间将字节码转变成机器码(现在的Java程序在运行时基本都是解释执行加编译执行),如HotSpot虚拟机自带的JIT(Just In Time Compiler)编译器(分Client端和Server端) 。另外,有时候还有可能会碰到静态提前编译器(AOT,Ahead Of Time Compiler)直接把*.java文件编译成本地机器代码 , 如GCJ、Excelsior JET等 , 这类编译器我们应该比较少遇到 。

推荐阅读