JAVA面试常考系列一,JAVA面试常考系列
JAVA面试常考系列一,JAVA面试常考系列
转载自 JAVA面试常考系列一
题目一
什么是Java虚拟机?为什么Java被称为平台无关的编程语言?
java虚拟机是一个可以执行字节码文件(.class)的虚拟机进程。
为什么java与平台无关呢?因为java源程序(.java)首先被编译器编译成字节码文件(.class),然后java虚拟机将字节码文件解释成机器码。而不同的操作平台,装有不同的java虚拟机(JVM),能够将相同的字节码文件(.class)解释为对应平台所需要的机器码。所以,java是一种与平台无关的编程语言。
JDK和JRE的区别是什么?
JDK是完整的Java软件开发包,包括编译器、Java运行时环境和其它的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。
JRE是Java运行时环境,它是JDK的一个组成部分,只包括Java虚拟机、Java核心类库和支持文件。
可否在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
Java支持的数据类型有哪些?什么是自动拆装箱?
支持类型
Java支持8种基本数据类型:
其中整数值型有四种:byte,short,int,long,
字符型一种:char
浮点类型两种:float,double
布尔型一种:boolean
整数默认int型,小数默认是double型。Float和long类型的必须加后缀。
Java还支持引用数据类型,引用类型包括类、接口、数组等。引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。而包装类就属于引用类型。
自动拆装箱
自动装箱和拆箱就是基本类型和引用类型之间的转换,转换的目的是因为基本类型转换为引用类型后,就可以new对象,从而调用包装类中封装好的方法进行基本类型之间的转换或者toString,还有就是如果集合中想存放基本类型,泛型的限定类型只能是对应的包装类型。
“static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为static方法是编译时静态绑定的,而方法覆盖是基于运行时动态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
java中也不可以覆盖private的方法,因为private修饰的变量和方法只能在当前类中使用,如果是其他的类继承当前类是不能访问到private变量或方法的,当然也不能覆盖。
Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
方法覆盖
Java中方法覆盖(Overriding)是指子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。重写方法不能为private,运用中最典型的就是对接口方法的覆盖。
方法重载
Java中方法重载(Overloading)就是具有相同函数名,返回类型可以不同,参数个数、顺序、类型不同的函数。Overloading发生在同一个类里面具有两个或者是更多的函数具有相同名字的情况下。
Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
构造函数是对象被创建时初始化对象的成员方法,它具有和它所在的类完全一样的名字。构造函数只能有入口参数,没有返回类型,因为一个类的构造方法的返回类就是类本身。构造函数定义后,创建对象时就会自动调用它,对新创建的对象分配内存空间和初始化。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
方法名称相同,参数项不相同。那么认为一个方法是另一个方法的重载方法。重载只跟参数有关,与返回类型无关。方法名和参数相同而返回类型不相同,不能说是重载。
构造方法重载是方法重载的一个典型的特例。参数列表不同。
Java为什么不支持多继承?
Java中类不支持多继承,因为两个继承于中一个父类的子类,被同一个子类继承时,会出现方法的引用歧义,所以Java中只支持单继承,即一个类只有一个父类。
java中的接口支持多继承,即一个子接口可以有多个父接口。接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能。
什么是值传递和引用传递?
值传递
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递
引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
接口和抽象类的区别是什么?
接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,大猫,小猫,来定义两个类,他们的抽象类是猫。说明,他们都是猫。猫可以奔跑,狗也可以奔跑,把“奔跑”定义成一个接口,然后让这些类去实现它。
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如猫不可能同时是动物和植物),但是可以实现多个接口(吃奔跑口、跳跃接口)。
区别如下:
1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2、抽象类要被子类继承,接口要被类实现。
3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。
4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果。
7、抽象类里可以没有抽象方法。
8、如果一个类里有抽象方法,那么这个类只能是抽象类。
9、抽象方法要被实现,所以不能是静态的,也不能是私有的。
10、接口可继承接口,并可多继承接口,但类只能单根继承。
相关文章
- 暂无相关文章
用户点评