这里写目录标题
- 题目
- 1.局部变量能否和成员变量重名?
- 2.下面哪个不属于HttpServletResponse接口完成的功能?
- 3.以下代码结果是什么?
- 4.实现或继承了Collection接口的是()
- 知识点
- 局部变量与成员变量重名
- equals与==
- HttpServletResponse 接口
题目
选自牛客网
1.局部变量能否和成员变量重名?
A.可以,局部变量可以与成员变量重名,这时可用“this”来指向成员变量
B.可以,这时可用“local”关键字来指向局部变量
C.不能,局部变量不能与成员变量重名
D.不能,在一个类中不能有重名变量,不管是成员变量还是函数中的局部变量
正确答案:A局部变量可以和成员变量重名。在 Java
中,当局部变量与成员变量重名时,局部变量会屏蔽成员变量,即局部变量在该作用域内优先级更高。如果不加“this”修饰,那么默认使用的是局部变量。如果要引用成员变量,需要明确使用“this”关键字来指明。
2.下面哪个不属于HttpServletResponse接口完成的功能?
A.设置HTTP头标
B.设置cookie
C.读取路径信息
D.输出返回数据
正确答案:C HttpServletResponse 接口用于处理 HTTP 响应,它提供了许多方法来设置 HTTP 头标、添加
cookie、设置响应状态码、写入响应正文等。但是,读取路径信息并不属于 HttpServletResponse
接口的功能。相反,读取路径信息通常是由 HttpServletRequest 接口提供的功能。因此,C 选项不属于
HttpServletResponse 接口完成的功能。
3.以下代码结果是什么?
public class foo {
public static void main(String sgf[]) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+"."+b);
}
static void operate(StringBuffer x,StringBuffer y) {
x.append(y);
y=x;
}
}
A.代码可以编译运行,输出“AB.AB”。
B.代码可以编译运行,输出“A.A”。
C.代码可以编译运行,输出“AB.B”。
D.代码可以编译运行,输出“A.B”。
正确答案:C
代码可以编译运行,输出“AB.B”。 在 foo 类的 main 方法中,声明了两个 StringBuffer 对象 a 和 b,并分别初始化为 “A” 和 “B”。然后,调用 operate 方法,将 a 和 b 作为参数传递。在 operate 方法中,x.append(y) 将 y 的值追加到 x 的末尾,因此 x 的值变为 “AB”。接着,y=x 将 x 的引用赋值给 y,即 y 也指向了 “AB”。但是,需要注意的是,y 的原始值 “B” 并没有改变,只是 y 的引用指向了 x 对象。因此,在 main 方法中输出 a+b 的结果为“AB.B”。 在 operate 方法中,x 和 y 的值都被改变了,但 y 的原始值并没有改变。因此,当返回到 main 方法时,a 的值为 “AB”,而 b 的值仍为 “B”。所以,最终输出的结果为“AB.B”。
4.实现或继承了Collection接口的是()
A.Map
B.List
C.Vector
D.Iterator
E.Set
正确答案:BCE
Collection
接口是集合层次结构的根,所有的集合类都是直接或间接地实现或继承了Collection
接口。下面是对选项的分析:A.
Map
:不是Collection
的实现或继承者。Map
接口与Collection
接口并列,用于处理键值对的集合。Map
不继承Collection
接口,因为它存储的是键值对,而Collection
只存储元素。B.
List
:是Collection
的子接口。List
接口继承自Collection
接口,提供了一个有序的元素集合,可以包含重复元素。C.
Vector
:是List
接口的实现类之一。Vector
是一个线程安全的List
实现,它继承自AbstractList
,实现了List
接口,因此间接实现了Collection
接口。D.
Iterator
:不是Collection
的实现或继承者。Iterator
是一个用于遍历集合的接口,它与Collection
接口没有继承关系。E.
Set
:是Collection
的子接口。Set
接口继承自Collection
接口,提供了一个不包含重复元素的集合。因此,正确答案是BCE,即
List
、Vector
和Set
,它们都实现了或继承了Collection
接口。
正确答案:BCE
知识点
局部变量与成员变量重名
例如,以下代码展示了局部变量与成员变量重名,并且没有使用“this”关键字的情况:
public class MyClass {
int x = 10; // 成员变量
public void myMethod() {
int x = 20; // 局部变量与成员变量重名
System.out.println(x); // 默认使用局部变量 x
}
}
在这个例子中,方法 myMethod 中的 x 局部变量屏蔽了成员变量 x。如果没有特别指明,那么输出的将是局部变量 x 的值,即 20。如果要输出成员变量 x 的值,需要使用“this.x”来明确指明:
public class MyClass {
int x = 10; // 成员变量
public void myMethod() {
int x = 20; // 局部变量与成员变量重名
System.out.println(this.x); // 使用 this 关键字引用成员变量 x
}
}
现在,输出的将是成员变量 x 的值,即 10。因此,在使用局部变量和成员变量重名时,一定要注意变量的作用域和优先级。
equals与==
需要注意的是,equals方法用于比较两个对象是否相等,而==运算符用于比较两个对象的引用是否指向同一个对象。在比较浮点数时,使用equals方法更为合适,因为它可以处理NaN和负零等特殊情况。
HttpServletResponse 接口
以下是 HttpServletResponse 接口的一些常用方法:
addCookie:用于添加 cookie 到响应中。
setHeader:用于设置 HTTP 响应头。
setStatus:用于设置 HTTP 响应状态码。
getOutputStream:用于获取输出流,以便将数据写入响应正文。
getWriter:用于获取 PrintWriter 对象,以便将文本写入响应正文。
可以看到,这些方法都与设置 HTTP 响应有关,而没有涉及到读取路径信息。如果需要读取路径信息,应该使用 HttpServletRequest 接口的相关方法,如 getServletPath、getContextPath 等。