初级Java攻城狮面试指导(二)

  1. 云栖社区>
  2. 博客>
  3. 正文

初级Java攻城狮面试指导(二)

科技小能手 2017-11-12 16:57:00 浏览951

一、Java面向对象必会知识点

    Java的核心是面向对象编程,所有的java程序都是面向对象的。需要看清Java的本质,从复杂的表象中寻找普遍的规律,并深刻理解Java的核心思想。

    1.面向对象的特点总结

    封装:隐藏在对象的属性和实现细节,仅对外提供公共的访问方式

    继承:在一个类基础上定义一个新类,原有的类叫父类,新生成的类叫子类

    多态:事物存在多种体现的形态

    面向对象程序设计的优点是:可重用性、可扩展性、可管理性

    2.类与对象特性总结

    类与对象的概念:

    类是具体事物的抽象,在概念上的定义

    对象是该类事物实实在在存在的个体

    类方法的特点:  

    匿名对象:

    当对象的方法只被调用一次时,可以使用匿名对象来完成

    可以将匿名对象作为实际参数进行传递

    构造函数与构造代码块:

    构造代码块给所有对象进行统一初始化,构造函数给对象初始化

     构造代码块中定义的是不同对象共性的初始化内容

    接口:

    接口与接口之间是可以进行多继承的

    接口可以传递一些模块交互的信息,因为没有需要实现的代码,所以比较安全

    接口可以定义一些规范,这些规范是定制的标准,它把服务的定义者和实现者分开

    Object类:

    3.变量的特点总结

    变量相关知识点:

    成员变量与局部变量:

    成员变量定义在类中,在整个类中都可以被访问,成员变量随着对象的建立而建立,存在于对象所在的堆内存中,成员变量都有默认的初始化值

    局部变量只能定义在局部范围内,比如函数内,语句内。局部变量存在于栈内存中,局部变量作用的范围结束,空间就会被自动释放。局部变量没有默认的初始化值。

    实例变量与类变量:

    示例变量随着对象的建立而建立,实例变量随着对象的建立而存在于堆内存中。

    类变量随着类的加载而存在于方法区中

    静态变量

    静态变量是随着static关键字来修饰的

    变量的声明周期

    类变量的声明周期最长,随着类的消失而消失

    实例变量的声明周期随着对象的消失而消失

    

二、Java面向对象知识点精华

    Java面向对象20个知识点精华:

    1.抽象、封装、继承、多态是面向对象程序设计中的四个特点。

    2.面向对象的软件开发大体分为:面向对象的分析,面向对象的设计,面向对象的实现。

    3.面向对象程序设计方法的优点是:可重用性,可扩展性,可管理性

    4.类的定义:class前的修饰符分为访问控制符和非访问控制符两大类。访问控制符包括public和private。非访问控制符包括abstract,final。

    5.final类是最终类,是不能有子类的类。abstract和final不能同时修饰一个类,因为抽象类本身没有具体对象,需要派生出子类后再创建子类的对象。而最终类不可能有子类。

    6.创建对象的格式为:类名 对象名 = new 构造方法(参数);注意前面是类名后面是构造方法。要注意构造方法没有返回类型,也不能写void。构造方法主要用于完成对象的初始化工作,在编程时不能直接去调用,而应该用new运算符来调用。

    7.如果class前有public修饰符,而默认构造方法的前面也应该有public修饰符。

    8.类中有static修饰的域或方法,可用类名或对象名访问,否则只能用对象名访问。

    9.修饰域的访问控制符可以是public、private、protected、private protected。非访问控制符可以是static,final,volatile(易失域)。

    10.类变量的最本质的特点是:他们是类的域,不属于任何一个类的具体对象的实例。

    11.局部变量是在方法体内进行声明的,只有当方法被调用时它们才存在,因而只能在本方法内使用,不存在访问控制符,也不能声明为静态变量(static),但是可以声明为final变量。局部变量必须初始化。

    12.修饰方法的访问控制符可以是:public,private,protected,private protected

      修饰方法的非访问修饰符可以是:static,final,abstract,native(本地方法),synchronized(同步方法)。

    13.用static修饰的变量或方法都为类成员,类成员可以用类名或实例名访问,实例成员只能用实例名访问。

    14.如果一个类中含有抽象方法,则此类必须为抽象类,如果抽象类的子类不为抽象类,则子类必须实现父类所有的所有抽象方法。抽象方法不能用静态方法和最终方法。抽象方法只有函数头的声明,而用分号来代替方法体,没有大括号。

    15.this变量用在一个方法的内部,指向当前对象,当前对象指的是调用当前正在执行的方法的的那个对象。super变量是直接指向父类的构造方法,用来引用父类中的变量和方法。

    16.如果要引用一个包中的多个类,可以用星号来代替。使用星号只能表示本层次的所有类,而不能包括子层次下的类。经常需要用两条语句来引入两个层次的类:

    import java.awt.*;

    import java.awt.event.*;

    17.关于访问修饰符:

    类中限定为public的成员可以被所有的类访问。

    类中限定为private的成员只能被这个类本身访问。

    类中限定为protected的成员可以被这个类本身,它的子类,以及同一个包中的其它类访问。

    用private protected修饰的成员可以被该类本身访问,也可以被该类的所有子类访问。 

    默认访问控制符规定只能被同一个包中的类访问和引用,不能被其他包的类访问。

    18.注意:abstract和private,static,final,native不能并列修饰同一个方法。

          abstract类中不能有private修饰的域或方法

         static方法不能处理非static的域

    19.重载方法的参数必须不同,或者是参数个数不同,或者是参数类型不同。

    20.在java中,一个类获取某一接口定义的功能并不是通过直接继承这个接口的属性和方法实现的。因为接口中的属性都是常量,接口的方法都是没有方法体的抽象方法,没有具体定义操作。   


