牛客上Java基础题目

1.下面有关java实例变量,局部变量,类变量和final变量的说法,错误的是?
A实例变量指的是类中定义的变量,即成员变量,如果没有初始化,会有默认值。
B局部变量指的是在方法中定义的变量,如果没有初始化,会有默认值
C类变量指的是用static修饰的属性
Dfinal变量指的是用final 修饰的变量
选B
解析:Java中局部变量必须有初始值
2.要导入java/awt/event下面的所有类,叙述正确的是?()
Aimport java.awt.和import java.awt.event.都可以
B只能是import java.awt.

C只能是import java.awt.event.

Dimport java.awt.*和import java.awt.event.*都不可以
选C
解析:导包只可以导到当前层,不可以再导入包里面的包中的类

线程安全的集合有Vector、Stack、Hashtable。Vector与ArrayList相比多了同步机制,
虽然保证了线程安全,
但降低了效率。Stack继承了Vector,也保证了线程安全。HashTable是线程安全的类,它很多方法都使用synchronized修饰,但同时也因为加锁导致效率低下。
Java的跨平台特性是因为JVM的存在, 它可以执行.class字节码文件,而不是.java源代码

3.建立Statement对象的作用是?
A连接数据库
B声明数据库
C执行SQL语句
D保存查询结果
选:C
解析:
1、Statement对象用于执行不带参数的简单SQL语句。
2、Prepared Statement 对象用于执行预编译SQL语句。
3、Callable Statement对象用于执行对存储过程的调用。
4.列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试。
Ajava
Bjavadoc
Cjdb
Djavaprof
选C
解析:java调试器jdb.exe
5.关于HashMap和Hashtable正确的说法有()
A都实现了Map接口
BHashtable类不是同步的,而HashMap类是同步的
CHashtable不允许null键或值
DHashMap不允许null键或值
选AC
解析:HashMap和Hashtable都是典型的Map实现,选项A正确。
Hashtable在实现Map接口时保证了线程安全性,而HashMap则是非线程安全的。所以,Hashtable的性能不如HashMap,因为为了保证线程安全它牺牲了一些性能。因此选项B错误
Hashtable不允许存入null,无论是以null作为key或value,都会引发异常。而HashMap是允许存入null的,无论是以null作为key或value,都是可以的。选项C正确,D错误。
6.
下面有关 Java ThreadLocal 说法正确的有?
AThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递
B线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
C在Thread类中有一个Map,用于存储每一个线程的变量的副本。
D对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式
选:ABCD
解析:
ThreadLocal类用于创建一个线程本地变量在Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是threadLocal,值就是变量的副本,ThreadLocal为每一个使用该变量的线程都提供了一个变量值的副本,每一个线程都可以独立地改变自己的副本,是线程隔离的。通过ThreadLocal的get()方法可以获取该线程变量的本地副本,在get方法之前要先set,否则就要重写initialValue()方法。
ThreadLocal不是用来解决对象共享访问问题的,而主要是提供了保持对象的方法和避免参数传递的方便的对象访问方式。一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。
7.
以下JAVA程序的输出是什么()
public class HelloSogou{
public static synchronized void main(String[] a){
Thread t=new Thread(){
public void run(){Sogou();}
};
t.run();
System.out.print(“Hello”);
}
static synchronized void Sogou(){
System.out.print(“Sogou”);
}
}
SogouHello
解析:这里调用 t.run(); 并没有启动一个新的线程,启动一个新线程要用t.start(); 所以执行顺序是先执行run(),再执行 System.out.print(“HELLO”);

finally块中的语句一定会被执行。除非catch块中有System.exit(0)

