Java是一个支持并发、基于类和面向对象的计算机编程语言。程序员
下面列出了面向对象软件开发的优势:
一、代码开发模块化,更易维护和修改。
二、代码复用。
三、加强代码的可靠性和灵活性。
四、增长代码的可理解性。
面向对象编程有不少重要的特性,好比:封装,继承,多态和抽象。下面的章节咱们会逐个分析这些特性。
封装
封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其余对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其余的位于同一个包或者不一样包下面对象赋予了不一样的访问权限。
下面列出了使用封装的一些好处:
一、经过隐藏对象的属性来保护对象内部的状态。
二、 提升了代码的可用性和可维护性,由于对象的行为能够被单独的改变或者是扩展。
三、禁止对象之间的不良交互提升模块化。
参考这个文档获取更多关于封装的细节和示例。
多态
多态是编程语言给不一样的底层数据类型作相同的接口展现的一种能力。一个多态类型上的操做能够应用到其余类型的值上面。
继承
继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也能够在不修改类的状况下给现存的类添加新特性。
抽象
抽象是把想法从具体的实例中分离出来的步骤,所以,要根据他们的功能而不是实现细节来建立类。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
short
int
long
float
double
boolean
char
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间作的一个转化。好比:把int转化成Integer,double转化成double,等等。反之就是自动拆箱。
6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同可是参数不一样的状况。与此相对,方法覆盖是说子类从新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
7.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
当新对象被建立的时候,构造函数会被调用。每个类都有构造函数。在程序员没有给类提供构造函数的状况下,Java编译器会为这个类建立一个默认的构造函数。
Java中构造函数重载和方法重载很类似。能够为一个类建立多个构造函数。每个构造函数必须有它本身惟一的参数列表。
Java不支持像C++中那样的复制构造函数,这个不一样点是由于若是你不本身写构造函数的状况下,Java不会建立默认的复制构造函数。
8.Java支持多继承么?
不支持,Java不支持多继承。每一个类都只能继承一个类,可是能够实现多个接口。
9.接口和抽象类的区别是什么?
Java提供和支持建立抽象类和接口。它们的实现有共同点,不一样点在于:
接口中全部的方法隐含的都是抽象的。而抽象类则能够同时包含抽象和非抽象的方法。
类能够实现不少个接口,可是只能继承一个抽象类
类若是要实现一个接口,它必需要实现接口声明的全部方法。可是,类能够不实现抽象类声明的全部方法,固然,在这种状况下,类也必须得声明成是抽象的。
抽象类能够在不提供接口方法实现的状况下实现接口。
Java接口中声明的变量默认都是final的。抽象类能够包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数能够是private,protected或者是public。
接口是绝对抽象的,不能够被实例化。抽象类也不能够被实例化,可是,若是它包含main方法的话是能够被调用的。
也能够参考JDK8中抽象类和接口的区别
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。所以,就算是改变了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并非实际的对象,而是对象的引用。所以,外部对引用对象所作的改变会反映到全部的对象上。编程