1.面向对象和面向过程的区别?
面向过程:面向过程性能比面向对象高
面向对象:面向对象易维护、易复用、易扩展
2.Java 语言有哪些特点?
简单易学、面向对象(封装,继承,多态)、平台无关性( Java 虚拟机实现平台无关性)、可靠性、安全性、支持多线程、支持网络编程并且很方便、编译与解释并存。
3.JDK和JRE?
JDK:Java Development Kit,它是功能齐全的Java SDK。它拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编译程序。
JRE 是 Java运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java虚拟机(JVM),Java类库,java命令和其他的一些基础构件。但是,它不能用于创建新程序。
4.Java和C++的区别?
都是面向对象的语言,都支持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理机制,不需要程序员手动释放无用内存。
5.Java 面向对象三大特性
封装 继承 多态
封装:利用抽象数据类型将数据和操作数据的方法绑定起来,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,对数据的访问只能通过已定义的接口。
继承:使用已存在的类的定义作为基础建立新类,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码。
关于继承需要注意的点:
子类拥有父类对象所有的属性和方法,但是父类中的私有属性和方法子类是无法访问,只是拥有。
子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
多态:允许不同子类型的对象对同一消息作出不同响应。也就是,用同样的对象引用调用同样的方法但是做了不同的事情。
多态有两种实现方式:
继承,即多个子类对同一方法的重写;
接口,即实现接口并覆盖接口中同一方法;
6.抽象类和接口的区别?
相同点:
都不能直接实例化对象;
都包含抽象方法,其子类都必须覆写这些抽象方法;
不同点:
抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承);
接口是这个事物中的额外内容,继承体系是一种 like..a关系
抽象类是这个事物中应该具备的你内容, 继承体系是一种 is..a关系
7.抽象类可以用final修饰吗?可以有static方法吗?可以创建抽象类的实例吗?抽象类必须有抽象方法吗?
(1)抽象类不能是final的,将它们声明为final的将会阻止它们被继承,而这正是使用抽象类唯一的方法,它们也是彼此相反的,关键字abstract强制继承类,而关键字final阻止类被扩张。Java类不能既是final又是abstract的,编译时会报错。
(2)抽象类可以定义static方法,但此static方法无法没继承。
(3)不能创建抽象类的实例,即使抽象类不包含抽象方法,也不能实例化抽象类,否则编译时会报错。
(4)抽象类不强制性有抽象方法。只要使用关键字abstract就可以将类声明为抽象类。
8.重载和重写的区别
9.在 Java 中定义一个不做事且没有参数的构造方法的作用?
Java 程序在执行子类的构造方法之前,如果没有用 super()
来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super()
来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
10.String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
private final char value[]
,所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串 char[]value
但是没有用 final 关键字修饰,所以这两种对象都是可变的。 总结:
(1)操作少量的数据: 适用String
(2)单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder
(3)多线程操作字符串缓冲区下操作大量数据: 适用StringBuffer
11.成员变量与局部变量的区别有哪些?
static
修饰的,那么这个成员变量是属于类的,如果没有使用 static
修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。 12.一个类的构造方法的作用是什么? 若一个类没有声明构造方法,该程序能正确执行吗? 为什么? 构造方法有哪些特性?
(1)主要作用是完成对类对象的初始化工作。可以执行。因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法。
(2)构造方法的特性:
13.静态方法和实例方法有何不同?
13. == 与equals的区别?
14.hashCode()与equals()的区别?
从性能和可靠性进行分析:
总结:
15.hashCode()的作用?
hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
16.final关键字的作用?
17.Java中的异常处理?
所有的异常是Throwable类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。
finally块不会被执行的四种情况:
18.BIO、NIO、AIO有什么区别?
Socket
和 ServerSocket
相对应的 SocketChannel
和 ServerSocketChannel
两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好;非阻塞模式正好与之相反。对于低负载、低并发的应用程序,可以使用同步阻塞I/O来提升开发速率和更好的维护性;对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发。