三、Java面向对象面试案例解析

    1.用自己的语言表述面向对象的特征:

    抽象

    封装

    继承

    多态

    本题不能简单地回答以上四个要点,还要深入的进行解释。

    抽象就是忽略一个主题中与当前目标无关的某些方面,以便更充分的注意到与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用过问细节。抽象包括两个方面:第一方面是过程抽象,第二是数据抽象。

    继承是一种连接类的层次模型,并且允许和鼓励类的重用。它提出了一种明确、表示性的方法。对象的一个新类可以从现有的一个类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类,也是子类。而原始类称为新类的基类,也叫父类。派生类可以从基类那里继承方法和实例变量,并且类可以修改或增加新的方法,使其更适合特殊的需要。

    封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

    多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名的问题。

    2.Overload和Override有什么区别?

    首先要讲清楚Overload和Override的定义,然后再描述它们的区别

    方法的重写Overriding和重载Overloadding是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果子类中定义某种方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数,或有不同的参数类型,则成为方法的重载(Overloading)

    3.abstract class和interface有什么区别?

    这道题考查我们对抽象类和接口方面的知识点

    abstract class是抽象类,interface是接口

    声明方法的存在而不去实现它的类叫抽象类,它是一个用于创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况;不能创建abstract类的实例,然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个含义;不能有抽象构造函数或抽象静态方法。abstract类的子类对它们的父类中的所有抽象方法提供实现,否则它们也是抽象类,取而代之,在子类中实现该方法,直到其行为的其他类可以在类中实现这些方法。

    接口是抽象类的变体。在接口中,所有方法都是抽象的,没有一个有程序体。多继承性可以通过实现这样的接口而获得。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义了所有这种接口的方法,然后它可以在实现了该接口的类上的任何对象上调用该接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型,通常的动态联编将生效,引用可以转换到类型接口或从接口类型转换。instanceof运算符可以确定某对象的类是否实现了接口。

    4.当一个对象被当作参数传递到一个方法后,此方法可以改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

    当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用时永远不会改变的。

    5.abstract的method是否同时是static,是否可同时是native,是否可同时是synchronized?

    abstract用于声明抽象的方法,抽象方法并没有方法内容,不能被直接调用,必须在子类Overriding后才可以被使用。所以访问被abstract修饰的方法要依赖具体的对象实例,而被static修饰的方法是被直接访问的。这就引发了逻辑上的冲突。同时还要注意父类中是静态方法,子类中不能覆盖为非静态方法。

    native用来声明本地方法,该方法的实现由非java语言实现,比如说C语言。一般用于Java与外界环境交互或与操作系统交互。native可于其他的Java修饰符连用,但是abstract除外,因为用native修饰过的方法是由实现体的,但是用abstract修饰过的方法显然没有实现体。

    sychronized用于防止多个线程同时调用一个对象的该方法。从sychronized的功能也可以看出使用它的前提是该方法可以被直接调用,显然与abstract不能联用。abstract与synchronized不能同时使用

    答案:都不能。

    6.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?

    接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数(但是和实体类的继承一样,也要求父类可继承,并且拥有子类可访问到的构造器。)。

    

    


本文转自yeleven 51CTO博客,原文链接:http://blog.51cto.com/11317783/1775912