最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

java每日练习题目_6

XAMPP相关 admin 47浏览 0评论

java

题目一:下列程序执行后结果为( )

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:方法区

 

题目三:  关于以下程序代码的说明正确的

class HasStatic{
    private static int x = 100;
    public static void main(String args[ ]){
        HasStatic hs1 = new HasStatic();
        hs1.x++;
        HasStatic hs2 = new HasStatic();
        hs2.x++;
        hs1=new HasStatic();
        hs1.x++;
        HasStatic.x--;
        System.out.println( "x=" +x);
    }
}
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