阅读指南:[题目] - 精选摘要
- 题目
- 1.面向对象编程意味着
- 2.以下哪项不是 Java 关键字?
- 3.基础数据类型在堆栈上分配?
- 4.以下代码将导致:
- 5.以下输出是什么 ?
- 6.如果我们声明:
- 7.Java 使用按值调用。 以下方法调用传递给程序的值是多少 ?
- 8.以下代码的输出是什么 ?
- 9.以下代码输出结果为:
- 10.以下代码输出结果为:
- 总结
题目
选自菜鸟教程
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基础概念。选择题是检验学习成果的好方法,它们能帮助我识别并加强理解中的薄弱环节。明天见,期待带着新的问题和挑战回来。