JAVA面试经典题目(一)

1.什么是Java虚拟机?为什么Java被称作为是“平台无关的编程语言”?
 答:Java的跨平台不是Java源程序的跨平台 ,如果是这样,那么所以语言都是跨平台的, java源程序先经过javac编译器编译成二进制的.class字节码文件Java的跨平台指的就是.class字节码文件的跨平台,.class字节码文件是与平台无关的),.class文件再运行在jvm上,java解释器(jvm的一部分)会将其解释成对应平台的机器码执行,所以Java所谓的跨平台就是在不同平台上安装了不同的jvm,而在不同平台上生成的.class文件都是一样的,而.class文件再由对应平台的jvm解释成对应平台的机器码执行。 最后解释下机器码和字节码的区别: 一,机器码,完全依附硬件而存在~并且不同硬件由于内嵌指令集不同,即使相同的0 1代码 意思也可能是不同的~换句话说,根本不存在跨平台性~比如~不同型号的CPU,你给他个指令10001101,他们可能会解析为不同的结果~ 二,我们知道JAVA是跨平台的,为什么呢?因为Java有一个jvm,不论哪种硬件,只要你装有jvm,那么Java就认识这个JAVA字节码,至于底层的机器码,咱不用管,有jvm搞定,Java会把字节码再翻译成所在机器认识的机器码。

2.JDK和JRE的区别是什么?
答:JRE: Java Runtime Environment    JDK:Java Development Kit
JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。

JRE根据不同操作系统(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本 
再说说java的跨平台吧:
  java源程序先经过javac编译器编译成二进制的.class字节码文件(java的跨平台指的就是.class字节码文件的跨平台,.class字节码文件是与平台无关的),.class文件再运行在jvm上,java解释器(jvm的一部分)会将其解释成对应平台的机器码执行,所以java所谓的跨平台就是在不同平台上安装了不同的jvm,而在不同平台上生成的.class文件都是一样的,而.class文件再由对应平台的jvm解释成对应平台的机器码执行。

3.Static关键字是什么意思?Java是否可以覆盖一个private或者static的方法?

答:Static表示静态的意思,Static关键字表明一个成员变量或者成员方法可以在没有所属的类的实例变量的情况下被访问。可以用于修饰成员变量和成员方法,被静态修饰的成员方法只能访问静态成员,不可以访问非静态成员。静态是随着类的加载而加载的,因此可以直接用类进行访问,也就是说在没有创建任何对象的前提下,仅仅是通过类本身来调用static方法。

Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。Static方法跟类的任何实例都不相关所以概念上不适用。Java中也不可以覆盖private的方法,因为private修饰的变量和方法只能在本类中使用,如果是其他类继承当前类是不能访问到private变量或者方法的,所以当然也不能覆盖。

4.是否可以在static环境中访问非static变量?

答:首先static变量是属于类的,随着类被Java虚拟机加载到静态方法区内存中,而在类加载的同时,此时还不一定有实例的创建,没有实例因此也无法访问非静态的成员。

5.Java支持的数据类型有哪些?什么是自动拆装箱?

答:Java中的基本类型:

整数值型:btye  short  int  long

字符型:char

浮点类型:float double

布尔类型:boolean

整数默认int型 小数默认double型 ,float和long类型的必须加后缀

自动装箱就是Java编译器在基本数据类型和对应的对象包装类型之间做的转化。如:把int转化成Integer,double转化成Double等等,相反的转换就是自动拆箱。

String是引用类型而不是基本类型,引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体其实在堆中,通过地址来找到堆中的对象的过程就是引用类型。引用类型包括类,接口,数组等等。String类是final修饰的。而包装类就属于引用类型,自动装箱和自动拆箱就是基本类型和引用类型之间的转换,至于为什么要转换,那是因为基本类型转换为引用类型之后就可以进行new对象,从而调用包装类中以及封装好的方法进行基本类型之间的转换或者toString。

6.Java中的方法覆盖和方法重载是什么意思?

答:Java的方法重载是发生在同一个类里面两个或者多个方法的方法名相同但是参数不同的情况。方法覆盖是讲子类重新定义父类的方法,方法覆盖必须拥有相同的方法名、参数列表和返回值类型。覆盖可能不会限制它所覆盖的方法的访问。

   7.Java中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?

答:当对象被创建的时候,构造方法会被调用,每个类都有构造方法,如果程序员没有在类中给出一个构造方法,系统会自动创建一个默认的构造方法,这个默认的构造方法没有参数、没有返回值,也没有内容。作用就是为了初始化对象。Java中的构造方法重载和方法重载很相似,一个类中可以有多个构造方法,但是每一个构造方法都必须有不同的参数列表。在Java不会创建默认的赋值构造方法。C++中有此概念。

   8.Java支持多继承?

答:Java中是不支持多继承的,在Java中是单继承,也就是说Java类只能有一个父类,但是Java另外提供了与C++中多继承相似的功能,那就是接口。接口的作用就是用来扩展对象功能,一个子接口可以继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,累就扩展了相应的功能。

你可能感兴趣的:(JAVA面试经典题目(一))