阅读750 返回首页    go 阿里云 go 技术社区[云栖]


java面试题

面向对象编程(OOP)
Java是一个支持并发、基于类和面向对象和计算机编程语言。如下是面向对象软件开发的优点:
* 代码开发模块化,更容易维护和修改。
* 代码复用。
* 增强代码的可靠性和灵活性。
* 增加代码的可理解性。

面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。
* 封装:
* 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。
* 在Java当中,有4种修饰符:public,private,default和protected。
* 每一种修饰符给其他的位于同一个包或者不用包下面对象赋予了不同的访问权限。
* 其中private的作用范围限定于当前类中;
* default是默认的访问修饰符,作用范围是同一个包中;
* protected的作用范围不包括其他的包,在同一包,当前类和其子类中均能使用;
* public是公开的,在当前工程中均可以使用。

封装的一些优点:
* 通过隐藏对象的属性来保护对象内部的状态;
* 提高了代码的可用性和可维护行,因为对象的行为可以被单独的改变或者是扩展。
* 禁止对象之间的不良交互提高模块化。

多态:
* 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。
* 一个多态类型上的操作可以应用到其他类型的值上面。

继承:
* 继承给对象提供从基类获取字段的方法和能力。
* 继承提供类代码的重用行,也可以在不修改类的情况下给现存的类添加新特性

抽象:
* 抽象是把想发从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节类常见类。
* Java支持创建只暴露接口而不包含方法实现的抽象的类,
* 这种抽象技术的主要目的是把类的行为和实现细节分离开。

抽象个封装的不同点:
* 抽象个封装是互补的概念,一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。
* 一般是通过隐藏对象内部状态信息做到疯转,因此,封装可以看成是用来提供抽象的一种策略。

常见的Java问题:
1、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
* Java虚拟机是一个可执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
* Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者重新编译。
* Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

2、JDK和JRE的区别是什么?
* Java运行时环境(JRE)是将要执行的Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。
* Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),
可以让开发者开发、编译、执行Java应用程序。

3、“static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
* “static”关键字表明一个成员变量或者成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
static方法跟类的任何实例都不相关,所以概念上不适用。

4、是否可以在static环境中访问非static变量?
* static变量在Java中是属于类的,它在所有的实例中的值是一样的。
当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,
编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

5、Java支持的数据类型有哪些?什么是自动拆装箱?
* Java语言支持的8种基本数据类型是:
* byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
自动装箱是Java编译器在基本数据类型和对应的包装类型之间做一个转化,比如:把int转化成integer等等。反之就是自动拆箱。

6、Java中的方法覆盖(override)和方法重载(overloading)是什么意思?
* Java中的方法重载发生在同一个类里面两个或者多喝方法的方法名相同凡是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。
* 方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。

7、Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
* 当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。
在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
Java中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。
Java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
8、Java支持多继承么?
* 不支持,Java不支持多继承。每个类只能继承一个类,但是可以实现多个接口。
9、接口和抽象类的区别是什么?
* Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继续一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不是想抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数可以是其他修饰符修饰的。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
10、什么是 值传递和引用传递?
* 对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。

最后更新:2017-09-05 10:02:35

  上一篇:go  ARMS 发布 V2.2.6 版本,全新支持 前端前监控, MQ数据源
  下一篇:go  Changing the Way of Continuous Delivery with Docker (Part 2)