OOP

解析:本题考查成员变量和局部变量的区别。这个用法是一个反面案例。
本题中, step方法中的代码行 “ y += y;”其中的两个y都是局部变量,即step方法的形式参数y。如果要引用成员变量y那么应该是this.y。
当实参10传递给step方法的形参y时,根据之前的解释,“ y += y;”中的两个y表示的是局部变量y,计算后,y的值为20。
---------------------------------------------------------------------------
解析:本题考查的是Java的方法参数传递。在Java中方法参数传递只有值传递,其特点如下:
1)基本数据类型传递的是值本身。
2)引用数据类型传递也是引用的值,是对象的地址,而不是对象本身。
本题运行过程如下:
1.执行Question q = new Question();这句代码,在堆内存中为Question类的对象,分配内存空间并初始化成员变量num;在栈内存中分配变量q的值是堆中Question类型对象的首地址。
2.执行q.num=13;将q引用的堆内存中的对象的成员变量num的值改为13。
3.调用update方法,将main方法中q的值(对象首地址)赋值给方法形式参数q,此时,方法形式参数q和main方法中q指向了同一对象。
4.在update方法找中,改变形式参数q引用的对象的属性num的值为9。
5.由于main方法中的引用q和update方法形参q指向了相同对象,所以在main方法中输出q.num的值和方法形式参数q引用的对象的属性num值应该是一样的,都是9。
----------------------------------------------------------------------------
解析:本题考查的是Java的方法参数传递。在Java中方法参数传递只有值传递,其特点如下:
1)基本数据类型传递的是值本身。
2)引用数据类型传递也是引用的值,是对象的地址,而不是对象本身。
本题中,首先要明白main方法中的局部变量score,和add方法的形参score在栈内存中是两个变量,当调用add方法时,是把main方法中局部变量score的值20赋值给add方法的形式参数score,所以当形参score在add方法中发生变化时不会影响到main方法中局部变量score的值。
本题运行过程如下:
1.从main方法的第一行开始,定义并初始化局部变量score。
2.实例化Answer类的对象ans,调用add方法,将main方法中的score的值赋值给形参score,此时,形参score的值为20。
3.计算表达式score++的值。计算后,score++表达式的值为20,score的值变为21。此处输出的是score++表达式的值,该值为20。
4.由于形式参数score的改变不会影响main方法中score的值,故main方法中输出score仍然为20。
---------------------------------------------------------------------------------
解析:本题考查方法重载。
在Java语言中,允许多个方法的名称相同,但参数列表不同,称之为方法的重载(overload)。编译器在编译时会根据其参数的不同,绑定到不同的方法。
本题中,jump(int x,int y)和 jump(int[] vals)这两个方法属于方法的重载。在main方法调用jump方法时,传递的参数是(4,5),
与方法jump(int x,int y)参数情况相符合,故调用该方法,程序输出:jump one。
------------------------------------------------------------------------------------
解析:本题考查方法重载。
在Java语言中,允许多个方法的名称相同,但参数列表不同,称之为方法的重载(overload)。编译器在编译时会根据其参数的不同,绑定到不同的方法。
在这里需要强调的是和返回值无关。
本题中,方法 public void find() {}和 方法public String find() {}参数列表相同,不符合方法重载的定义,会在两个方法声明处出现编译错误。
------------------------------------------------------------------------------------------------
解析:本题考查向上造型。一个类的对象可以向上造型的类型有:
a.父类的类型
b.其实现的接口类型
Java编译器根据类型检查调用方法是否匹配。
本题中, A选项,ClassB是ClassA的子类,p0是ClassA的对象,p1是ClassB的对象,p0=p1,符合一个子类的对象可以向上造型为父类的类型,故A选项正确。
B选项,p1是ClassB的对象,p2是ClassC的对象,ClassB和ClassC不存在继承关系,p1=p2;不成立,故选项B不正确。
C选项,p2是ClassC的对象,p4的类型是ClassA,p4指向的实例是ClassC的对象,ClassC继承自ClassA,故p4=p2成立,符合一个子类的对象可以向上造型为父类的类型,但是返回来p2=p4;则不成立。
D选项,p1是ClassB的对象,p2是ClassC的对象,ClassB和ClassC不存在继承关系,故p2 = (ClassC)p1;不成立,D选项不正确。
----------------------------------------------------------------------------------------------------
解析:本题考查引用类型的强制转换。
对于一个父类的引用类型,可以指向该类的对象也可以指向其任意一个子类的对象。如果需要把父类类型,转换成子类类型,那么需要强制类型转换,如果父类类型不是指向需要强制类型转换的子类的对象,那么强制转换会产生造型异常(ClassCastException),可以通过 instanceof 关键字判断其指向对象的实际类型。
本题中,如下代码:
Cat cat =null;
Animal animal = new Dog();
if (animal instanceof Cat) {
cat = (Cat) animal;
System.out.println(cat.noise());
}else{
System.out.println("animal is not Cat's instance");
}
其中,animal指向Dog的实例,而不是Cat的实例,故代码“ animal instanceof Cat” 返回false,程序执行else分支,输出:“animal is not Cat's instance”。


