题目一:下列程序执行后结果为( )
class A {
public int func1(int a, int b) {
return a - b;
}
}
class B extends A {
public int func1(int a, int b) {
return a + b;
}
}
public class ChildClass {
public static void main(String[] args) {
A a = new B();
B b = new B();
System.out.println("Result=" + a.func1(100, 50));
System.out.println("Result=" + b.func1(100, 50));
}
}
A:Result=150Result=150
B:Result=100Result=100
C:Result=100Result=150
D:Result=150Result=100
题目二:方法通常存储在进程中的哪一区()
A:堆区
B:栈区
C:全局区
D:方法区
题目三: 关于以下程序代码的说明正确的
|
A:5行不能通过编译,因为引用了私有静态变量
B:10行不能通过编译,因为x是私有静态变量
C:程序通过编译,输出结果为:x=103
D:程序通过编译,输出结果为:x=103
题目四:如下代码,执行test()函数后,屏幕打印结果为()
public class Test2
{
public void add(Byte b)
{
b = b++;
}
public void test()
{
Byte a = 127;
Byte b = 127;
add(++a);
System.out.print(a + " ");
add(b);
System.out.print(b + "");
}
}
A:127 127
B:128 127
C:129 128
D: 以上都不对
—答案区—
题目一:正确答案 A
解析:
此题考查的是多态。
对于多态,可以总结它为:
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
多态的3个必要条件:
1.继承 2.重写 3.父类引用指向子类对象。
向上转型:Person p = new Man() ; //向上转型不需要强制类型转化
向下转型:Man man = (Man)new Person() ; //必须强制类型转化
题目二:正确答案 D
解析:
注意,题目中是问“进程”的哪个区,而不是JVM的哪个区。
“进程的区”属于操作系统里面的
【下面来自博客http://www.cnblogs.com/liulipeng/archive/2013/09/13/3319675.html】
一条进程的栈区、堆区、数据区和代码区在内存中的映射
1>栈区:主要用来存放局部变量, 传递参数, 存放函数的返回地址。.esp 始终指向栈顶, 栈中的数据越多, esp的值越小。
2>堆区:用于存放动态分配的对象, 当你使用 malloc和new 等进行分配时,所得到的空间就在堆中。动态分配得到的内存区域附带有分配信息, 所以你 能够 free和delete它们。
3>数据区:全局,静态和常量是分配在数据区中的,数据区包括bss(未初始化数据区)和初始化数据区。
注意:
1)堆向高内存地址生长;
2)栈向低内存地址生长;
3)堆和栈相向而生,堆和栈之间有个临界点,称为stkbrk。
1、一条进程在内存中的映射
假设现在有一个程序,它的函数调用顺序如下:
main(...) ->; func_1(...) ->; func_2(...) ->; func_3(...),即:主函数main调用函数func_1; 函数func_1调用函数func_2; 函数func_2调用函数func_3。
当一个程序***作系统调入内存运行
题目三:正确答案 D
解析:
因为x的 修饰符为 static 所以x为类变量,即对于所有的实例来说,他们访问的x为同一个x,类变量存储在方法区,不属于每个实例的私有,
刚开始x=100
调用hs1.x++ x为101;
调用hs2.x++ x为102;
调用hs1.x++ x为103 (此时hs1指向了一个新的HasStatic实例,但是依然访问的是同一个X)
调用HasStatic.x-- x为102
所以结果为D
题目四:正确答案 D
解析:
public void add(Byte b){ b=b++; } 这里涉及java的自动装包/自动拆包(AutoBoxing/UnBoxing) Byte的首字母为大写,是类,
看似是引用传递,但是在add函数内实现++操作,会自动拆包成byte值传递类型,所以add函数还是不能实现自增功能。
也就是说add函数只是个摆设,没有任何作用。Byte类型值大小为-128~127之间。add(++a);这里++a会越界,a的值变为-128 add(b);
前面说了,add不起任何作用,b还是127
转载请注明:XAMPP中文组官网 » java每日练习题目_6