1.说说你对面向对象思想的理解?
面向对象是相对于面向过程来讲的,指的是把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,是一种对现实世界“理解”和“抽象”的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象是程序员思想上从执行者到指挥者的转变。
包含了三大特征:封装性、继承性、多态性。
2.Java 对象初始化顺序
静态语句块 => 静态变量初始化 => 实例语句块/成员变量初始化(实例语句块与成员变量初始化的相对执行顺序取决于定义的先后顺序) => 构造方法
3.重载Overload 和 重写Override 的区别?Overload 的方法是否可以改变返回值的类型?
Overload 和 Override 的区别:
发生位置不同: overload 发生在一个类中
override 发生在子父类中
参数限制不同:overload参数不相同
override参数必须相同
返回值类型要求不同:overload 与返回值类型没有关系
override 返回值类型必须相同
访问权限不同:overload与访问权限无关
override要求子类的方法权限不能小于父类的方法权限
异常处理不同:overload与异常无关
override的异常范围可以更小更精准,但不能抛出新的异常
4.int 和 Integer 有什么区别?
int是基本数据类型中的整数型,而Interger是int的包装类;
Integer变量必须实例化后才能使用;int变量不需要;
Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
Integer的默认值是null;int的默认值是0。
5.char 型变量中能不能存贮一个中文汉字,为什么?
char是基本数据类型中的字符型,占用两个字节,值范围(含边界值):‘ \u0000 - u\ffff ’,用来存储unicode码,而unicode编码字符集中包含汉字,所以能且只能存贮一个中文汉字。
6.Java 中,Serializable 与 Externalizable 的区别?
Serializable 接口是一个序列化 Java 类的接口,以便于它们可以在网络上传输 或者可以将它们的状态保存在磁盘上,是 JVM 内嵌的默认序列化方式,成本高、脆弱而且不安全。
Externalizable 允许你控制整个序列化过程,指定特定的二进 制格式,增加安全机制。
7.抽象类和接口有什么区别?
参数 | 抽象类 | 接口 |
概念 | 抽象类必须使用abstract class声明 | 如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口。 |
格式 | | |
默认的方法实现 | 可以有默认的方法实现 | 完全抽象,不存在方法实现 |
实现 | 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 | 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现,可以多实现。 |
构造器 | 可以有构造器 | 接口不能有构造器 |
与正常Java类的区别 | 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 | 接口是完全不同的类型 |
访问修饰符 | 抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public。你不可以使用其它修饰符。 |
多继承 | 抽象方法可以继承一个类和实现多个接口 | 接口只可以继承一个或多个其它接口 |
速度 | 它比接口速度要快 | 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 |
8.String 和 StringBuilder、StringBuffer 的区别?
首先,String和StringBuilder、StringBuffer都是JAVA中处理字符串常用的类,都是final类,不允许被继承;
其次:
三者的区别:
String为字符串常量,一经创建不得更改,运行速度最慢,适用于少量的字符串操作的情况。
StringBuilder、StringBuffer都为字符串变量,是可以更改的:
StringBuffer是线程安全,可以不需要额外的同步用于多线程中,运行速度次于StringBuilder,适用多线程下在字符缓冲区进行大量操作的情况;
StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了,适用于单线程下在字符缓冲区进行大量操作的情况。
StringBuffer与StringBuilder两者共同之处:可以通过append、indert进行字符串的操作。
9.阐述 final、finally、finalize 的区别。
- final关键字用于修饰属性、变量:变量成为了常量,无法再次对其进行赋值;用于修饰类,类不可以被继承;用于修饰方法时,子类不能重写。
- finally为异常处理中作为异常处理的统一出口,不管是否发生异常都要执行此段代码。
- finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收。
10.Java 中的异常处理机制的简单原理和应用。
异常是在程序中导致程序中断运行的一种指令流。
Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。
所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:
1.Error:表示的是错误,是JVM发出的错误操作,只能尽量避免,无法用代码处理。
2.Exception:一般表示所有程序中的错误,所以一般在程序中将进行try…catch的处理。
处理流程:
一旦产生异常,则系统会自动产生一个异常类的实例化对象。此时如果异常发生在try语句,则会自动找到匹配的catch语句执行,如果没有在try语句中,则会将异常抛出。所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理。
在进行异常的处理之后,在异常的处理格式中还有一个finally语句,那么此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码。catch和finally可以省略其中一个 ,catch和finally不能同时省略。