----------------------------------------------------------------------------------------------------------
解析:本题考查引用类型数组。
所谓引用类型数组,是数组的元素不是基本类型,而是引用类型。引用类型数组的初始化和基本类型数组的初始化方式一样,只不过元素是引用而已。但需要注意: 基本类型数组元素的默认初始值为具体值(例如,int类型数组的元素默认初始值为0);而引用数组创建后,其元素的默认值为null, 不创建元素对象。
本题中,Teacher类型作为数组的元素的类型,数组teachers创建后,数组teachers中的每一个元素的值为null,即数组元素为{null,null},
例如题目中的teachers[0]这个数组元素的默认值为null,通过它去访问属性或方法会抛出NullPointerException异常。
-------------------------------------------------------------------------------------------------
解析:本题考查继承中的构造方法。
子类的构造方法中必须通过super关键字调用父类的构造方法,这样可以妥善的初始化继承自父类的成员变量。如果子类的构造方法中没有调用父类的构造方法,Java编译器会自动的加入对父类无参构造方法的调用(如果该父类没有无参的构造方法,会有编译错误)。
本题中,父类Person没有提供无参数的构造方法,因此在代码public Employee(String empNO) {行,出现编译错误。
--------------------------------------------------------------------------------------------------
解析:本题考查方法的重写。
子类可以重写(覆盖)继承自父类的方法,即方法名和参数列表与父类的方法相同;子类利用重写修改父类的方法。
当子类对象的重写方法被调用时(无论是通过子类的引用调用还是通过父类的引用调用),运行的是子类的重写修改后的版本。
------------------------------------------------------------------------------------------------------------------
解析:本题考查接口的使用。
“实现接口”与“继承父类”不同,一个类可以实现多个接口,实现的接口直接用逗号分隔。并且,具体类需要实现这些接口中定义的所有抽象方法;
接口间可以存在继承关系,一个接口可以通过extends关键字继承另外多个接口。子接口继承了父接口中定义的所有方法。
---------------------------------------------------------------------------------------------------------------
解析:本题考查final关键字的用法。final关键字的用法如下:
1.final关键字修饰的类不可以被继承。
2.final关键字修饰的方法不可以在子类中被重写。
3.final关键字修饰成员变量,意为初始化后不可改变。该成员变量必需在初始化时赋值,对象一旦创建即不可改变。可以在声明时初始化或在构造方法中进行初始化。
--------------------------------------------------------------------------------------------------------------
解析:本题考查final关键字修饰成员变量。
final关键字修饰成员变量,意为初始化后不可改变。该成员变量必需在初始化。可以在声明时初始化或在构造方法中进行初始化。
本题中,首先,在构造方法中给final修饰的成员变量id初始化;然后又在updateId方法中改变id的值,
这就违反了final修饰成员变量的语法,因此会在重新为id赋值处出现编译错误。
-----------------------------------------------------------------------------------------------------
解析:本题考查访问控制。
Java的访问控制修饰符有public,protected,默认,private。friendly不属于Java访问修饰符。
-------------------------------------------------------------------------------------------
解析:本题考查import, class和package的使用顺序。
import, class和package的顺序为:package->import,->class。
----------------------------------------------------------------
解析:本题考查构造方法。
在Java语言中,可以通过构造方法实现对对象成员变量的初始化。构造方法是在类中定义的方法,但不同于其他的方法,构造方法的定义有如下两点规则:
1) 构造方法的名称必须与类名同名。
2) 构造方法没有返回值,但也不能写void。
本题的正确答案为AB。AB两个选项都符合构造方法定义的规则,在此,这两个构造方法是以重载的形式出现的。
----------------------------------------------------------------------------------------------------
解析:本题考查方法的重写和重载语法。
子类可以重写(覆盖)父类的方法。方法的重写要遵循“两同两小一大”规则,“两同”即方法名相同,形参列表相同;“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;“一大”指的是子类方法的访问权限应比父类方法的访问范围更大或相等。
在Java语言中,允许多个方法的名称相同,但参数列表不同,称之为方法的重载。
选项A,符合重写的定义,A选项正确。
选项B,不符合重写也不符合重载的语法,B选项错误。
选项C,符合重载的语法,子类T继承父类Tetromino的 protected int move(int x) 方法,与C选择属于重载,C选择正确。
选项D,不符合重写也不符合重载的语法,D选项错误。
--------------------------------------------------------------------------------------------------------
解析:本题考查JVM的内存结构。
JVM的内存结构有方法区,堆,栈等。其中方法区用于保存类的各种信息;栈用于存放程序运行过程当中所有的局部变量;堆一般用于存储使用new关键字创建的对象。
类属于Java语言中引用类型的一种,不属于JVM的内存结构。
-----------------------------------------------------------------------------------------------------------
解析:本题考查static修饰方法的用法。
static修饰的方法不需要针对某些对象进行操作,其运行结果仅仅与输入的参数有关。调用时直接用类名引用。由于static在调用时没有当前的对象this,
因此在static方法中不能对非static成员(当前对象的属性和方法)进行访问,但是非static方法可以访问static成员。
-----------------------------------------------------------------------------------------------------------------
解析:考查如何创建成员内部类的对象。
一般情况下,内部类对象会在其所在的外部类对象中创建(构造方法或其他方法);内部类对象中会有一个隐式的引用指向创建它的外部类对象。
成员内部类, 必须使用“外部类的实例.new” 来创建对象。
本题中,在外部类的内部来创建成员内部类的对象可以省略this,即将 “this.new Point()” 省略为 “new Point()”,因此CD选项都正确。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值