8.java中下面哪些是Object类的方法()
Anotify()
BnotifyAll()
Csleep()
Dwait()
选:ABD sleep是thread类
9.下面选项中,哪些是interface中合法方法定义?()
Apublic void main(String [] args);
Bprivate int getSum();
Cboolean setFlag(Boolean [] test);
Dpublic float get(int x);
选:ACD 解析:java程序的入口必须是static类型的,接口中不允许有static类型的方法。A项没有static修饰符,可以作为普通的方法。而且接口中的方法必须是public的。想想借口就是为了让别人实现的,相当于标准,标准不允许别人使用是不合理的,所以接口中的方法必须是public。C项中,接口中的方法默认是public的。D项属于正常的方法。接口中不能定义私有方法
10.在运行时,由java解释器自动引入,而不用import语句引入的包是()。
Ajava.lang
Bjava.system
Cjava.io
Djava.util
选:A 解析: java.lang包是java语言的核心包,lang是language的缩写 java.lang包定义了一些基本的类型,包括Integer,String之类的,是java程序必备的包,有解释器自动引入,无需手动导入
11.关于异常的编程,以下描述错误的是:( )
A在有除法存在的代码处,为了防止分母为零,必须抛出并捕获异常
Bint i=Integer.parseInt(”123a”);将产生NumberFormatException
Cint a[]=null; a[0]=1; 将产生NullPointerException
D输入输出流编程中,读和写时都要抛出IOException
选A 解析:分母为0 为运行时异常,jvm帮我们补货,无需代码里面显式捕获
12.下面有关SPRING的事务传播特性,说法错误的是?
APROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
BPROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就抛出异常
CPROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
DPROPAGATION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚
选:B 解析:基本上根据英文翻译就能知道作用:Required:必须的。说明必须要有事物,没有就新建事物。supports:支持。说明仅仅是支持事务,没有事务就非事务方式执行。mandatory:强制的。说明一定要有事务,没有事务就抛出异常。required_new:必须新建事物。如果当前存在事物就挂起。not_supported:不支持事物,如果存在事物就挂起。never:绝不有事务。如果存在事物就抛出异常
13.关于 java 的异常处理机制的叙述哪些正确?
A通常情况下,不论程序是否发生错误及捕捉到异常情况,都会执行finally部分
B当try区段的程序发生异常并被捕获时,才会执行catch区段的程序
Ccatch部分捕捉到异常情况时,才会执行finally部分
D其它选项都不正确
选:AB
14.常用的servlet包的名称是?
Ajava.servlet
Bjavax.servlet
Cservlet.http
Djavax.servlet.http
选:BD 解析:关于servlet中对应的设计,前面必须有javax
15.编译 Java 源程序文件产生的字节码文件的扩展名为()
Ajava
Bclass
Chtml
Dexe
选B解析:java源文件的后缀名是.java。源文件通过jvm虚拟机编译后会生成二进制字节码文件,后缀是.class
16.Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.print(a == b);
System.out.print(c == d);
上述代码返回结果为:(B)
Atrue、true
Btrue、false
Cfalse、true
Dfalse、false
解析:Integer类型在-128–>127范围之间是被缓存了的,也就是每个对象的内存地址是相同的,赋值就直接从缓存中取,不会有新的对象产生,而大于这个范围,将会重新创建一个Integer对象,也就是new一个对象出来,当然地址就不同了,也就!=;
17.下面代码运行结果是()
public class Test{
public int add(int a,int b){
try {
return a+b;
}
catch (Exception e) {
System.out.println(“catch语句块”);
}
finally{
System.out.println(“finally语句块”);
}
return 0;
}
public static void main(String argv[]){
Test test =new Test();
System.out.println(“和是:”+test.add(9, 34));
}
}
Acatch语句块 和是:43
B编译异常
Cfinally语句块 和是:43
D和是:43 finally语句块
选:C 解析:try–catch–finally块的执行顺序:先执行finally 若try中出现了异常则会调用catch中寻找异常解决方法。当程序执行到try{}语句中的return方法时,它会干这么一件事,将要返回的结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序。
18下面有关JAVA异常类的描述,说法错误的是?
A异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B非RuntimeException一般是外部错误(非Error),其一般被 try{}catch语句块所捕获
CError类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
DRuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
选:D 解析:RuntimeException并不必须被捕获。不管异常代表的是可预见的异常条件还是编程错误,如果用try{}catch语句捕获它,会让程序在已经出现错误的情况下继续执行下去,也就是说我们不会及时的察觉到程序出现的问题。如果我们不去处理RuntimeException,让程序在测试阶段把异常传播给外界,这时系统打印出来的调用堆栈路径可以帮助我们更快的找出并修改错误,避免出现更大的损失。
19.static String str0=“0123456789”;
static String str1=“0123456789”;
String str2=str1.substring(5);
String str3=new String(str2);
String str4=new String(str3.toCharArray());
str0=null;
假定str0,…,str4后序代码都是只读引用。
20.Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为()
A5
B10
C15
D20
选:C解析: substring实际是new,5字符 str3和4也都是new,每个5字符 分别都会创建新的对象 常量池是PermGen的 因此应该是一共15字符
21.关于抽象类和接口叙述正确的是? ( )
A抽象类和接口都能实例化的
B抽象类不能实现接口
C抽象类方法的访问权限默认都是public
D接口方法的访问权限默认都是public
选:D 解析:
抽象类
特点:
1.抽象类中可以构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
6,抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰
关键字使用注意:
抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。
接口
1.在接口中只有方法的声明,没有方法体。
2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上public static final
3.在接口中的方法,永远都被public来修饰。
4.接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)
5.接口可以实现多继承
6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。
7,接口可以继承接口,用extends
22.下列哪些方法是针对循环优化进行的
A强度削弱
B删除归纳变量
C删除多余运算
D代码外提
选:ABD
23.JDK提供的用于并发编程的同步器有哪些?
ASemaphore
BCyclicBarrier
CCountDownLatch
DCounter
正确答案:ABC
解析:Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。 B,CyclicBarrier 主要的方法就是一个:await()。await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此 CyclicBarrier 上面阻塞的线程开始运行。 C,直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。 D,Counter不是并发编程的同步器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值