技术改变世界 创新驱动发展
55.内部类是在一个类内嵌套定义的类。其特点描述错误的是( A )
A.只能在定义它的类或程序段中或表达式内匿名使用,外部使用时必须给出类的全名 B.可以使用它所在类的静态成员变量或实例成员变量,但不可以使用所在类中的局部变量(后半句可对可错,看怎么理解)
C.可以作为其它类的成员,而且可访问它所在类的成员 D.除static内部类外,不能在类内声明static成员
二、填空题(每空0.5分,共26.5分)
1、在类声明中提供类标志的关键字是 class 。
2、当一个方法中有多个参数时,参数之间是用英文逗号隔开。 3、在Java中,使用变量遵守先声明后使用(先定义后使用)的原则。 4、比较两个字符串是否相同采用 equals() 方法。
5、 抽象 方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。
6、包定义时,需使用关键字package来实现。创建一个名为 MyPackage 的包的语句是package MyPackage;。要使用包中的类,必须用关键字import导入这些类所在的包。当要引用包中所有的类时,类名可以用通配符 * 号代替。
7、对象是由一组属性和对这组属性进行 操作 的一组服务组成的。对象是指 具体 的事物,而类是指一类具有某种共性的事物。由类来确定具体对象的过程称为 实例化 。 8、 对一类对象的抽象则是类,而类的实例化结果是 对象 。一个类是由类声明和 类体两部分组成。类修饰符有3种,它们分别是public、abstract和final。
8、 抽象 类不能被实例化,它不具备实际功能,只用于衍生子类。 抽象 方法是只有方法声明,没有代码实现的空方法。
9、当一个类的类修饰符为final时,说明该类不能被继承,即不能有子类。
10、Java用extends关键字指明继承关系。一个类要从另一个类继承变量和方法,必须使用关键字extends。Java程序在extends之后只能有一个父类,即extends只能实现 单 继承。在Java中只能实现单继承(Java不支持多重继承),但可通过 接口 实现多重继承。 11、要在类声明中实现接口,需使用关键字implements。一个类可实现多个接口,各接口名是以英文逗号分隔。
12、在Java中,变量分为成员变量和局部变量。在类体中声明的变量称为 成员变量。在方
您的未来就是我们的未来
技术改变世界 创新驱动发展
法中声明的变量称为 局部变量 。成员变量在整个类体中有效,而局部变量只在定义它的 方法 内有效。如果局部变量名与成员变量名相同,则成员变量被屏蔽。
13、在Java程序中,使用关键字 this 来引用当前对象。Java中通过关键字super来实现对父类成员的访问。
14、一个方法的定义是有方法声明和 方法体 两部分组成。方法声明包括方法名、返回类型和形式参数,一个方法的标志是 圆括号 。
15、构造方法的方法名要求与 类名 相同,而且无返回值。构造方法只能通过 new 运算符调用,用户不能直接调用。
16、 方法重载 是指多个方法享有相同的名字,但这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。
17、一个对象的生命周期包括3个阶段:创建、使用和 释放(消亡) 。 18、对象通过使用运算符 “.” 实现对自己的变量访问。
19、面向对象的3个特性是:封装性、继承性和 多态性 。在Java中,通过对象的 封装 ,实现了模块化和信息隐藏。
20、两个方法具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同,则称为重写。
21、Java中成员方法可分成两种:类方法和实例方法。用关键字static修饰的方法就称为类方法。实例方法可对当前对象的实例变量进行操作,也可对类变量进行操作。 实例方法不但可以访问实例变量,也可以访问类变量。 类 方法不能访问实例变量,只能访问类变量。
22、在Java中,用关键字abstract来修饰一个类,则该类为抽象类。若某个类包含了抽象方法,则该类必须被定义为 抽象 类。
23、接口的定义,需使用关键字interface来声明。接口中没有什么实例方法,所有的成员方法都是 public abstract 方法。
24、声明父类时,需使用关键字 extends 来实现。由于Java的继承性,所以子类的成员数目比父类的成员数目 多 。
三、简答题(每题5分,共60分)
第一步:理解考核知识点和考核的目的。 第二步:背下来,记忆清晰准确。
第三步:能把知识点用自己的话准确的描述出来。
您的未来就是我们的未来
技术改变世界 创新驱动发展
1、super()与this()的区别?
解答:this为当前类的对象的引用,所有资源都可以访问。super为父类对象的引用,在子类访问父类的成员和行为时使用,必须受类继承规则的约束。
在构造函数中,如果第一行没有写super(),编译器会自动插入。但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰)。此时你必须加入对父类的实例化构造。而this就没有这个要求,因为它本身就进行实例化的构造。
而在方法中super和this使用的方法就差不多了。只不过super 要考虑是否能访问其父类的资源。
2、请列举Java语言中的权限访问修饰符,并说明每种权限的含义。
解答:正确使用权限访问修饰符,能够有效控制类以及类成员的安全性,Java语言中
有四种访问修饰符,包括public、同包、protected以及private,一般情况下,应用中的类多是public权限,属性多是private权限,方法多是public权限。
参考答案:Java语言中有四种权限访问修饰符,即public、protected、同包以及private。
public表示公共权限,即任何包中都可以访问;
protected表示受保护权限,即同包中可以访问,同包中的子类可以访问:
同包权限是默认权限,即不显示指明权限修饰符的时候就是同包权限,表示只有同包中可以访问;
private是私有权限,表示只能在本类中访问。 3、java中实现多态的机制是什么?
解答:静态的多态:方法名相同,参数个数或类型不相同。(overloading)
动态的多态:子类覆盖父类的方法,将子类的实例传与父类的引用,调用的是子类的方
法;实现接口的实例传与接口的引用,调用的实现类的方法。 4、abstract class 和interface的区别。
解答:(1)抽象类通过extends继承,只能继承一个抽象类;接口通过implements使用,可以实现多个接口。
(2)抽象类可以有部分实现,抽象类和接口都不能创建实例。
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子
您的未来就是我们的未来
技术改变世界 创新驱动发展
类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instance of 运算符可以用来决定某对象的类是否实现了接口。
5、静态变量和实例变量的区别?是否可以从一个static方法内部发出对非static方法的调用并说明理由?
解答:(1)声明时静态变量用static修饰,静态变量属于整个类,被该类的所用实例对象所共有。实例变量属于该类的某个对象,拥有自己的特征。
(2)静态变量在类加载初始化的时候分配内存并初始化,实例变量在由该类实例化对象时进行分配内存并初始化。
(3)调用方法不同。静态方法可以调用静态变量,不可调用实例变量。实例方法可以调用静态变量、实例变量
不可以从一个static方法内部发出对非static方法的调用,因为static方法属于整
个类,实例方法得由该类的某个对象来调用。当调用包含非static方法的static方法时,该类不确定是否存在实例化对象,所以在static方法内调用非static方法时将出现错误。鉴于此道理不可以,编译阶段就会提示该调用的错误。
不可以,如果其中包含对象的method(),不能保证该对象初始化. 6、说说你说知道的设计模式。
解答:单例模式、工厂模式和命令模式。
7、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?、
解答:匿名内部类可以继承其他类或完成其他接口。
8、Static Nested Class 和 Inner Class的不同,说得越多越好。
您的未来就是我们的未来
技术改变世界 创新驱动发展
解答:(1)Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
Static内部类可以包含static成员;普通内部类不可以。
9、什么是方法重载(overload)?什么是方法的重写(Override)?Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
解答: 方法重载:如果在一个类中定义了多个同名的、相同返回值类型的方法,它们或有不同的参数个数或有不同的参数类型(不同的形参列表),则称为方法的重载(Overloading)。
方法重写:如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被\屏蔽\了。
区别:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
Overloaded的方法是可以改变返回值的类型和权限修饰符。如果父类定义方法A,子类要重写方法A,则子类不能使用其它返回类型,必须使用父类一致的返回类型或比父类返回类型小。
另外解析重载:如果一个类的某个行为,会有不同的算法和逻辑,例如,Math类的计算绝对值的方法,既可以计算int类型数值的绝对值,也可以计算double类型数值的绝对值。这种情况下,每种类型都定义一个不同的方法名,如abInt、absDouble,那么类的可读性就较差,使用时,必须熟悉处理每种类型参数所对应的方法名。然而,如果使用同一个方法名,而使用不同的形式参数来区别这些方法,那么就具有很好的可读性,如abs(int i)、abs(double d)等。可读性强的代码是企业对开发人员的基本要求,方法重载能够使得代码有很好的可读性。
方法重载指的是在一个类中可以声明多个相同名字的方法,而方法的形式参数有区别。调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法。 10、构造器Constructor是否可被override?
解答:构造器Constructor不能被继承,因此不能重写Override,但可以被重载
您的未来就是我们的未来