201个核心Java面试问题汇总(1)
2017-03-12 16:15
183 查看
基础部分:
1.JVM,JDK,JRE之间的区别?
JVM是Java虚拟机的首字母缩写,它是一种提供了Java字节码运行时环境的规范。JVM,JRE和JDK都是平台相关的,这是因为它们在不同平台(OS)上的配置是不一样的,但是Java是平台(OS)无关的。JVM对很多的软件和硬件平台都适用(比如语言无关性的创建,只关注字节码的操作),JVM的主要任务:加载,验证,运行,提供运行时环境。JRE是JVM的实现,它是物理存在的,包含了JVM,libraries(jar包)和其他的一些JVM在运行时会用到的文件。
JDK是Java Development Kit的首字母缩写,它也是物理存在的,JDK是JRE+一些开发工具(javac,Javap)。
上面我们可以看出三者间的层次结构。
2.JVM的内存分配区有几种类型?
看图说话,上图是Java虚拟机的内部架构,包含三部分:类加载器,内存区,执行引擎。在这我们只关注中间的部分。
Class Area:存储了每个class的结构:比如运行时常量池,字段和方法的数据,方法的code。
Heap:存放对象的运行时数据。
Stack:Stack以帧存储,它存储local变量和部分结果,在invoke和return的时候起作用。每个线程都有一个Stack,与创建线程同时。一个新的帧在一个方法invoke的时候创建,在invoke结束的时候丢弃这个帧。
程序计数器:它保存了Java虚拟机正在执行的指令的地址。
本地方法栈:它存储了APP中使用的所有的本地方法(Native method)。
3.什么是JIT编译器?
JIT编译器是提升性能的。JIT编译字节码中部分在相同时间内功能相同的部分,因此可以减少编译是所需时间。这里”编译器“表示将JVM指令集装换为CPU指令集的转换器。4.什么是平台(platform)?
平台是程序运行所需的基础的硬件或者软件环境环境,两种类型:基于硬件的和基于软件的。Java提供的平台是基于软件的。5.Java平台和其他平台有什么不一样?
java平台是建立在其它基于硬件的平台的顶层的基于软件的平台架构,它有两部分组成:运行时环境和APP的接口。6.什么性质给予了”Java一次编译,到处运行“的特性?
字节码。Java是被编译成字节码,字节码是介于Java源码和机器码之间的一种中间语言,这种字节码与平台无关,因此可以用于任何平台。7.什么是类加载器?
类加载器是JVM的子系统,用于加载类和接口,有许多种类的类加载器。Bootstrap classloader, Extension classloader, System classloader, Plugin classloader etc.8. .java文件名是有效的文件吗?是的。
9.delete,next,main,exit or null是关键字吗?不是。
10.如果在命令行不提供任何参数,那么main的String[]是空的还是null?是空的,但是不是null。
11.如果我使用static public void代替public static void可以吗?可以,编译和运行不会出现任何问题。
12.局部变量的默认值是多少?局部变量不会初始化为任何默认值,无论是原始数据类型还是对象引用都是如此。
面向对象的概念:
13.面向对象程序语言和基于对象程序语言的区别?
基于对象程序语言沿用了OOPS语言的所有特性处理除了继承。基于对象的语言有JavaScript, VBScript。14.被定义为一个实例变量的对象引用的初始值是多少?Java中的对象引用初始化为null.
15.什么是构造器?构造器用来初始化一个对象的状态,在对象创建的同一时间被调用。
-16.创建默认构造器的目的是什么?
默认构造器给给对象提供一个默认的值,当这个对象的类中没有构造器的时候。17.构造器return值吗?是的,那是当前实例,你不能return type但是可以return value。
18.构造器(constructer)可以继承吗?不能被继承。
19.构造器可以用final修饰吗?不可以。
static关键字
20.什么是静态变量(static variable)?
静态变量用于引用对象的公共属性(对于每个对象来说不是唯一的),比如员工的公司名字,学生的学校名字。静态变量在class加载的时候获得内存,在Class Area区域。
21.什么是静态方法(static method)?
静态方法属于类而不属于类的对象。不需要创建类的实例就可以调用静态方法。
静态方法可以访问静态数据成员并且修改它。
22.为什么main method是静态的(static)?
因为调用静态方法的时候不需要对象,如果main是非 静态的,那么首先JVM需要创建一个对象,然后才能调用main,这会造成额外的内存分配的问题。23.什么是静态块(static block)?
用来初始化静态数据成员。4000
它在类加载的时候被删除,在main之前。
24.不使用main的话可以执行程序吗?可以,使用静态代码块(static block)。
25.如果把static从main方法中移出去,会出现什么问题?
编译成功。但是运行时会抛出NoSuchMethodError。26.static method和instance method方法的不同之处?
有static的叫做静态方法,没有static的方法叫做实例方法(instance method)。call static method的时候不需要对象,但是call instance method的时候需要对象。
instance(Non-static)成员无法直接访问静态的context(比如static method, static block and static nested class),但是static method和instance method都可以访问instance method。
继承
27.什么是this?就是一个引用(refer)当前对象的关键字。
28.什么是继承?
继承是一种机制,一个对象获取另外一个对象的所有属性和行为的机制。展现了IS-A 关系,可用于代码重用和方法覆盖。
29.所有class的superclass是什么?Object class。
30.为什么Java中不支持多重继承?
为了降低代码的复杂度,简化语言,Java在类上是不支持多重继承的,但是在接口上是支持的。31.什么是组合(composition)?
就是在一些类中保存另外一些类的引用,叫做组合。32.聚合(aggregation)和组合(composition)的区别?
aggregation(聚合)是强关系,组合是弱关系。For example: bike has an indicator (aggregation) but bike has an engine (compostion).//无法理解。。。。
33.为什么Java不支持指针(pointers)?
指针是指向内存地址的变量。Java不用指针:它直接操作内存不安全,理解起来很复杂。34.Java中的super?
它是它是一个引用直接父类对象的关键字。35.构造器中可以同时使用super()和this()吗?
不行,它们两个都是必须在方法中的第一行语句使用,同时使用冲突。36.什么是对象克隆?
对象克隆用于创建对象的精确副本。method overloading
37.什么是方法重载(method overloading)?
如果一个class中有许多method的名字相同但是注入参数不同,那么就叫做方法重载(method overloading),它提高了程序的可读性。38.通过改变方法的return类型来实现方法重载为什么不行?
因为模糊//纳尼。。。。39.main方法可以重载吗?
当然可以。通过方法重载,一个类中可以有很多main方法。//记得加代码实例.Method Overriding
40.什么是方法重写(method overriding)?
如果一个子类(subclass)提供了一个方法的具体实现,这个方法已经被它的superclass提供过了,这个叫做方法重写(method overriding)。它被用在运行时多态和方法的具体实现。
41.可以重写静态方法(static method)吗?
不可以。因为静态方法是类的一部分,二不是对象的一部分。//和JVM有关,参考42。42.为什么不能重写静态方法(static method)?
静态方法是class的一部分并且它和class绑定,但是实例化方法(instance method,非静态)和对象绑定。静态方法的内存区域在Class Area,而instance method的内存区域在heap。
43.我们可以重写重载的方法吗?当然可以。
44.方法重写和方法重载的区别?
方法重载提高了程序的可读性,方法重写在子类中提供了父类已经提供的类的具体实现。方法重载在类中发生,方法重写在两个具有IS-A关系的类中发生。
方法重载的参数是不能相同的,但是方法重写的参数必须相同。
45.Java中可以有虚拟函数吗?
当然可以,Java中的函数默认都是虚拟的。46.什么是协变(covariant)返回类型?
Java5之后,重写一个方法可以通过改变它的返回值(如果它的返回值是子类的类型)来实现,这个就叫做协变返回类型。相关文章推荐
- 201个核心Java面试汇总
- 黑马程序员--Java学习日记之面试问题汇总,感谢黑马论坛!
- 2015年Java后台开发面试问题分享汇总(主流互联网公司面试经历)
- Java多线程面试常见核心问题总结
- Java后台-面试问题汇总:主流互联网公司面试经历
- Java面试问题汇总
- Java 多线程面试问题汇总
- Java 多线程面试问题汇总
- 【Java面试】---装箱拆箱问题汇总
- 涵盖OOP、Java核心、Hibernate、Spring等面试问题
- Java后台-面试问题汇总:历时20天,主流互联网公司面试经历
- Java后台-面试问题汇总:历时20天,主流互联网公司面试经历
- java中面试常见问题汇总
- java系统学习(二十)---问题汇总(面试常见)
- 【猿小白】常见Java面试问题汇总~~~持续更新~~~直到拿到心仪的offer
- java面试笔试问题汇总
- Java后台-面试问题汇总(转载)
- Java面试问题汇总
- 近5年126个Java面试问题汇总 收藏
- java面试题技术面试问题汇总(陆续补充)