head first java 2018-07-02

1.java的跨平台怎么理解??

误区:JVM都不是跨平台的,JAVA依赖于JVM,那JAVA应该就不跨平台了啊

解释:先理解跨平台含义:不依赖于操作系统,也不依赖硬件环境。

           不同的系统下有不同的JVM(JVM是C语言写的),所以JVM不是跨平台的,没毛病。

           JAVA依赖于JVM,JVM给JAVA提供了运行环境,所以JAVA是跨平台的。

           再重新理解这句话...  豁然开朗

执行过程:Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚拟机(JVM)对字节码文件解释执行。该字节码与系统平台无关,是介于源代码和机器指令之间的一种状态。在后续执行时,采取解释机制将Java字节码解释成与系统平台对应的机器指令。这样既减少了编译次数,又增强了程序的可移植性,因此被称为“一次编译,多处运行!”。

总结:java的运行是基于JVM(C语言编写的)的,JVM是不同的操作系统提供不同的JVM,每个JVM都可以为java的运行提供环境,使得java可以在不同的系统上运行,也就有了write once  ,run anywhere

编写好的源代码.java,由编译器进行编译成二级制字节码.class,这是一种介于机器指令和源代码之间的状态,JVM将字节码解释成机器可以读懂的指令执行。


补充一下 什么是编译器:编译器是将一种语言翻译成另一种语言的程序 ,通常是将高级语言翻译成低级机器通用语言,

java语言,是便于编写 ,交流,但是机器无法识别(这里的机器是指的java虚拟机,和操作系统无关),java语言由编译器编译成字节码,并不是本地运行程序,而是要启动JVM,在JVM中解释运行(解释成本地机器可读懂的指令)

2.一个类如何能不被继承? 第一  可以 使用final修饰 ,第二 可以 私有化构造器  这样当被继承时 就会报错Implicit super constructor Prive() is not visible for default constructor. Must define an explicit constructor,意思是被继承的类的构造器必须是可见的才行 

如果想自己的类不被别人改版,可以将类标识为Final   ,如果只是某个方法不想被篡改,可以在方法上加final ,这时候,该方法在重写时就找不到了

3. 父类引用指向子类对象,可以调用父类非私有的属性方法,如果重写了,默认调用重写过的,(从下往上找最贴近该子类的),而要调用子类特有的方法(父类没有的),则只能子类 引用指向子类对象

猜你喜欢

转载自blog.csdn.net/ajax_yan/article/details/80883427