入门基础简答题
1.for each 语句是什么。
答:格式:for(声明循环变量:数组的名字) {
……
}
定义一个循环变量用于暂存集合中的每一个元素,并执行相应的语句(也可以是语句块)。集合表达式必须是一个数组或者是一个实现了lterable接口的类(例如ArrayList)对象。声明的循环变量的类型必须和数组的类型相同,对于循环变量依次取数组的每一个元素的值。
2.Java数据类型可以分为哪两大类。
答:基本数据类型、引用类型。
基本数据类型:字符型(char)、布尔型(boolean)、数字型(又分为整数型和浮点型,整数型:字节型、短整型、整型、长整型,浮点型:单精度、双精度)
引用类型:类(class)、接口(interface)、数组(array)、枚举(enum)
3.&&和&的区别。
答:&&是逻辑与运算符,&是按位与运算符,它们都是双目运算符,区别是:对于a&&b和a&b(a、b为布尔值),位运算符要在计算完a、b的值之后再给出运算结果,当a为false时,逻辑与运算符不计算b表达式,直接给出false,位运算符仍要计算b表达式的值。
4.简述instanseof运算符。
答:instanseof运算符是双目运算符,左面的操作元是一个对象,右面是一个类。当左面的对象是右面类或其子类创建的对象时,该运算符的结果是true,否则是false。
类与对象
1.简述类变量和实例变量的区别。
答:加上static称为类变量或静态变量,否则称为实例变量;
类变量是与类相关的,公共的属性;
实例变量属于每个对象个体的属性;
类变量可以通过类名.类变量名直接访问,也可通过对象名.类变量名访问,实例变量只能通过对象名.类变量名访问。
2.简述类方法和实例方法的区别。
答:对象调用实例方法
当对象调用实例方法时,该方法中出现的实例变量就是分配给该对象的实例变量;该方法中出现的类变量也是分配给该对象的变量,只不过这个变量和所有的其他对象共享而已。
类名调用类方法
从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。和实例方法不同的是,类方法不可以操作实例变量,这是因为在类创建对象之前,实例成员变量还没有分配内存。
3.方法重载与方法重写(覆盖)的区别。
答:方法重载(行为的多态性):在一个类中可以有多个方法具有相同的名字,但方法的参数必须不同(参数个数不同或参数个数相同但参数列表中对应的某个参数的类型不同)。
方法重写(与继承有关的多态):发生在子类继承父类方法时。重写方法的类型必须与父类相同或是父类方法类型的子类型;重写的方法的名字、参数个数、参数类型必须与父类完全相同。
4.面向对象语言有哪三个特性。
答:封装,将对象的数据和基于数据的操作封装成一个独立性很强的模块。
继承,在当前类的基础上创建新类,在其中添加新的属性和功能。当前类与新类之间是一种一般性与特殊性的关系。
多态,一个程序中同名的不同方法共存,子类的对象可以响应同名的方法,具体的实现方法却不同,完成的功能也不同。
5.多态是如何实现的。
答:多态实现的前提必须是在继承关系下,必须重写方法;
多态实现遵循两个要点,其一将把子类对象向上转型为父类类型,其二采用父类对象调用同名的方法,系统则可通过动态绑定自动识别调用的方法所属类;
多态是一种继承关系下基于动态绑定机制的接口特例。
接口方式实现多态;继承父类进行方法重写;同一个类中进行方法重载。
多态存在的必要条件:有继承、有重写、向上转型(父类引用指向子类对象)。
6.简述this关键字的作用。
答:this表示某个对象,可以出现在实例方法和构造方法中,但不可以出现在类方法中。
在构造方法中使用this:当this出现在构造方法中时,代表使用该构造方法所创建的对象;
在实例方法中使用this:实例方法只能通过对象来调用,不能用类名来调用。当this出现在实例方法中时,this就代表正在调用该方法的对象。实例方法可以操作类的成员变量,当实例成员变量在实例方法中出现时,默认的格式是:this.成员变量。类的实例方法可以调用类的其他方法,对于实例方法,调用的默认格式是:this.实例方法。
7.static可以修饰构造方法吗。
答:不可以。类方法是独立于对象的类的方法,不能创建实例,而构造方法是用来实例化对象的,而且static方法允许通过类名.静态方法名(实参)来调用,当构造方法不允许手动调用。
8.什么是可变参数。
答:在声明方法时不给出参数列表中从某项开始直至最后一项参数的名字和个数,但这些参数的类型必须相同。可变参数用...表示若干个参数。
9.简述对象的组合和复用。
答:一个类可以把某个对象作为自己的一个成员变量。
如果一个对象a组合了对象b,那么对象a就可以委托对象b调用其方法,即对象a以组合的方式复用对象b的方法。
子类与继承
1.对象的上转型对象有什么特点?
答:上转型对象不能操作子类新增的成员变量;不能使用子类新增的方法。上转型对象可以操作子类继承或者隐藏的成员变量,也可以使用子类继承的或者重写的方法。上转型对象操作子类继承或重写的方法,其作用等价于子类对象去调用这些方法。因此,如果子类重写了父类的某个方法,则当对象的上转型对象调用这个方法时一定是调用了这个重写的方法。
2.简述super关键字的作用。
答:super关键字指代父类对象引用;
访问被子类隐藏的父类同名成员变量和成员方法;
调用父类构造方法,且必须在子类构造方法的第一条代码;(子类构造方法执行的时候,如果没有用super显式调用父类构造方法,将默认执行super(),即系统会默认调用父类不带参的构造方法,因此,最好定义父类不带参的构造方法,以免程序报错!)
注意:不能在静态方法中使用super和this关键字。
3.什么是面向抽象的编程。
答:当设计某种重要的类时不让该类面向具体的类,而是面向抽象类,即所涉及类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。面向抽象编程的核心是让类中每种可能的变化对应地交给抽象类的一个子类去负责,从而让该类的设计者不用关心具体的实现。
4.简述动态绑定。
答:如果在父类和子类中都提供了相同的方法,而此方法被转型后的对象使用,那么系统将会自动调用子类中的方法,原因是Java提供了动态绑定机制,能识别出对象转型前的类型,从而自动调用该类的方法。
绑定: 将一个方法调用同一个方法主体连接到一起
静态绑定:也就是在编译时编译器就能准确地判断应该调用哪个方法。
动态绑定:程序在运行期间由JVM自动地判断应该调用那个方法。