Java面试通关要点汇总集答案(一)——面向对象的特征 final, finally, finalize 的区别[通俗易懂]

Java面试通关要点汇总集答案(一)——面向对象的特征 final, finally, finalize 的区别[通俗易懂]前言:临近求职季在网上看到一篇Java面试通关要点汇总集觉得应该有用,但是作者似乎没有整理答案,于是准备写这个连载为自己整理答案以及share一下,希望能坚持写完。每篇更新两个问题,答案来自网络所以不一定对,仅作参考。 面向对象的方法有三个基本特征:封装(encapsulati…

前言:临近求职季在网上看到一篇Java面试通关要点汇总集觉得应该有用,但是作者似乎没有整理答案,于是准备写这个连载为自己整理答案以及share一下,希望能坚持写完。每篇更新两个问题,答案来自网络所以不一定对,仅作参考。

一、面向对象的特征

面向对象的方法有三个基本特征:封装(encapsulation),继承(inheritance),和多态(polymorphism)。抽象也是面向对象的重要部分,但注意:它不是面向对象的特征之一。原因是所有的编程语言都需要抽象,当开发者进行抽象时应该考虑哪些特征是软件系统所需要的,那么这些特征就应该使用程序记录出来,因此,需要抽象哪些特征没有必然的规定,而是取决于软件系统的功能需求。

(1)封装(Encapsulation)

所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中

(2)继承(Inheritance)

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;无关的部分意外的改变或错误的使用了对象的私有部分。

(3)多态(Polymorphism)

多态就是通过传递给父类对象引用不同的子类对象从而表现出不同的行为(通俗说法)。所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

(4)非特征:抽象

忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口).抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一个数据抽象,而是过程抽象.

  • 数据抽象 –>表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)
  • 过程抽象 –>表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)

参考链接:

二、final, finally, finalize 的区别

(1)final

final关键字可用于修饰变量,方法和类,用于表示其修饰的变量,方法和类不可改变。 final修饰的成员变量是不可变的,如果成员变量是基本数据类型,初始化之后成员变量的值不能被改变,如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的对象,但是对象当中的内容是允许改变的。final关键字用于方法声明前:这时意味着该方法时最终方法,只能被调用,不能被重写,但是可以被重载(重写和重载的区别)(注:这个链接里说的好像有点问题。根据《疯狂Java》p122 java里不能使用返回值类型作为区分方法重载的依据。我的理解:1、重载(两同一不同):同一个类中同一个名字的方法,参数列表不同。2、重写(两同两小一大):不同类中,子类继承extends父类,子类包含与父类同名的方法,方法名相同、形参列表相同;子类方法返回值比父类的小或者相等;子类方法的访问权限比父类方法的大)。final修饰的,不能被继承(String、StringBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写,所以不能同时用abstract和final修饰类(abstract修饰的类是抽象类,抽象类是用于被子类继承的,和final起相反的作用)。

(2)finalize

finalize方法来自于java.lang.Object,用于回收资源。 可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。 在实际应用中,不要依赖使用该方法回收任何短缺的资源,这是因为很难知道这个方法什么时候被调用。垃圾回收只负责回收内存,并不负责资源的回收,资源回收要由程序员完成,Java虚拟机在垃圾回收之前会先调用垃圾对象的finalize方法用于使对象释放资源(如关闭连接、关闭文件),之后才进行垃圾回收,这个方法一般不会显示的调用,在垃圾回收时垃圾回收器会主动调用。

(3)finally

当代码抛出一个异常时,就会终止方法中剩余代码的处理,并退出这个方法的执行。假如我们打开了一个文件,但在处理文件过程中发生异常,这时文件还没有被关闭,此时就会产生资源回收问题。对此,java提供了一种好的解决方案,那就是finally子句,finally子句中的语句是一定会被执行的,所以我们只要把前面说的文件关闭的语句放在finally子句中无论在读写文件中是否遇到异常退出,文件关闭语句都会执行,保证了资源的合理回收。

import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.InputStream;  
  
public class Finally {  
    void fileWith(){  
        InputStream in = null;  
        try {  
            in = new FileInputStream("wang.txt");  
            //其他操作 
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        }finally{  
            try {  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
}  

参考链接:

Java中final,finalize和finally的区别

final、finally、finalize区别

-over

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13029.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注