牛客练习
java专项01
- 在某个类A中存在一个方法:void set(int x),以下不能作为这个方法的重载的声明的是()
正确答案: A 你的答案: A (正确)
void set(int y)
int set(int x,double y)
double set(int x,int y)
void set(int x,int y)
分析:重载是一个类中多个同名的方法,它与返回参数,参数名无关,与参数类型的排列组合有关,(参数个数,顺序);
2.要在session对象中保存属性,可以使用以下哪个语句( )
正确答案: B 你的答案: B (正确)
session.getAttribute(“key”,”value”)
session.setAttribute(“key”,”value”)
session.setAttribute(“key”)
session.getAttribute(“key”)
分析: 获取属性用getAttribute 保存属性用setAttribute
属性是一个键值对,要把键值对内容都传递进去。
3. 下面的程序 编译运行后,在屏幕上显示的结果是()
public class Test {
public static void main(String args[]) {
int x, y;
x = 5 >> 2;
y = x >>> 2;
System.out.println(y);
}
}
正确答案: A 你的答案: D (错误)
0
2
5
80
分析: >>表示右移,如果该数为正,则高位补0,若为负数,则高位补1,
“>>>表示无符号右移,也叫逻辑右移,该数不论正负,高位都补0”,即给该十进制数除以对应个数的2;
4.JSP分页代码中,哪个步骤次序是正确的?
正确答案: A 你的答案: B (错误)
先取总记录数,得到总页数,最后显示本页的数据。
先取所有的记录,得到总页数,再取总记录数,最后显示本页的数据。
先取总页数,得到总记录数,再取所有的记录,最后显示本页的数据。
先取本页的数据,得到总页数,再取总记录数,最后显示所有的记录。
分析:先拿总记录数,即count(*),再根据每页多少条记录,确定总页数,最后也就能显示本页的数据了。
5. 有以下程序段, 则下面正确的选项是()
public class MyThead extends Thread{
public static void main(String[] args) {
MyThead t=new MyThead();
MyThead s=new MyThead();
t.start();
System.out.println(“one.”);
s.start();
System.out.println(“two.”);
}
public void run() {
System.out.println(“Thread”);
}
}
正确答案: B C D 你的答案: D (错误)
编译失败
程序运行可能结果为:
one.
Thread
two.
Thread
程序运行可能结果是:
one.
two.
Thread
Thread
程序运行结果不稳定
6.下列正确的有()
正确答案: A C D 你的答案: A B (错误)
call by value不会改变实际参数的数值
call by reference能改变实际参数的参考地址
call by reference不能改变实际参数的参考地址
call by reference能改变实际参数的内容
java专项02
- 以下不属于构造方法特征的是()
正确答案: D 你的答案: D (正确)
构造方法名与类名相同
构造方法不返回任何值,也没有返回类型
构造方法在创建对象时调用,其他地方不能显式地直接调用
每一个类只能有一个构造方法
分析:一个类可以有多个构造方法,构造方法可以进行重载。
2. 以下类定义中的错误是什么?()
abstract class xy
{
abstract sum (int x, int y) { }
}
正确答案: C 你的答案: C (正确)
没有错误
类标题未正确定义
方法没有正确定义
没有定义构造函数
分析:抽象方法没有方法体,只定义功能;
3. 有如下代码:请写出程序的输出结果。
public class Test
{
public static void main(String[] args)
{
int x = 0;
int y = 0;
int k = 0;
for (int z = 0; z < 5; z++) {
if ((++x > 2) && (++y > 2) && (k++ > 2))
{
x++;
++y;
k++;
}
}
System.out.println(x + ”” +y + ”” +k);
}
}
正确答案: B 你的答案: B (正确)
432
531
421
523
分析:&& 操作符,要求所有条件都为true,结果才为true,它是短路与,当其第一个天剑为false,则不会判断后续天剑,直接返回false;
4. 设有下面两个赋值语句:
a = Integer.parseInt(“1024”);
b = Integer.valueOf(“1024”).intValue();
下述说法正确的是()
正确答案: D 你的答案: B (错误)
a是整数类型变量,b是整数类对象。
a是整数类对象,b是整数类型变量。
a和b都是整数类对象并且它们的值相等。
a和b都是整数类型变量并且它们的值相等。
分析: Integer.parseInt("");是将字符串类型转换为int的基础数据类型
Integer.valueOf("")是将字符串类型数据转换为Integer对象
Integer.intValue();是将Integer对象中的数据取出,返回一个基础数据类型int
5. 以下哪个类包含方法flush()?()
正确答案: B 你的答案: B (正确)
InputStream
OutputStream
A 和B 选项都包含
A 和B 选项都不包含
对于字符写出流,如FileWriter,必须要使用到flush将字符缓冲区的内容写到文件中。字符缓冲区的数据是按字符算的,必须集齐一个字符(汉字是2个字符或者3个字符)的数据才能将数据写入文件;
6.How should servlet developers handle the HttpServlet’s service() methond when extending HttpServlet?
正确答案: D 你的答案: D (正确)
They should override the service()method in most cases;
They should call the service()method from doGet()or doPost();
They should call the service()method from the init()method;
They should override at least one doXXX()method(such as doPost())
分析:至少重写一个doXXX方法,如doGet();重写service方法,还是会重写doXXX方法;所以直接重写doXXX()方法,减少开发工作量;
7.下列哪个是合法的 Java 标识符?( )
正确答案: B C 你的答案: B C (正确)
Tree&Glasses
FirstJavaApplet
First_Applet
273.5
分析:标识符只有英文字母,数字,下划线和$,而且数字不能做开头的。
8.关于身份证号,以下正确的正则表达式为( )
正确答案: A C 你的答案: B D (错误)
isIDCard=/ ^ [1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
isIDCard=/^ [1-9]\d{7}((9\d)|(1[0-2]))(([0|1|2]\d)|3[9-1])\d{3}$/;
isIDCard=/^ [1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
isIDCard=/^ [1-9]\d{5}[1-9]\d{3}((9\d)|(1[9-2]))(([0|1|2]\d)|3[9-1])\d{4}$/;
分析:[m-n] m - n的数字,/d是,0-9,15位身份证的构成:六位出生地区码+六位出身日期码+三位顺序码
18位身份证的构成:六位出生地区码+八位出生日期码+三位顺序码+一位校验码
java专项03
1.分析以下代码,说法正确的是()
public static void main(String[] args) {
System.out.println(val());
}
public static int val() {
int num = 5;
try {
num = num / 0;
} catch (Exception e) {
num = 10;
} finally {
num = 15;
}
return num;
}
正确答案: D 你的答案: D (正确)
运行时报错
程序正常运行,输出值为5
程序正常运行,输出值为10
程序正常运行,输出值为15
分析:num初始值为5;在try块中因为分母为0,抛出异常,执行catch块语句,num赋值为10,最有执行finally块中num赋值为15;所以最后返回15;
2.对于java类型变量char c,short s,float f,double d,表达式c*s+f+d的结果类型为()
正确答案: D 你的答案: D (正确)
float
char
short
double
分析:short,char ,byte->int->long->double;long->float;float,>double;
3.以下正确的是:
Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.print(a == b);
System.out.print(c == d);
正确答案: B 你的答案: B (正确)
true、true
true、false
false、true
false、false
分析:对于Integer类型,它底层是有缓存的,默认是-128-127,上限可更改;如果对其赋值在缓存范围内,那就不会创建新的对象,直接从缓存中拿,否则就需要创建新的对象;八大基本类型的包装类除了float,double外都有缓存;Short,long,Byte为-128-127;但是byte类型范围为-128-127,所以它一定是从缓存中拿,另外两个超出就需要创建对象了哦;Character为0-127;Boolean是true,false;
4.下面输出的结果是:
public class IfTest{
public static void main(String[]args){
int x=3;
int y=1;
if(x=y)
System.out.println("Not equal");
else
System.out.println("Equal");
}
}
正确答案: C 你的答案: C (正确)
The output is “Equal”
The output in “Not Equal”
An error at line 5 causes compilation to fall.
The program executes but does not print a message.
分析:判断语句中使用的是赋值语句,Java并不会向C会赋值后与0进行比较,所以会报错。
5. 下列关于异常处理的描述中,错误的是()。
正确答案: D 你的答案: D (正确)
程序运行时异常由Java虚拟机自动进行处理
使用try-catch-finally语句捕获异常
可使用throw语句抛出异常
捕获到的异常只能在当前方法中处理,不能在其他方法中处理
分析:我们可以将异常声明出去,交给调用方法去处理。
6.java中下面哪些是Object类的方法()
正确答案: A B D 你的答案: A B D (正确)
notify()
notifyAll()
sleep()
wait()
分析:sleep是线程的方法;
7. 下列代码片段中,存在编译错误的语句是()
正确答案: B C D 你的答案: B C D (正确)
语句2
语句1
语句3
语句4
byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1+b2); /*语句1*/
b6=b4+b5; /*语句2*/
b8=(b1+b4); /*语句3*/
b7=(b2+b5); /*语句4*/
System.out.println(b3+b6);
分析:语句一其实就是b3 = 3;int型赋值给byte型是需要强制转型的,对于final修饰的变量它的类型是不会变的,所以语句2是正确的;语句3,4除了有final修饰的变量,还有byte类型参与运算,所以效果和语句一是一样。
8.Test.main()函数执行后的输出是( )
class Test {
public static void main(String[] args) {
System.out.println(new B().getValue());
}
static class A {
protected int value;
public A (int v) {
setValue(v);
}
public void setValue(int value) {
this.value= value;
}
public int getValue() {
try {
value ++;
return value;
} finally {
this.setValue(value);
System.out.println(value);
}
}
}
static class B extends A {
public B () {
super(5);
setValue(getValue()- 3);
}
public void setValue(int value) {
super.setValue(2 * value);
}
}
}
正确答案: B 你的答案: A (错误)
6 7 7
22 34 17
22 74 74
11 17 34
分析:step1:首先new B();执行super(5),父类A构造函数调用了setValue()方法,这个方法是子类的,为什么这么说呢,因为我们创建的对象是B啊,子类重写了父类方法,自然会调用自己的;super.setValue(2 * value);B实例化将value值设置为2 x 5 = 10; 在执行getValue()方法,子类没有,所以调用父类的,value++ 变为11,catch块中有return语句,所以先将value = 11保存,执行finally块,又调用setValue()还是子类的,value变为22;打印输出22;
二:回到构造方法执行setValue(getValue()- 3);getValue返回值为11,为啥呢,还记得我们是暂时保存value值,再执行finally块,最后return语句吗?return的就是暂存的那个值;方法就变成了setValue(8);再之后和 step1是一样的。只不过getValue方法是B的实例调用的
java专项04
- 以下代码在编译和运行过程中会出现什么情况
public class TestDemo{
private int count;
public static void main(String[] args) {
TestDemo test=new TestDemo(88);
System.out.println(test.count);
}
TestDemo(int a) {
count=a;
}
}
正确答案: A 你的答案: A (正确)
编译运行通过,输出结果是88
编译时错误,count变量定义的是私有变量
编译时错误,System.out.println方法被调用时test没有被初始化
编译和执行时没有输出结果
分析:创建TestDemo()对象,并且通过有参构造函数传入值88,对count进行赋值,所以最后输出count为88;
2.下面关于垃圾收集的说法正确的是
正确答案: D 你的答案: D (正确)
一旦一个对象成为垃圾,就立刻被收集掉。
对象空间被收集掉之后,会执行该对象的finalize方法
finalize方法和C++的析构函数是完全一回事情
一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此
分析:存在本地方法时需要finalize()方法来清理本地对象,线程的释放是在run()方法结束之后,在线程开启后,可能没有引用指向它,但是run方法还在执行,线程并不会释放。
3.给出以下代码,请给出结果.
class Two{
Byte x;
}
class PassO{
public static void main(String[] args){
PassO p=new PassO();
p.start();
}
void start(){
Two t=new Two();
System.out.print(t.x+””);
Two t2=fix(t);
System.out.print(t.x+” ” +t2.x);
}
Two fix(Two tt){
tt.x=42;
return tt;
}
}
正确答案: B 你的答案: A (错误)
null null 42
null 42 42
0 0 42
0 42 42
An exception is thrown at runtime
Compilation
分析:main方法中创建对象,调用start方法,在start方法中创建Two对象,调用它的变量x,初始化为null,因为它是Byte类型,在 执行Two t2=fix(t)后,fix(t)也就是将对象t的变量进行了赋值为42,再返回该对象,所以t对象的成员变量x值为42;t2对象引用的是t对象的地址,所以它的成员变量x也是42;
4. 下面代码输出是?
enum AccountType
{
SAVING, FIXED, CURRENT;
private AccountType()
{
System.out.println("It is a account type");
}
}
class EnumOne
{
public static void main(String[]args)
{
System.out.println(AccountType.FIXED);
}
}
正确答案: C 你的答案: C (正确)
编译正确,输出”It is a account type”once followed by”FIXED”
编译正确,输出”It is a account type”twice followed by”FIXED”
编译正确,输出”It is a account type”thrice followed by”FIXED”
编译正确,输出”It is a account type”four times followed by”FIXED”
编译错误
分析:public static final AccountType SAVING;
public static final AccountType FIXED;
public static final AccountType CURRENT;
枚举类型的所有的枚举值都是类静态常量,所以在初始化时会对所有的枚举值对象进行第一次初始化,有几个枚举值,则调用构造方法几次。
5.以下哪些内存区域属于JVM规范?( )
正确答案: A D E 你的答案: A D E (正确)
方法区
实例变量
静态变量
程序计数器
虚拟机栈
6.局部内部类可以用哪些修饰符修饰?
正确答案: C D 你的答案: A B D (错误)
public
private
abstract
final
分析:局部内部类就像是方法中的一个局部变量,它是没有public
private,protected,static修饰的。
java专项05
1.下面有关JSP内置对象的描述,说法错误的是?
正确答案: C 你的答案: B (错误)
session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止
request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应
application对象:多个application对象实现了用户间数据的共享,可存放全局变量
response对象:response对象包含了响应客户请求的有关信息
分析:application对象是全局共享的,它是多个用户共享一个application对象。
2. 关于如下程序的描述哪个是正确的?( )
public class Person{
static int arr[] = new int[5];
public static void main(String a[]){
System.out.println(arr[0]);
}
}
正确答案: C 你的答案: C (正确)
编译将产生错误
编译时正确,但运行时将产生错误
正确,输出0
正确,输出 null
分析:数组按大小创建成功后,若是没有进行赋值,那么会有默认值0;引用类型默认为null;
3. 列表(List)和集合(Set)下面说法正确的是? ( )
正确答案: A 你的答案: A (正确)
Set中至多只能有一个空元素
List中至多只能有一个空元素
List和Set都可以包含重复元素的有序集合
List和Set都是有序集合
分析:List集合中的元素重复且有序;Set是无序不可重复,既然不可重复,那自然是只能有一个null;
4. 如果int x=20, y=5,则语句System.out.println(x+y +""+(x+y)+y); 的输出结果是()
正确答案: D 你的答案: D (正确)
2530
55
2052055
25255
分析:表达式前面x+y按正常运算为25;因为后续拼接了"",所以变成了字符串,后面的+就变成了拼接符,后续x+y有括号所以先按正常算数运算;
5. 下面的程序输出的结果是( )
public class A implements B{
public static void main(String args[]){
int i;
A a1=new A();
i =a1.k;
System.out.println("i="+i);
}
}
interface B{
int k=10;
}
正确答案: B 你的答案: B (正确)
i=0
i=10
程序有编译错误
i=true
接口中定义了变量k并赋值为10,子类创建对象后调用该属性进行赋值,所以i = 10;
6.transient 变量和下面哪一项有关?
正确答案: B 你的答案: B (正确)
Cloneable
Serializable
Runnable
Comparable
分析:通常一个类实现序列化方式是实现序列化接口 Serializable
序列化的作用:把数据长久的保存在磁盘中,磁盘和内存是不同的,内存一般在程序运行时占用,数据保存周期短,随程序结束而结束,磁盘可以长久保存数据;
transient关键字的作用,在已实现序列化的类中,有的变量不需要保存在磁盘中,就要transient关键字修饰,如银行卡密码等,它的作用是在已序列化的类中使变量不序列化
7.以下哪些语言是面向对象的是()
正确答案: B C 你的答案: B C (正确)
C
C++
JAVA
汇编
8.以下类型为Final类型的为()
正确答案: B C 你的答案: B C (正确)
HashMap
StringBuffer
String
Hashtable
分析:string与stringbuffer都是通过字符数组实现的。
其中string的字符数组是final修饰的,所以字符数组不可以修改。
stringbuffer的字符数组没有final修饰,所以字符数组可以修改。
string与stringbuffer都是final修饰,只是限制他们所存储的引用地址不可修改。
至于地址所指内容能不能修改,则需要看字符数组可不可以修改。
java专项06
下面程序的运行结果是
String str1 = “hello”;
String str2 = “he” + new String(“llo”);
System.err.println(str1 == str2);
正确答案: B 你的答案: B (正确)
true
false
exception
无输出
分析:new会在堆中开辟内存,存放该字符对象,而直接的字符赋值是在常量池里的
2.
//point X
public class Foo {
public static void main(String[] args) throws Exception {
PrintWriter out = new PrintWriter(
new java.io.OutputStreamWriter(System.out), true);
out.println("Hello");
}
}
下面哪个选项放在point X这里可以正确执行?
正确答案: A 你的答案: A (正确)
import java.io.PrintWriter;
include java.io.PrintWriter;
import java.io.OutputStreamWriter;
include java.io.OutputStreamWriter;
no statement is needed.
分析:代码调用了PrintWriter 对象,所以我们需要将该类导入;
3 下列关于包(package)的描述,正确的是()
正确答案: D 你的答案: D (正确)
包(package)是Java中描述操作系统对多个源代码文件组织的一种方式。
import语句将所对应的Java源文件拷贝到此处执行。
包(package)是Eclipse组织Java项目特有的一种方式。
定义在同一个包(package)内的类可以不经过import而直接相互使用。
1、为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。Java中的包一般均包含相关的类,java是跨平台的,所以java中的包和操作系统没有任何关系,java的包是用来组织文件的一种虚拟文件系统。A错
2、import语句并没有将对应的java源文件拷贝到此处仅仅是引入,告诉编译器有使用外部文件,编译的时候要去读取这个外部文件。B错
3、Java提供的包机制与IDE没有关系。C错
4.Java数据库连接库JDBC用到哪种设计模式?
正确答案: B 你的答案: D (错误)
生成器
桥接模式
抽象工厂
单例模式
分析: 桥接模式:
定义 :将抽象部分与它的实现部分分离,使它们都可以独立地变化。
意图 :将抽象与实现解耦。
接模式是结构型模式,关注点在依赖关系的维护。对于jdbc技术来说,它解耦了业务与数据库通信协议这两个纬度之间的关系,所以这两个纬度之间的关系就需要一个桥,即Driver,至于DriverManager把这个关系接到哪里就是运行时的事情了。
5.对于如下代码段
class A{
public A foo() {
return this;
}
}
class B extends A {
public A foo(){
return this;
}
}
class C extends B {
_______
}
可以放入到横线位置,使程序正确编译运行,而且不产生错误的选项是( )
正确答案: C 你的答案: D (错误)
public void foo(){}
public int foo(){return 1;}
public A foo(B b){return b;}
public A foo(){return A;}
分析:重写 要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。[注意:这里的返回类型必须要在有继承关系的前提下比较]
重载 方法名必须相同,参数类型必须不同,包括但不限于一项,参数数目,参数类型,参数顺序。
A B 都是方法名和参数相同,是重写,但是返回类型没与父类返回类型有继承关系,错误 D 返回一个类错误; c的参数类型与父类不同,所以不是重写,可以理解为广义上的重载;
6.下面哪一项不是加载驱动程序的方法?
正确答案: A 你的答案: C (错误)
通过DriverManager.getConnection方法加载
调用方法 Class.forName
通过添加系统的jdbc.drivers属性
通过registerDriver方法注册
分析:通过DriverManager.getConnection 拿到的是一个连接对象Connection,这个步骤是在加载驱动程序之后的。
java07
专项练习
1.在socket编程中,可以使用方法( )获取本机的ip地址
正确答案: B 你的答案: B (正确)
getInetAddress()
getLocalAddress()
getReuseAddress()
getLocalPort()
分析: getInetAddress获取主机名和IP地址
getLocalAddress()顾名思义,获取本地IP地址
getReuseAddress()返回布尔类型,表示复用地址
getLocalPort() 返回本机端口号
2. 如果一个接口Glass有个方法setColor(),有个类BlueGlass实现接口Glass,则在类BlueGlass中正确的是? ( )
正确答案: C 你的答案: C (正确)
protected void setColor() { …}
void setColor() { …}
public void setColor() { …}
以上语句都可以用在类BlueGlass中
分析:子类继承继承接口实现方法,该方法遵循两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。
3.在jdk1.8之前,下列哪一种叙述是正确的( )
正确答案: D 你的答案: D (正确)
abstract修饰符可修饰字段、方法和类
抽象方法的body部分必须用一对大括号{ }包住
声明抽象方法,大括号可有可无
声明抽象方法不可写出大括号
分析:抽象方法没有方法体;所以也没有大括号;抽象方法只是提供具体的功能,不管如何实现。
4. 下面字段声明中哪一个在interface主体内是合法的? ()
正确答案: B 你的答案: B (正确)
private final static int answer = 42;
public static int answer = 42;
final static answer = 42;
int answer;
分析:接口内的变量默认是public static final 的,public没有表示默认权限default;
5.下列程序的运行结果
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}
正确答案: A 你的答案: C (错误)
IOException!
IOException!Exception!
FileNotFoundException!IOException!
FileNotFoundException!IOException!Exception!
分析:题目说有一个异常,那就只有A符合
6.下面关于面向对象的一些理解哪些是错误的( )
正确答案: C 你的答案: C D (错误)
面向对象的最重要的特性是支持继承、封装和多态
系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展
函数式的语言必然是面向对象的语言
面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口
过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装
Java和C++都是静态类型的面向对象编程语言
分析:设计模式"七大原则";
1.单一职责原则:一个类负责一项职责,为避免因为一个职责而影响其他职责。可以降低类的负责度,提高可读性,可维护性,降低变更风险性。
2.接口隔离原则:一个类对另一个类的依赖建立在最小的接口上,划分缩小接。
3.依赖倒转原则:高层不依赖底层模块,两者都依赖其抽象,细节不依赖抽象,反之则不行;
4.里式替换原则:当子类重写父类方法而在子类方法中仍然需要使用父类的方法时,使用父类对象为参数,添加方法;
5.开闭原则:编程中最基础的设计原则;符合开闭的(依赖倒转原则),对扩展开放,对修改关闭。
6.迪米特法则:(也叫最少知道原则),将一个类的实现细节放于自己类中,其他类要是用,调用即可,不能将自己的实现细节放在其他类中。
7.合成复用原则:尽量使用合成/组合;
判断推理
1.生态入侵是指人们有意识或无意识地把某种生物带入适宜其栖息和繁衍的地区,使得该生物种群不断扩大,分布区不断稳定地扩展,从而危害当地的生产和生活,改变当地生态环境的过程。
根据上述定义,下列属于生态入侵的是:
正确答案: C 你的答案: C (正确)
某地发生大面积放射性核素泄漏,使某种植物发生变异,其繁殖力超强,逐渐取代了该地域内的其他植物
某实验室由于管理不当将试验用的致病性结核菌株散播了出去,造成结核病在周围居民中流行
产于南美洲的凤眼莲花朵艳丽,曾经作为观赏植物被我国引进,致使云南滇池因为凤眼莲的疯狂蔓延而鱼虾绝迹
美国科学家将从我国引进的野生大豆与当地品种杂交,培育出抗大豆萎黄病的优良品种,该品种现已彻底取代了美国传统大豆
2.如果所有的甲都不是乙,所有的乙都是丙,那么,一定没有一个丙是甲,这句话是()
正确答案: B 你的答案: A (错误)
对的
错的
既不对也不错
分析:这是个范围题,例如:男人不是女人,但是男人,女人都是人。
3.有四只老鼠一块出去偷食物(每个都偷了),回来时,族长问它们都偷了什么,老鼠A说:我们每个都偷了奶酪。老鼠B说:我只偷了一颗樱桃。老鼠C说:我没偷奶酪。老鼠D说:有些人没偷奶酪。族长观察了一下,发现它们当中只有一只老鼠说了实话,那么是哪只老鼠说了实话?
正确答案: A 你的答案: A (正确)
老鼠A
老鼠B
老鼠C
老鼠D
分析:只有一个说谎,C说他没偷,D说有人没偷,所以C,D为真,A说全偷了,所以A错。
4. 某市举办了一场职业技能竞赛,有甲、乙、丙、丁四支代表队进入决赛。每支队伍有两名参赛选手;获得第一名的选手将得10分、第二名得8分、第三名到第八名分别是6、5、4、3、2、1分,最后总分最高的队伍将获得冠军。
比赛的排名情况如下:
甲队选手的排名都是偶数;
乙队两名选手的排名相连;
丙队选手的排名一个是奇数一个是偶数;
丁队选手的排名都是奇数;
第一名是丁队选手;
第八名是丙队选手;
乙队两名选手的排名在甲队两名选手之间,同时也在丙队两名选手之间。
根据以上条件可以判断各队总分由高到低的排列顺序为?
丁>甲>丙>乙
甲>丁>乙>丙
甲>丁>丙>乙
丁>甲>乙>丙
分析:选D 10 8 6 5 4 3 2 1
丁 甲 丙 乙 乙 甲 丁 丙
5: 2,6,15,28,( )
正确答案: A 你的答案: B (错误)
55
56
58
60
分析:
2=12,6=23,15=35,28=47,
可以看出第一个乘数是1、2、3、4
第二个乘数是2、3、5、7(质数)
于是下一个为5*11=55
Java08
Java专项练习
- 覆盖(重写)与重载的关系是()。
正确答案: A 你的答案: A (正确)
覆盖(重写)只有出现在父类与子类之间,而重载可以出现在同一个类中
覆盖(重写)方法可以有不同的方法名,而重载方法必须是相同的方法名
final修饰的方法可以被覆盖(重写),但不能被重载
覆盖(重写)与重载是同一回事
分析:重写,要求子类与父类的方法参数和返回值类型要相同,并且访问修饰符,即可见性要大于等于父类;
2.在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在后面,子类放在前面。
正确答案: A 你的答案: A (正确)
正确
错误
分析:因为我们要按不同异常去捕获,如果吧父类异常置于前面,那就会都能匹配;子类就永远不能得到捕获执行;
3. 以下java程序代码,执行后的结果是()
java.util.HashMap map=new java.util.HashMap();
map.put("name",null);
map.put("name","Jack");
System.out.println(map.size());
正确答案: C 你的答案: C (正确)
0
null
1
2
分析:hashMap中put 方法将key-value键值对存入集合中,插入之前,若key不存在,则插入,若是该key存在,则将其值覆盖掉;所以这道题map中的元素个数为1;
4. 如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
nums.add(6);
nums.add(0,4);
nums.remove(1);
正确答案: B 你的答案: B (正确)
[5, 3, 1, 6]
[4, 3, 1, 6]
[4, 3, 6]
[5, 3, 6]
分析:集合add(value)是在list尾部添加元素;add(index,value),将该值插入到指定index角标处;remove(index)删除角标index对应的值;
5. 当你编译和运行下面的代码时,会出现下面选项中的哪种情况?
public class Pvf{
static boolean Paddy;
public static void main(String args[]){
System.out.println(Paddy);
}
}
正确答案: B 你的答案: B (正确)
编译时错误
编译通过并输出结果false
编译通过并输出结果true
编译通过并输出结果null
分析: 类中声明的成员变量有默认初始值;方法中声明的变量没有默认初始值,必须在定义时初始化,否则在访问该变量时会出错,boolean类型默认值是false。
6.URL u =new URL(“http://www.123.com”);。如果www.123.com不存在,则返回______。
正确答案: A 你的答案: C (错误)
http://www.123.com
””
null
抛出异常
new URL()时必须捕获检查异常,但这个异常是由于字符串格式和URL不符导致的,与网址是否存在无关。URL的toString方法返回字符串,无论网址是否存在。
7.下列关于系列化和反序列化描述正确的是:
正确答案: A B 你的答案: A B (正确)
序列化是将数据转为n个 byte序列的过程
反序列化是将n个 byte转换为数据的过程
将类型int转换为4 byte是反序列化过程
将8个字节转换为long类型的数据为序列化过程
分析: 序列化:将Object对象转换成为二进制数据流或者文本流的过程。序列化后的数据方便在网络上传输和在硬盘上存储;反序列化:与序列化相反,是将二进制数据流或者文本流转换称为对象的过程。
8.下列有关java构造函数叙述正确的是()
正确答案: C D 你的答案: C D (正确)
构造器的返回值为void类型
如果一个源文件中有多个类,那么构造器必须与公共类同名
构造器可以有0个,1个或一个以上的参数
每个类可以有一个以上的构造器
分析:构造函数是没有返回值的,它的方法名称与类名相同,一个类可以有一个以上的构造函数,可以重载构造函数;一个类默认都有一个无参构造函数,当我们手写一个带参构造函数时,就不会有默认构造函数,需要我们手动添加无参构造函数。
9.final、finally和finalize的区别中,下述说法正确的有?
正确答案: A B 你的答案: A B (正确)
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如关闭文件等。
引用变量被final修饰之后,不能再指向其他对象,它指向的对象的内容也是不可变的。
分析:finalize()方法一个对象只能执行一次,只能在第一次进入被回收的队列,而且对象所属于的类重写了finalize方法才会被执行。第二次进入回收队列的时候,不会再执行其finalize方法,而是直接被二次标记,在下一次GC的时候被GC。final 修饰引用类型,引用不可变,但是内容是可变的,例如final修饰数组,它指向的地址不变,但内部具体的值是可以更改的。
判断推理
1.广义而言,集体记忆即是一个具有自己特定文化内聚性和同一性的群体对自己过去的记忆。这种群体可以是一个政治宗教集团、一个地域文化共同体,也可以是一个民族或一个国家。这种记忆可以是分散的、零碎的、口头的,也可以是集中的、官方的、文字的,可以是对最近一个事件的回忆,也可以是对远古祖先事迹的追溯。
根据上述定义,下列属于集体记忆的是:
正确答案: A 你的答案: A (正确)
我国广泛流传的大禹治水的传说
某市宣传地方旅游资源的纪录片
某政府机构关于某项工作的文件汇编
我国某大学内介绍邻国历史的教材
2.羌特勒是一种野生的蘑菇,生长在能为它提供所需糖分的寄主树木——例如道格拉斯冷杉下面。反过来,羌特勒在地下的根茎细丝可以分解这些糖分,并为其寄主提供养分和水分。正是因为这种互惠的关系,采割道格拉斯冷杉下面生长的羌特勒会给这种树木造成严重的伤害。下面哪一个如果正确,对上面的结论提出了最强有力的质疑?()
正确答案: D 你的答案: D (正确)
近年来,野生蘑菇的采割数量一直在增加
羌特勒不仅生长在道格拉斯冷杉树下,也生长在其他寄主树木下面
许多种野生蘑菇只能在森林里找到,它们不能轻易在别处被种植
对野生蘑菇的采割激发了这些蘑菇将来的生长
分析:野生蘑菇的采摘若是激发它的生长,那么对于该互惠的格拉斯树来说是有利的;
3. 团队负责人接到一个紧急项目,他要考虑在代号为ABCDEF这6个团队成员中的部分人员参加项目开发工作。人选必须满足以下各点:
AB两人中至少一个人参加
AD不能都去
AEF三人中要派两人
BC两人都去或都不去
CD两人中有一人参加
若D不参加,E也不参加
那么最后()参加紧急项目开发。
正确答案: E 你的答案: E (正确)
ECEF
AF
ECF
F
ABCF
BCDEF
分析:有BC就没有DE,有A就没有D,BC必须同时存在;AEF需要2个,CD中必须有一个
Java09
1. 可以把任何一种数据类型的变量赋给Object类型的变量。
1.正确答案: A 你的答案: A (正确)
对
错
分析:Object是所有类的父类
2. 对文件名为Test.java的java代码描述正确的是()
class Person {
String name = "No name";
public Person(String nm) {
name = nm;
}
}
class Employee extends Person {
String empID = "0000";
public Employee(String id) {
empID = id;
}
}
public class Test {
public static void main(String args[]) {
Employee e = new Employee("123");
System.out.println(e.empID);
}
}
正确答案: C 你的答案: B (错误)
输出:0000
输出:123
编译报错
输出:No name
分析:报错的原因是, 子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有显式的调用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
而父类没有无参的构造函数,所以子类需要在自己的构造函数中显示的调用父类的构造函数。
3. 下面哪些选项是正确的()
正确答案: A D 你的答案: A D (正确)
A >>是算术右移操作符
B >>是逻辑右移操作符
C >>>是算术右移操作符
D >>>是逻辑右移操作符
4.关于equals和hashCode描述正确的是 ()
正确答案: A B C 你的答案: A B C (正确)
两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)
两个obj,如果hashCode()相等,equals()不一定相等
两个不同的obj, hashCode()可能相等
其他都不对
分析:HashCode()的存在是为了查找的快捷性,用于在散列存储结构中确定对象的存储地址
如果两个对象 equals相等,则 hashCode()也一定相等
如果 equals方法被重写,则 hashCode()也应该被重写
如果两个对象的 hashCode()相等, equals()方法不一定相等;equals方法没有重写,比较的就是应用类型的变量所指向的对象的地址
5.下面程序输出结果为():
public class Demo{
public static void main (String [] args) {
String lx = “LeXin”;
String nb = lx;
lx = “Fenqile”;
System.out.println(nb);
}
}
正确答案: B C 你的答案: C (错误)
程序异常,编译不通过
程序编写正常,可正常运行
程序输出值为“LeXin”
程序输出值为“Fenqile”
分析:分析出输出结果就选了,失策了;引用数据类型在变量中存储的是地址;所以 String nb = lx;是将常量池中"LeXin"的地址给了变量lx;而 lx = “Fenqile”;是将lx指向了另一个地址;所以nb的指向并没有改变;
数据运算专项练习
1:给出下列数字,括号中的数字应该是多少?
3,4,6,9,(),18
正确答案: C 你的答案: C (正确)
11 12 13 14
分析:相邻两个数之间相差1,2,3,4,5…
2: 3,3/2,1,3/4,(),1/2
正确答案: A 你的答案: A (正确)
3/5 5/3 3/4 4/3
分析:分子为3;分母分别是1,2,3…,差值为1的等差数列;
3: -1,1,0,0,1,1,8,4,(),()
正确答案: B 你的答案: C (错误)
8,12
27,9
9,27
12,8
分析: 变量i从-1开始计数,分别为i^3 和 i^2; (-1)^3 , (-1)^2 0^3 ,0^2 ,1^3 ,1^2 ,2^3 ,2^2 ,3^3 , 3^2 …,i^3 ,i^2…
-1, 1, 0, 0, 1, 1, 8, 4, 27, 9,…, i^3 ,i^2,…
Java10
- 以下程序段的输出结果为:
public class EqualsMethod
{
public static void main(String[] args)
{
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.print(n1 == n2);
System.out.print(",");
System.out.println(n1 != n2);
}
}
正确答案: B 你的答案: C (错误)
false,false
false,true
true,false
true,true
分析:因为是new,所以是在堆内存中创建了两个对象,虽然它在缓存区间;
2.ResultSet中记录行的第一列索引为?
正确答案: C 你的答案: B (错误)
-1
0
1
以上都不是
分析:结果集中的下标时从1开始的。
3.下面有关java的引用类型,说法正确的有?
正确答案: A B C D 你的答案: A C D (错误)
对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中
如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间
1.强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。
2、软引用:用SoftReference类实现,一般不会轻易回收,只有内存不够才会回收。
3、弱引用:用WeekReference类实现,一旦垃圾回收已启动,就会回收。
4、虚引用:不能单独存在,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态。
Java11
1.下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
byte[] src,dst;
正确答案: B 你的答案: A (错误)
dst=String.fromBytes(src,“GBK”).getBytes(“UTF-8”)
dst=new String(src,“GBK”).getBytes(“UTF-8”)
dst=new String(“GBK”,src).getBytes()
dst=String.encode(String.decode(src,“GBK”)),“UTF-8” )
分析: 用new String(src,“GBK”)解码得到字符串
用getBytes(“UTF-8”)得到UTF8编码字节数组
2.下面关于Applet的说法是正确的是
正确答案: A B C D 你的答案: B D (错误)
Applet可以在带有Java解释器的浏览器中运行
Applet类必须继承java.applet.Applet
Applet可以访问本地文件
Applet是Object类的子类
class A {}
class B extends A {}
class C extends A {}
class D extends B {}
3.下面的哪4个语句是正确的?
正确答案: A C D G 你的答案: B D F G (错误)
The type Listis assignable to List.
The type Listis assignable to List.
The type Listis assignable to List<?>.
The type Listis assignable to List<?extends B>.
The type List<?extends A>is assignable to List.
The type Listis assignable to any List reference.
The type List<?extends B>is assignable to List<?extends A>.
吃了英语差的亏啊。
1. 只看尖括号里边的!!明确点和范围两个概念
2. 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List< A >,List< B >,List< Object >
3. 如果尖括号里面带有问号,那么代表一个范围,<? extends A> 代表小于等于A的范围,<? super A>代表大于等于A的范围,<?>代表全部范围
4. 尖括号里的所有点之间互相赋值都是错,除非是俩相同的点
5. 尖括号小范围赋值给大范围,对,大范围赋值给小范围,错。如果某点包含在某个范围里,那么可以赋值,否则,不能赋值
6. List<?>和List 是相等的,都代表最大范围
7.补充:List既是点也是范围,当表示范围时,表示最大范围
错题集
Java01
- 有以下程序片段且Interesting不是内部类,下列哪个选项不能插入到行1。( )
2.public class Interesting{
3. // 省略代码
4.}
正确答案: D 你的答案: B (错误)
import java.awt.*;
package mypackage;
class OtherClass{ }
public class MyClass{ }
分析:不能插入,看错了,还犹豫半天;1处,可以是包名,也可以是导包,亦可以定义一个类,只要不是public的,因为下面有一个public的类;
2.一般情况下,以下哪个选项不是关系数据模型与对象模型之间匹配关系?
正确答案: D 你的答案: B (错误)
表对应类
记录对应对象
表的字段对应类的属性
表之间的参考关系对应类之间的依赖关系
分析:一个表对应一个类,表中的一个字段对应类的一个属性,一条记录就是创建一个对象;
3.假设如下代码中,若t1线程在t2线程启动之前已经完成启动。代码的输出是?
正确答案: B 你的答案: C (错误)
Thread 1 wake up
Thread 2 sent notify.
Thread 2 sent notify.
Thread 1 wake up
A、B皆有可能
程序无输出卡死
分析:执行obj.wait();时已释放了锁,所以t2可以再次获得锁,然后发消息通知t1执行,但这时t2还没有释放锁,所以肯定是执行t2,然后释放锁,之后t1才有机会执行。
4.
根据下面的代码,
String s = null;
会抛出NullPointerException异常的有()。
正确答案: A C 你的答案: A D (错误)
if( (s!=null) & (s.length()>0) )
if( (s!=null) && (s.length()>0) )
if( (s==null) | (s.length()==0) )
if( (s==null) || (s.length()==0) )
分析:String s=null;没有给s开辟任何空间,当执行length()方法时候,因为没有具体指向的内存空间,所以报出NullPointerException没有指向的错误。所以只要不执行s.length>0或是s.length()==0即可;
&和|,是非短路逻辑运算符,两个都得执行,执行到s.length()自然就报错了。
java02
1.下面代码的输出是什么?
public class Base
{
private String baseName = "base";
public Base()
{
callName();
}
public void callName()
{
System. out. println(baseName);
}
static class Sub extends Base
{
private String baseName = "sub";
public void callName()
{
System. out. println (baseName) ;
}
}
public static void main(String[] args)
{
Base b = new Sub();
}
}
正确答案: A 你的答案: C (错误)
null
sub
base
分析:new Sub();在创造派生类的过程中首先创建基类对象,然后才能创建派生类。
创建基类即默认调用Base()方法,在方法中调用callName()方法,由于派生类中存在此方法,则被调用的callName()方法是派生类中的方法,此时派生类还未构造,所以变量baseName的值为null。
2.以下哪个式子有可能在某个进制下成立()
正确答案: A 你的答案: B (错误)
13 * 14=204
12 * 34=568
14 * 14=140
1+1=3
3.以下哪种JAVA的变量表达式使得变量a和变量b具有相同的内存引用地址( )
正确答案: A B 你的答案: A B D (错误)
String a = “hello”; String b = “hello”;
Integer a; Integer b = a;
int a = 1; Integer b = new Integer(1);
int a = 1; Integer b = 1;
分析:内存引用地址,是指栈中存放的地址,来指向堆中的某个位置。
int 是基本类型,数据直接存放在栈中,不存在内存引用地址的说法。D选项会进行拆箱,它的值是相等的,但是Integer类型引用地址是不同的。
4.关于Java的一些概念,下面哪些描述是正确的:( )
正确答案: B F 你的答案: A B F (错误)
所有的Java异常和错误的基类都是java.lang.Exception, 包括java.lang.RuntimeException
通过try … catch … finally语句,finally中的语句部分无论发生什么异常都会得到执行
java中所有的数据都是对象
Java通过垃圾回收回收不再引用的变量,垃圾回收时对象的finallize方法一定会得到执行
Java是跨平台的语言,无论通过哪个版本的Java编写的程序都能在所有的Java运行平台中运行
Java通过synchronized进行访问的同步,synchronized作用非静态成员方法和静态成员方法上同步的目标是不同的
分析:Java中所有错误和异常的父类是java.lang.Throwable;基本数据类型不是对象哦;Java垃圾回收器负责回收无用对象占据的内存资源,但对象没有使用new获取了一块特殊区域,这块特殊区域的回收使用finallize();java跨平台是因为JVM
java03
1.下列哪些情况下会导致线程中断或停止运行( )
正确答案: B 你的答案: A B (错误)
InterruptedException异常被捕获
线程调用了wait方法
当前线程创建了一个新的线程
高优先级线程进入就绪状态
2.下列哪个选项是错误的。()
正确答案: A D 你的答案: C (错误)
一个文件中只能有一个public class。
一个文件中可以有多个类。
一个类中可以有两个main方法。
若类中只含一个main方法,则必须是public的。
分析:一个类中和类同名的类只能有一个,main方法,并不是主线程方法啊;
Java04
1.在各自最优条件下,对N个数进行排序,哪个算法复杂度最低的是? ()
正确答案: A 你的答案: B (错误)
插入排序
快速排序
堆排序
归并排序
2.下面代码的输出是什么?
public class Base
{
private String baseName = "base";
public Base()
{
callName();
}
public void callName()
{
System. out. println(baseName);
}
static class Sub extends Base
{
private String baseName = "sub";
public void callName()
{
System. out. println (baseName) ;
}
}
public static void main(String[] args)
{
Base b = new Sub();
}
}
正确答案: A 你的答案: B (错误)
null
sub
base
分析:这里考到了向下转型,重写等知识;
创建的是子类对象Sub,指向的是父类类型Base,创建子类对象时通过无参构造调用父类Base(),父类无参构造调用callname()方法,由于子类重写了该方法,所以调用的是子类的callname()方法,而此时子类还没有创建实例,没有初始化,所以basename此时为null;
3.假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是()
boolean isOdd = false;
for(int i=1;i<=2;++i){
if(i%2==1)isOdd = true;
else isOdd = false;
a+=i*(isOdd?1:-1);
}
正确答案: D 你的答案: C (错误)
-1
-2
0
1
分析:
1.AB不并发:此时相当于两个方法顺序执行。A执行完后a=-1,B使用-1作为a的初值,B执行完后a=-2
2.AB完全并发:此时读写冲突,相当于只有一个线程对a的读写最终生效。相同于方法只执行了一次。此时a=-1
3.AB部分并发:假设A先进行第一次读写,得到a=1;之后A的读写被B覆盖了。B使用1作为a的初值,B执行完后a=0;或是线程A,B第一次读写冲突,A被B覆盖了,之后执行先线程A的第二次读写,再执行线程B的第二次读写,得到a=-3;