Java学习:今日成果,明日挑战

题目

选自菜鸟教程

1.面向对象编程意味着

A. 根据分析问题时发现的对象设计应用程序
B. 在编写程序并制定测试计划之前编写算法
C. 编写由Java类组成的程序

面向对象编程(Object-Oriented Programming,简称OOP)确实意味着根据分析问题时发现的对象来设计应用程序。在面向对象的范式中,现实世界的问题和实体被抽象成“对象”,这些对象具有状态(属性)和行为(方法)。通过封装、继承和多态等特性,面向对象编程提供了一种结构化的方式来组织代码,使得软件开发更加模块化、可复用和易于维护。因此,选项A正确地描述了面向对象编程的核心理念。


2.以下哪项不是 Java 关键字?

A. static
B. try
C. Integer
D. new

选项C,“Integer”,不是Java关键字。在Java中,"Integer"是包装类的名字,它用于将基本类型int包装成对象。而static、try和new都是Java语言的关键字,分别用于声明静态成员、定义异常处理的try块和创建新对象。因此,正确答案是C。


3.基础数据类型在堆栈上分配?

A.是
B. 否

A基本类型类型以及对象的引用变量是存储在栈内存中 ;而对象本身的值或者说 new 创建的对象和数组是存储在堆内存中。


4.以下代码将导致:

int num = 6.7

A. 编译错误
B. 运行期错误
C. num 是 6.7
D. num 为 6

选项A正确。在Java中,将一个浮点数(如6.7)直接赋值给一个整数变量(如int类型)会导致编译错误。这是因为Java的类型检查系统会阻止这种可能造成数据丢失的隐式类型转换。如果想要将浮点数赋值给整数变量,需要进行显式的类型转换,代码应该写为:

double numDouble = 6.7;
 int num = (int) numDouble;

在这种情况下,6.7会被转换为整数6,小数部分会被舍弃,但这需要程序员显式地进行类型转换操作。因此,原代码int num = 6.7;会导致编译错误。


5.以下输出是什么 ?

class TestIt
{
    public static void main ( String[] args )
    {
        int[] myArray = {1, 2, 3, 4, 5};
        ChangeIt.doIt( myArray );
        for(int j=0; j<myArray.length; j++)
            System.out.print( myArray[j] + " " );
    }
}
class ChangeIt
{
    static void doIt( int[] z ) 
    {
        z = null ;
    }
}

A. 1 2 3 4 5
B. 什么都不会打印出来
C. 程序将因运行时错误而停止。
D. 0 0 0 0 0

选项A正确。在这个程序中,ChangeIt.doIt(myArray);调用不会改变myArray的内容。在doIt方法中,z= null;语句只会影响z变量本身,它不会影响到main方法中myArray的引用。这是因为参数传递在Java中是按值传递的,但对于对象引用来说,传递的是引用的值。
因此,当doIt方法内部将z设为null时,这只是改变了z的值,而myArray的引用保持不变。所以,myArray的内容在方法调用前后不会发生变化,输出仍然是1 2 3 4 5。因此,正确答案是A。

6.如果我们声明:

int [] ar = {1,2,3,4,5,6};
数组ar的大小是 :

A. 0
B. 5
C. 6
D. 7

选项C正确。在Java中,数组的大小等于数组中元素的数量。对于声明int [] ar = {1,2,3,4,5,6};,数组ar包含了6个元素。因此,数组ar的大小是6。所以,正确答案是C,6。

7.Java 使用按值调用。 以下方法调用传递给程序的值是多少 ?

double[] rats = {1.2, 3.4, 5.6};
routine( rats );

A. rats 的副本
B. rats 数组元素的值
C. rats 数组的引用
D. 1.2

C选项C正确。在Java中,当传递对象(如数组)作为方法参数时,实际上传递的是对象引用的值,而不是对象本身或其内容的副本。因此,当调用routine(rats);时,rats数组的引用被传递给routine方法。这意味着在routine方法内部可以访问和修改rats数组的内容,因为它们共享同一个数组对象。因此,正确答案是C,rats数组的引用。


8.以下代码的输出是什么 ?

int[] arr = new int[9];
System.out.println(arr[9]);

A. 0
B. 9
C. 错误,因为数组未初始化
D. 错误,因为索引超出范围

选项D正确。这段代码将导致错误,因为索引超出了数组的范围。在Java中,数组索引是从0开始的,所以对于int[9]类型的数组,有效的索引范围是0到8。尝试访问arr[9]将导致ArrayIndexOutOfBoundsException,这是一种运行时错误,表示尝试访问数组中不存在的元素。因此,正确答案是D,错误,因为索引超出范围。


9.以下代码输出结果为:

class Main {
    public static void main(String args[]) { 
        System.out.println(fun());
    } 

    int fun()
    {
        return 20;
    }
}

A. 20
B. 0
C. 编译错误

选项C正确。这段代码会导致编译错误。问题出在fun()方法的声明和定义上。在main方法中调用的fun()方法被声明为int返回类型,但是在类Main中定义的fun()方法却没有指定返回类型,这会导致编译器无法识别fun()方法的正确签名,从而引发编译错误。正确的方法定义应该也包含返回类型,例如int fun() { return 20; }。因此,正确答案是C,编译错误。然而,为了使代码能够编译并正确运行,fun()方法应该被正确声明和定义,如下所示:

class Main {
    public static void main(String args[]) { 
        System.out.println(fun());
    } 

    static int fun()
    {
        return 20;
    }
}

在这种情况下,输出结果将会是20,即选项A。但根据原始代码,由于方法定义的错误,正确答案是C,编译错误。

10.以下代码输出结果为:

public class Main { 
    public static void main(String args[]) { 
       String x = null; 
       giveMeAString(x); 
       System.out.println(x); 
    } 
    static void giveMeAString(String y) 
    { 
       y = "RUNOOB"; 
    } 
}

A. RUNOOB
B. null
C. 编程错误
D. 发生异常

选项B正确。在这个程序中,giveMeAString(x);方法调用不会改变x的值。在giveMeAString方法内部,
y = "RUNOOB";只会改变方法内部的y变量,而不会影响到main方法中x的值。这是因为Java中方法参数的传递是值传递,对于引用类型,传递的是引用的值,而不是引用的对象本身。因此,当在方法内部修改局部变量时,这种修改不会反映到调用方法的参数上。在main方法中,x的值在调用giveMeAString前后都是null
因此,当执行System.out.println(x);时,输出结果为null。所以,正确答案是B。

总结

在这里插入图片描述

巩固了Java基础概念。选择题是检验学习成果的好方法,它们能帮助我识别并加强理解中的薄弱环节。明天见,期待带着新的问题和挑战回来。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布说在见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值