115题Java面试问题和答案之Java的一些常见问题

已有 3250人阅读此文 - - JAVA

1. 什么是Java虚拟机?为什么java被称作平台独立的编程语言?  Java虚拟机是一个能处理Java字节码的进程。每一个Java源文件都会被编译成字节码文件,然后被Java虚拟机执行。从设计上看,Java允许程序在任何一个平台上执行,而不用程序员在每一个不同平台上进行重写或重编译。Java虚拟机能做到这一点,是因为它了解底层硬件平台的指令长度和其他细节。

2. JDK和JRE有什么区别?  JRE基本上就是java虚拟机,也就是Java程序执行的地方。它也包含浏览器的applet插件。JDK是java的全功能开发软件包(SDK),包括了JRE,编译器和工具(比如JavaDoc, Java Debugger)。这些功能是为用户用作开发、编译和执行java程序的。

3. 关键字”static”是什么意思? 在Java中能够重写(override)私有或者静态方法吗? static关键字表示一个变量或方法在不用实例化它所属于的类的情况下就可以访问。在java中用户不能重写(override)静态方法,因为方法重写是基于运行时的动态绑定,而静态方法是在编译时绑定的。一个静态方法不能与这个类的任何实例关联,所以这种说法是不对的。

4. 能够在静态上下文中访问非静态的变量吗? Java中的静态变量属于类,它的值对这个类的所有实例都是一样的。静态变量在类被java虚拟机加载时就就被初始化。如果代码尝试访问没有实例的非静态变量,编译器会报错,因为这些变量还没有被创建,而且它们没有与任何实例关联。

5. Java支持哪些数据类型?自动装箱和自动拆箱是指什么? Java语言支持8中基本数据类型:

  • byte

  • short

  • int

  • long

  • float

  • double

  • boolean

  • char

自动装箱是指java编译器所进行的,在原始类型和与其对应的对象包装类之间的自动转换。比如,编译器将int转换为Integer,double转换为Double,等等。如果这个转换过程以相反的方法进行,这个操作就叫自动拆箱。

6. 在Java中什么叫方法重写和重载? Java中方法重载是指同一个类中有两个或多个相同名字的方法。而方法重写是指子类重新定义父类的相同方法。重写方法有相同的名字,参数列表和返回类型。重写方法不会限制对被重写方法的访问。

7. Java中什么是构造器,构造器重载和复制构造器? 构造器在新建一个对象时被调用。每一个类都有一个构造器。程序员如果没有为一个类提供构造器,java编译器则会为这个类创建一个默认的构造器。Java中构造器重载与方法重载类似,不同的构造器可以在同一个类中被定义,每一个构造器都必须有不同的参数列表。另外,Java也支持与C++类似的复制构造器,但区别是,如果你不写自己的构造器,java并不会创建一个默认的复制构造器。

8. Java支持多重继承吗? 不支持,java不支持多重继承。每一个类只能扩展一个类,但是可以实现多个接口。

9. 接口和抽象类的区别是什么? Java提供并支持抽象类和接口,两种实现有一些相同的特点,但是他们有以下区别:

  • 接口中的所有方法都是隐含的抽象的。另一方面,抽象类可以包含抽象和非抽象方法。

  • 一个类可以实现多个接口,但只能扩展一个抽象类。

  • 一个类要实现一个接口,必须实现接口所声明的所有方法。但是,一个类可以不全部实现一个抽象类所定义的全部方法,但在这种情况下,子类也是抽象的。

  • 抽象类实现一个接口时,可以不提供这个接口的方法的实现。

  • Java接口中的变量定义默认都是final的。抽象类可以包含非final的变量。

  • Java接口的成员默认都是public的。抽象类的成员可以是private,protected或者public。

  • 接口是绝对抽象的,不能被实例化。抽象类也不能被实例化,但是可以在包含main方法时被调用。


10. 什么是按引用传递和按值传递? 当一个对象以值方式传递时,表示这个对象的一份拷贝被传递。但是,即使这个对象被改变了,也不会影响原来的值。当一个对象是以按引用方式传递,表示实际对象没有被传递,而是这个对象的一个引用被传递。所以,外部方法的所有更改都可以产生影响。


期待你一针见血的评论,Come on!