​阶段测试-OOP​

这篇博客详细探讨了面向对象编程的核心概念,包括Java中的对象初始化顺序、Overload与Override的区别、int与Integer的差异。同时,还深入讲解了char型变量存储中文汉字的可能性、Serializable与Externalizable的异同、抽象类与接口的比较,以及String、StringBuilder和StringBuffer的使用场景。此外,博主还阐述了final、finally和finalize的关键区别,并介绍了Java异常处理的基本原理和实践应用。
摘要由CSDN通过智能技术生成

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

      面向对象是相对于面向过程来讲的, 指把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。面向过程到面向对象, 是程序员思想上 从执行者到指挥者的转变
        eg:把大象装进冰箱
                面向过程:将自己作为事情的执行者,    打开冰箱门,装大象,关门
                面向对象:我来调用一个一个整体让他替我执行需要做的事      找个对象,指挥他装大象

2.Java 对象初始化顺序

          类变量(静态变量)--静态代码块--实例变量(非静态变量)--非静态代码块--构造函数
            由 static 关键字修饰的(如:类变量[静态变量]、静态代码块)将在类被初始化创建实例对象之前被初始化,而且是按顺序从上到下依次被执行;
                     没有 static 关键字修饰的(如:实例变量[非静态变量]、非静态代码块)初始化实际上是会被提取到类的构造器中被执行的,但是会比类构造器中的代码块优先执行到,其也是按顺序从上到下依次被执行。
1、在new B一个实例时首先要进行类的装载。(类只有在使用New调用创建的时候才会被java类装载器装入)
2、在装载类时,先装载父类A,再装载子类B
3、装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,按照代码中出现的顺序初始化)
4、装载 子类B后,完成静态动作
                   类装载完成,开始进行实例化
1、在实例化子类B时,先要实例化父类A2,实例化父类A时,先成员实例化(非静态代码)
2、父类A的构造方法
3、子类B的成员实例化(非静态代码)
4、子类B的构造方法
顺序: 先初始化父类的静态代码—>初始化子类的静态代码–>初始化父类的非静态代码—>初始化父类构造函数—>初始化子类非静态代码—>初始化子类构造函数
                  

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

1>区别:   1、发生的位置
                           重载:一个类中
                           重写:子父类中
              2、参数列表限制
                           重载:必须是不同的(长度,类型,类型顺序...必须有一个是不同的)
                           重写:必须是相同的
             3、返回值类型
                           重载:与返回值类型无关
                           重写:与返回值类型必须一致
             4、访问权限
                           重载:与访问权限无关
                           重写:子的方法权限必须不能小于(大于等于)父的方法权限
            5、异常处理
                           重载:与异常无关
                           重写:异常范围可以更小,但是不能抛出新的异常
2> Overload的方法可以改变返回值的类型,因为它与返回值类型无关。
Override(重写): 方法的重写,发生在类的继承中(不适用,所以重新写)
                                        规则: 1.  参数列表必须完全与被重写方法的相同;   
                                                   2.  返回类型必须完全与被重写方法的返回类型相同;
                                                   3.  访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
                                                   4.  父类的成员方法只能被它的子类重写。
                                                   5.  声明为static和private的方法不能被重写,但是能够被再次声明。
            

4.int 和 Integer 有什么区别?

        int                                Integer
     基本数据类型                   包装类
     速度快                             速度慢
      栈中                                堆中
     初始值 = 0                      初始值 = null
     int是整型数字,是Java的8个原始数据类型之一。
       Integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算、int和字符串之间转换等。

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

   可以的,char型变量是用来存储Unicode编码的字符的,Unicode编码字符集中包含了汉字。但是如果没有被包含在Unicode的特殊汉字,则不可以存储。
  Unicode包含范围:
    汉字:[0x4e00,0x9fa5](或十进制[19968,40869])
数字:[0x30,0x39](或十进制[48, 57])
小写字母:[0x61,0x7a](或十进制[97, 122])
大写字母:[0x41,0x5a](或十进制[65, 90])
其他:除上所有

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

       java.io.Serializable: JDK1.1, 此接口是一种标准, 实现此接口的对象被序列化.
         java.io.Externalizable: JDK1.1, 继承接口 Serializable, 并加入两个自己的的方法[writeExternal(), readExternal()]
   

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

1、抽象类要被子类继承,接口要被类实现。
2、接口只能声明抽象方法,抽象类中可以声明抽象方法,也可以写非抽象方法。
3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
4、抽象类使用继承来使用, 无法多继承。 接口使用实现来使用, 可以多实现
5、抽象类中可以包含static方法 ,但是接口中不允许(静态方法不能被子类重写,因此接口中不能声明
静态方法)
6、接口不能有构造方法,但是抽象类可以有

8.String 和 StringBuilder、StringBuffer 的区别?

-String底层是一个final类型的字符数组,所以String的值是不可变的,每次对String的操作都会生成新的String对象,造成内存浪费
-而StringBuffer和StringBuilder就不一样了,他们两都继承了AbstractStringBuilder抽象类, 他们的底层都是可变的字符数组,所以在进行频繁的字符串操作时,建议使用StringBuffer和StringBuilder来进行操作。
-StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于-- StringBuilder 的方法不是线程安全的(不能同步访问)由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

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

--1、 final修饰符(关键字)。被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,可以保证他们在使用的过程中不被修改。被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。被final声明的方法也同样只能使用,即不能方法重写。
--2、 finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是否发生,都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。
--3、 finalize是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

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

  异常指的是Exception , Exception类, 在Java中存在一个父类Throwable(可能的抛出)
   Throwable存在两个子类:
       1.Error:表示的是错误,是JVM发出的错误操作,只能尽量避免,无法用代码处理。 Error 表示应用程序本身无法克服和恢复的一种严重问题,程序只有死的份了。     如,说内存溢出和线程死锁等系统问题。
       2.Exception:一般表示所有程序中的错误,所以一般在程序中将进行try…catch的处理。
try -catch的处理流程   
1、 一旦产生异常,则系统会自动产生一个异常类的实例化对象。
2、 那么,此时如果异常发生在try语句,则会自动找到匹配的catch语句执行,如果没有在try语句中,则会将异
常抛出.
3、 所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值