NowCoder-Java-Note(一)
一、 关于抽象类叙述正确的是? (B)
A.抽象类不能实现接口
B.抽象类必须有“abstract class”修饰
C.抽象类必须包含抽象方法
D.抽象类也有类的特性,可以被实例化
答案:B
解析:
- A.抽象类是可以实现接口的,而且抽象类也可以继承自抽象类
- B.对
- C.抽象类指有abstract修饰的class,其可以包含抽象方法,也可以不包含
- D.抽象类和接口都是不能被实例化的,只有具体的类才可以被实例化
interface A{
public void oneFun();
}
//抽象类可以实现接口
abstract class B implements A{
public void twoFun(){}
}
//抽象类可以继承抽象类
abstract class C extends B{
}
public class Test01 {
public static void main(String[] args) {
//尝试实例化抽象类,报错
B b = new B();
}
}
二、 下列说法正确的有(A)
A.数组是一种对象
B.数组属于一种原生类
C.int number=[]={31,23,33,43,35,63}
D.数组的大小可以任意改变
解析:
- java眼中,万物皆为对象,数组自然是对象。
- 原生类是指Java中,数据类型分为基本数据类型(或叫做原生类、内置类型)和引用数据类型。
- java中的数组的定义就是相同类型,固定长度的一组数据,一旦被初始化,长度不可更改。
三、 在java中,已定义两个接口B和C,要定义一个实现这两个接口的类,语句为:
class A implements B,C
四、 指出下来程序运行的结果是:
public class Example {
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str + " and ");
System.out.println(ex.ch);
}
private void change(String str, char[] ch) {
str = "test ok";
ch[0] = 'g';
}
}
结果:good and gbc
- 因为String是被final修饰的类,所以本身的内容是不会改变的,相当于基本数据类型的值传递,在changge方法中给str赋值了“test”,相当于重新创建了一个string类型的变量.
五、 Java 语言用以下哪个类来把基本类型数据封装为对象()
A.包装类
B.Class
C.int number=[]={31,23,33,43,35,63}
D.数组的大小可以任意改变
答案:A
解析:
-
java的数据类型分为两大类:基本类型和引用类型;
-
基本类型只能保存一些常量数据,引用类型除了可以保存数据,还能提供操作这些数据的功能;
-
为了操作基本类型的数据,java也对它们进行了封装, 得到八个类,就是java中的基本类型的封装类;
-
八种基本类型: byte short int long float double char boolean
对应的包装类 : Byte Short Integer Long Float Double Character Boolean
六、 使用mvc模式设计的web应用程序具有以下优点,除了?
A.可维护行强
B.可扩展性强
C.代码重复少
D.大大减少代码量
答案:D
解析:
-
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
-
MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
-
MVC只是将分管不同功能的逻辑代码进行了隔离,增强了可维护和可扩展性,增强代码复用性,因此可以减少代码重复。但是不保证减少代码量,多层次的调用模式还有可能增加代码量。
MVC.png
七、 假设如下代码中,若t1线程在t2线程启动之前已经完成启动。代码的输出是()
public static void main(String[]args)throws Exception {
final Object obj = new Object();
Thread t1 = new Thread() {
public void run() {
synchronized (obj) {
try {
obj.wait();
System.out.println("Thread 1 wake up.");
} catch (InterruptedException e) {
}
}
}
};
t1.start();
Thread.sleep(1000);
Thread t2 = new Thread() {
public void run() {
synchronized (obj) {
obj.notifyAll();
System.out.println("Thread 2 sent notify.");
}
}
};
t2.start();
}
A.Thread 1 wake up.Thread 2 sent notify.
B.Thread 2 sent notify.Thread 1 wake up.
C.A、B皆有可能
D.程序无输出卡死
答案:B
解析:
执行obj.wait();时已释放了锁,所以t2可以再次获得锁,然后发消息通知t1执行,但这时t2还没有释放锁,所以肯定是执行t2,然后释放锁,之后t1才有机会执行。
八、下列 java 程序输出结果为______。
int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
System.out.println(j.equals(i));
A.true,false
B.true,true
C.false,true
D.false,false
E.对于不同的环境结果不同
F.程序无法执行
答案:B
解析:
本题是一个自动拆装箱的考题(自动拆装箱JDK需在1.5上):
-
基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
-
两个Integer类型进行“==”比较,如果其值在-128至127,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
-
两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true。
- 基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。 上述结果为:true、false、false、true。
九、有关线程的叙述正确的是()
A.可以获得对任何对象的互斥锁定
B.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
C.线程通过调用对象的synchronized方法可获得对象的互斥锁定
D.线程调度算法是平台独立的
答案:C D
解析:
- 1.“任何对象”锁定,太绝对了,你能锁住你没有权限访问的对象吗?
- 2.前半句话讲的是创建线程的方式,后半句讲的是锁定,驴头不对马嘴。
- 3.正确
- 4.线程调度分为协同式调度和抢占式调度,Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。这就是平台独立的原因。
十、Java程序的种类有( )
A.类(Class)
B.Applet
C.Application
D.Servlet
答案:B C D
解析:
Java程序的种类有:
(a)内嵌于Web文件中,由浏览器来观看的_Applet
(b)可独立运行的 Application
(c)服务器端的 Serverlets