1.重写(Override)与重载(Overload)的区别
重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写。
重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。
重写的方法不能抛出新的检查异常或者比重写方法声明更加宽泛的异常。
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
父类的成员方法只能被它的子类重写。
声明为final的方法不能被重写。
声明为static的方法不能被重写,但是能够被再次声明。
重载是在一个类里面,方法名字相同,而参数不同,返回类型可以相同也可以不同。
最常用的就是构造器的重载。
方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
2.JDK、JRE、JVM的区别与联系
JDK:Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Environment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括 rt.jar)
JDK有三种版本:
- J2SE : standard edition,标准版,是我们通常用的一个版本
- J2EE:enterenterprise edition,企业版,使用这种JDK开发J2EE应用程序。
- J2ME:micro edition,主要用于移动设备、嵌入式设备上的java应用程序。
我们常常用JDK来指代Java API,Java API是Java的应用程序接口,其实就是前辈们写好的一些java Class,包括一些重要的语言结构以及基本图形,网络和文件I/O等等,我们在自己的程序中,调用前辈们写好的这些Class,来作为我们自己开发的一个基础。当然,现在已经有越来越多的性能更好或者功能强大的第三方类库供我们使用。
JRE:java Runtime Environment(Java运行时环境)。也就是我们说的JAVA平台,所有的Java程序都要在JRE下才能运行。包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具--编译器、调试器和其他工具。
JVM:Java Virtual machine(Java虚拟机)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM的主要工作是解释自己的指令集(即字节码)并映射到本地的CPU的指令集或OS的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其余操作系统无关,完成了跨平台性,JVM对上层的Java源文件是不关心的,它关注的只是由源文件生成的类文件(class file)。类文件的组成包括JVM指令集,符号表以及一些补助信息
我们开发的实际情况是,我们利用JDK(调用JAVA API)开发了属于我们自己的Java程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成Java字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。