JAVA面试整理二

本文主要整理了JAVA面试中常见的10个问题,包括面向对象的理解、Java对象初始化顺序、Overload与Override的区别、int与Integer的区别、char类型存储中文、Serializable与Externalizable的对比、抽象类与接口的差异、String与StringBuilder、StringBuffer的使用场景、final、finally、finalize的解释,以及Java异常处理机制的原理和应用。
摘要由CSDN通过智能技术生成

1.说说你对面向对象思想的理解?

万物皆对象,我个人的理解是程序员作为一个指挥,去指挥部下去做事情。亦可以说面向过程,自己造电脑。面向对象,自己组装电脑。

2.Java 对象初始化顺序

  1. 静态语句块:在类加载到JVM时执行,由于JVM使用类的前提是类装载到JVM虚拟机,所以静态语句块首先执行,类只加载一次,静态语句块只执行一次。
  2. 静态变量初始化:由于静态变量为类的所有实例所共享,不依赖于具体的对象,因此不是在对象创建时初始化,而是在类加载时初始化,初始化顺序在静态语句块之后,只执行一次。
  3. 实例语句块:在构造方法前执行,每调用一次构造方法,执行一次。执行顺序在静态变量初始化之后,以成员变量初始化为参照,没有绝对的先后顺序,实际顺序取决于定义的顺序,定义在前,就在成员变量初始化前执行;定义在后,就在成员变量初始化后执行。
  4. 成员变量初始化:在构造方法前执行,每调用一次构造方法,执行一次。执行顺序在静态变量初始化之后,相对于实例语句块的执行顺序取决于定义顺序。
  5. 构造方法:构造函数同样可以调用静态变量和实例变量。

3.Overload 和 Override 的区别?Overload 的方法是否可以改变返回值的类型?

  1. 重写Override 表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类
    创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个
    完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法
    时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决
    父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能
    更小。如果父类的方法是private 类型,那么,子类则不存在覆盖的限制,相当于子类中增
    加了一个全新的方法。
  2. 重载Overload 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相
    同(即参数个数或类型不同)。
  3. Overload 的方法不可以改变返回值的类型。

4.int 和 Integer 有什么区别?

  1. int 是我们常说的整形数字,是 Java 的 8 个原始数据类型(Primitive Types,boolean、byte 、short、char、int、float、double、long)之一。不是对象!
  2. Integer 是 int 对应的包装类,它有一个 int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int 和字符串之间转换等。
  • 自动装箱:将基本类型数据重新转化为对象 Integer num = 9;
  • 自动拆箱:将对象重新转化为基本类型 int num1 = num。

5.char 型变量中能不能存储一个中文汉字,为什么?

char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,如果汉字被包含在 unicode 编码字符集中,那么,这个 char 型变量中就可以存储这个汉字;反之,如果这个汉字没有被包含在unicode 编码字符集中,那么就不能存储这个汉字。

6.Java 中,Serializable 与 Externalizable 的区别?

  1. Serializable 接口是一个序列化 Java 类的接口,以便于它们可以在网络上传输或者可以将它们的状态保存在磁盘上,是 JVM 内嵌的默认序列化方式,成本高、脆弱而且不安全。
  2. Externalizable 允许你控制整个序列化过程,指定特定的二进制格式,增加安全机制。

序列化的方法:

  • 实现 Serializable 接口:
  • 实现 Externalizable 接口,并重写 writeExternal() readExtenal() 方法

7.抽象类和接口有什么区别?

  1. 抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
  2. 抽象类要被子类继承,接口要被类实现。
  3. 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
  4. 抽象类是对象的抽象,接口是一种行为规范。

  5. 抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。

  6. 在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。

8.String 和 StringBuilder、StringBuffer 的区别?

  • String:适用于少量的字符串操作的情况。                                                                                          为字符串常量不可变。
  • StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。     是线程不安全的。               为字符串变量可变。   
  • StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。           是线程安全的。                  为字符串变量可变。

9.阐述 final、finally、finalize 的区别

  • 三者没有任何关系。

  1. final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。

  2. finally是异常处理语句结构的一部分,表示总是执行。

  3. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收。(很少用)

10.Java 中的异常处理机制的简单原理和应用。

  • 异常是指java程序运行时(非编译)所发生的非正常情况或错误。

Java可以自定义异常类,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception。

  1. Exception表示程序需要捕捉和处理的的异常.
  2. Error表示系统级别的错误和程序无需处理的。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值