OOP面试题
- 1.说说你对面向对象思想的理解?
- 2.Java 对象初始化顺序
- 3.Overload 和 Override 的区别?Overload 的方法是否可以改变 返回值的类型?
- 4.int 和 Integer 有什么区别?
- 5.char 型变量中能不能存贮一个中文汉字,为什么?
- 6.Java 中,Serializable 与 Externalizable 的区别?
- 7.抽象类和接口有什么区别?
- 8.String 和 StringBuilder、StringBuffer 的区别?
- 9.阐述 final、finally、finalize 的区别。
- 10.Java 中的异常处理机制的简单原理和应用
- 11.java中switch小括号中表达式可以是什么类型?
1.说说你对面向对象思想的理解?
面向对象就是把构成问题的事物抽象化分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事物在解决问题中的行为。
类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。
2.Java 对象初始化顺序
类变量(静态变量)、实例变量(非静态变量)、静态代码块、非静态代码块 的初始化时机
先初始化父类的静态代码—>初始化子类的静态代码–>初始化父类的非静态代码—>初始化父类构造函数—>初始化子类非静态代码—>初始化子类构造函数
详情请看: https://blog.csdn.net/aaronjcq/article/details/81558582.
3.Overload 和 Override 的区别?Overload 的方法是否可以改变 返回值的类型?
Overload是重载的意思,
Override是覆盖的意思,也就是重写。
重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。
重载可以改变返回值类型,重写不可以改。
详细请看: https://blog.csdn.net/singit/article/details/47722047.
4.int 和 Integer 有什么区别?
1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 。
4、Integer的默认值是null,int的默认值是0
5.char 型变量中能不能存贮一个中文汉字,为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字, 所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
6.Java 中,Serializable 与 Externalizable 的区别?
Serializable 接口是一个序列化 Java 类的接口,以便于它们可以在网络上传输或者可以将它们的状态保存在磁盘上,是 JVM 内嵌的默认序列化方式,成本高、脆弱而且不安全。Externalizable 允许你控制整个序列化过程,指定特定的二进制格式,增加安全机制。
7.抽象类和接口有什么区别?
1、抽象类要被子类继承,接口要被类实现。
2、接口只能声明抽象方法,抽象类中可以声明抽象方法,也可以写非抽象方法。
3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
4、抽象类使用继承来使用, 无法多继承。 接口使用实现来使用, 可以多实现
5、抽象类中可以包含static方法 ,但是接口中不允许(静态方法不能被子类重写,因此接口中不能声明静态方法)
6、接口不能有构造方法,但是抽象类可以有
8.String 和 StringBuilder、StringBuffer 的区别?
速度比较:String < StringBuffer < StringBuilder
String是不可变的对象
StringBuffer是可变对象
StringBuilder是可变对象
StringBuffer是线程安全的
StringBuilder是非线程安全的, 这也是速度比StringBuffer快的原因
使用场景
(1)如果要操作少量的数据用 String
(2)单线程操作字符串缓冲区 下操作大量数据 StringBuilder
(3)多线程操作字符串缓冲区 下操作大量数据 StringBuffer
详细请看: https://www.jianshu.com/p/dcfcea438462.
9.阐述 final、finally、finalize 的区别。
一、final :
1、修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生新的子类,不能作为父类被继承。因此一个类不能及被声明为abstract,又被声明为final的。
2、将变量或方法声明为final,可以保证他们使用中不被改变。被声明为final的变量必须在声明时给定初值,而以后的引用中只能读取,不可修改,被声明为final的方法也同样只能使用,不能重载。
二、finally:
在异常处理时提供finally块来执行清楚操作。如果抛出一个异常,那么相匹配的catch语句就会执行,然后控制就会进入finally块,如果有的话。
三、finalize:
是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除之前做必要的清理工作。这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的。
finalize是在Object类中定义的,因此,所有的类都继承了它。子类可以覆盖finalize()方法,来整理系统资源或者执行其他清理工作。
10.Java 中的异常处理机制的简单原理和应用
1.发生异常(JVM根据异常的情况,创建了一个异常对象-包含了异常信息)
2.main未处理,自动将异常抛给了main的调用者JVM
3.JVM对异常信息进行了响应(将异常信息显示到控制台,中断处理)
Try{
//可能发现异常的语句块
}catch(异常类型,e){
//发生异常时候的执行语句块
} finnally{
//不管是否发生异常都执行的语句块
}
11.java中switch小括号中表达式可以是什么类型?
java语言中switch(x)语句括号中的表达式 x 的类型可以是哪些呢?
x 准确的说,数值型的只可以是 int 类型,但是 byte, short, char 都可以自动转换成 int 类型,所以 x 也可以是byte, short, char。当然了,对应的包装类也是可以自动转换,所以 x 也可以是包装类型的。
无论哪个版本的JDK,都是不支持 long,float,double,boolean 这个一定要注意!
详细请看: https://blog.csdn.net/qq_42674061/article/details/108946942/.