面试之javaSe(四)

1.try catch finally,try里有return,finally还执行么?

  • try有return,finally没有
先执行try里return的之前的语句,再执行finally语句,然后执行return。

  • try和finally都有return
finally的return会把try中的覆盖,也就是说先执行try里的return之前的语句, 然后执行完finally就不执行了。

  • 如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:

    1)如果return的数据是基本数据类型,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。

    2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。


2.Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。


  • Throwable是java的所有错误或异常的超类。包含的两个子类有:Error和Exception 
  • java可抛出的(Throwable)的结构分为三大类:被检查的异常(CheckedException)、运行时异常(RuntimeException)和错误(Error)。
1.运行时的异常及其子类异常,java编译时不会抛出异常,例如除数为零,运行时会抛ArithmeticException(这是RuntimeException实现类)。
2.CheckedException异常在编译时就发生错误,无法通过编译。
    3.Error,和Runtime一样,编译时不会报错,当资源不足、约束失败、或是其它程序无法继续运行的条件发生时,就产生错误。程序本身无法修复这些错误的。例如,VirtualMachineError就属于错误。 
按照Java惯例,我们是不应该是实现任何新的Error子类的!

  • OOM:OutOfMemoryError(内存溢出)
  • SOF:StackOverFlow

3.Java面向对象的三个特征与含义。

三大特征:封装、继承、多态。

  • 封装:字面上理解是包装的意思,是指利用抽象类型将数据和基于数据的操作封装在一起,使其构成一个不可分割独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部细节,只保留一些对外接口与之联系。系统的其他对象只能通过暴露在外的接口于封装的对象经行交互,也就是说无需知道(也无法知道)对象的内部细节,但可以通过对外的接口来访问对象。
注意:
Java中能使用Java中能使用private、protected、public三种修饰符或不用(即默认defalut)对外部对象访问该对象的属性和行为进行限制。

1.private 

private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类),被private修饰的成员只能在本类中使用。

2.default(即不写任何关键字)

可以修饰类,数据成员,方法成员,构造方法。只能在同包下使用。

3.protected

protected可以修饰数据成员,构造方法,方法成员,不能修身类,同胞下使用或者子类使用。

4.public

类,数据成员,方法成员,构造方法都可以修饰,什么都可以调用。


封装的好处:

1、良好的封装能够减少耦合

 2、类的内部结构可以自由修改

 3、可以对成员进行精确的控制。

4、隐藏信息,实现细节。

  • 继承是指子类继父类的属性和行为,即父对象有的属性和行为,子对象也拥有。
使用继承的时候注意:

1.子类拥有父类非private的属性和方法

2.子类可以拥有自己的方法和属性,即子类可以对父类进行扩展。

3.子类可以用自己的方式实现父类。

  • 多态 :java引用变量有两个类型:一个事编译时类型,一个事运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。因为在程序时运行才确定具体的类,这样,不用修改源代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多种运行状态,这就是多态性。

比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白酒,从外面看我们是不可能知道

这是些什么酒,只有喝了之后才能够猜出来是何种酒。你一喝,这是剑南春、再喝这是五粮液、再喝这是酒鬼酒….

在这里我们可以描述成如下:

        酒 a = 剑南春

        酒 b = 五粮液

        酒 c = 酒鬼酒

这里所表现的的就是多态。剑南春、五粮液、酒鬼酒都是酒的子类,我们只是通过酒这一个父类就能够引用不同

的子类,这就是多态——我们只有在运行的时候才会知道引用变量所指向的具体实例对象。

多态的两个实现:一时基于子类继承父类,二是基于实现接口。


4. Override和Overload的含义与区别。

  • override:方法重写是子类父类多态性的体现,在子类中定义某方法与其父类有相同的名称和参数,我们说这方法被重写了。重写的特点
  1. 覆盖的方法的标志必须和被覆盖方法的标志完全匹配。
  2. 覆盖方法的返回值必须和被覆盖方法的一致
  3. 抛出的异常必须一致,或者是其子类。
  4. final方法不能重写
  5. 在继承中,如果父类某一方法是private,那么子类不能重写这方法,如果定义的话,也只是重新定义了一个方法,达不到重写效果。
  • overload:方法重载,如果一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同参数类型,或有参数类型次序不同,则称为方法被重载。不能通过访问权限、返回类型、抛出的异常进行重载。重载的特点:
  1. 在使用重载时只能通过不同的参数形式。参数类型、个数、次序
  2. 不能通过访问权限、返回类型、抛出的异常进行重载。
  3. 方法的异常类型和数目不会对异常构成影响。
  4. 重载通常发生在同一个类中,不同方法之间的现象
  • 二者区别:重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值

5.Interface与abstract类的区别。

  • Abstract类
  1. 抽象类不能被实例化,实例化的工作应该交由他的子类,他需要一个引用就行。
  2. 抽象的方法子类必须继承
  3. 只要包含一个抽象方法的类必须定义为抽象类,不管有没有其他方法
  4. 抽象类中可以包括具体方法,也可以不含有抽象方法
  5. 子类的抽象方法不能与父类的抽象方法同名
  6. abstract不能与final并列修饰一个类
  7. abstract不能与private、static、final、或native并列修饰一个方法
  • Interface接口
  1. Interface中的所有方法访问权限默认声明为public。确切的说只能用public
  2. 接口中可以定义“成员变量”,或者说是不可变的变量,因为接口中的’成员变量‘会自动变成public static final。可以通过类名直接访问,ImplementClass.name;
  3. 接口中不存在实现的方法
  4. 实现接口的非抽象类必须实现其接口所有方法,抽象类可以不用实现。
  5. 不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to )一个实现该接口的类的对象。可以使用instanceof检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}
  • 二者区别
    • 语法层次 :抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法,但在接口方式中他仅能够有静态、不能被修改的成员数据(但我们一般不会在接口中使用成员数据),同时他的方法必须都是抽象的,从某种程度上讲,借口就是抽象类的特殊化。还有一点,对于子类而言,只能继承一个抽象类但可以实现多接口。
    • 设计层次 
      1. 抽象层次不同。抽象类是对类的修饰,接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性行为,接口是对类的局部(行为)进行抽象
      2. 跨越不同,抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。我们知道抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承即可,但是接口不同,实现他的子类可以不存在任何关系,共同之处。
      3. 设计层次不同,对于抽象类而言,它是自下而上设计的,我们要先知道子类才能抽取出父类。而接口不同,它是自顶向下设计的。他根本就不需要知道子类的存在,只要定义一个规则即可,至于什么子类,什么时候实现它,一概不知。
  • 总结
    • 抽象类在java语言中所表示的是一种继承关系,一个子类存在与一个父类,但是可以存在多个接口
    • 在抽象类中可以拥有自己的成员变量和非抽象方法,但是接口中只能存在静态的不可变的成员,而且他的方法全是抽象的。
    • 抽象类和接口类设计的理念不同,抽象类所代表的是 “ is-a ”关系,接口代表的是“like-a”

6.Static class 与non static class的区别。


7. java多态的实现原理。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值