Java选择题
- 应用程序的main方法中有以下语句,则输出的结果( )
String s1=new String( ” xyz ” );
String s2=new String( ” xyz ” );
Boolean b1=s1.equals(s2);
Boolean b2=(s1 = =s2);
System .out.print(b1+ ” ” +b2);
正确答案: A 你的答案: A (正确)
A. true false
B. false true
C. true true
D. false false
>1.= =比较的是引用,即地址,equal比较的是值
2.如果都是new,则比较的结果= =,一定是False,equal则看值
3.如果先一个new,一个直接赋值一个字符串 如String a=new String(“AA”); String b=“AA”; 此时结果= =和equal都是TRUE,因为第二个在创建时会去字符串常量池找,有直接拿来用,不会专门去new 一个。
4.先直接赋值一个再new一个,则==是FALSE - 以下代码段执行后的输出结果为
public class Test {
public static void main(String args[]) {
int x = -5;
int y = -12;
System.out.println(y % x);
}
}
正确答案: D 你的答案: B (错误)
A. -1
B. 2
C. 1
D. -2
1.当x和y的正负相同时,取余和取模结果相同;
2.当x和y的正负不同时,取余结果的符号和x相同,取模结果的符号和y相同。
- Math.floor(-8.5)=( )
正确答案: D 你的答案: B (错误)
A. (float)-8.0
B. (long)-9
C. (long)-8
D. (double)-9.0
1.Math.floor() 表示向下取整,返回double类型 (floor—地板)
2.Math.ceil() 表示向上取整,返回double类型 (ceil—天花板)
3.Math.round() 四舍五入,返回int类型
- 当编译并运行下面程序时会发生什么结果()
public class Bground extends Thread{
public static void main(String argv[]){
Bground b = new Bground();
b.run();
}
public void start(){
for(int i=0;i<10;i++){
System.out.println("Value of i = "+i);
}
}
}
正确答案: D 你的答案: C (错误)
A. 编译错误,指明run方法没有定义
B. 运行错误,只鞥呢run方法没有定义
C. 编译通过并输出0到9
D. 编译通过,但无输出
对于线程而言,start是让线程从new变成runnable。run方法才是执行体的入口。
但是在Thread中,run方法是个空方法,没有具体实现。
Bground继承了Thread,但是没有重写run方法,那么调用run方法肯定是无输出。
- 下面哪些标识符是正确的?
正确答案: A B 你的答案: A B (正确)
A. MyWorld
B. parseXML
C. –value
D. &maybe
标识符规则 1.由字母,数字,下划线和$组成 2.开头不能是数字 3.¥这个也符合标识符的规则
- 关于抽象类与最终类,下列说法错误的是?
正确答案: D 你的答案: C (错误)
抽象类能被继承,最终类只能被实例化。
抽象类和最终类都可以被声明使用
抽象类中可以没有抽象方法,最终类中可以没有最终方法
抽象类和最终类被继承时,方法可以被子类覆盖
抽象类:
1,抽象类中可以有抽象方法,也可以没有抽象方法。
2,抽象类当然可以被继承,因为它就是用来继承的,
3,继承抽象类,若有抽象方法,则子类必须将其抽象方法实现,
4,抽象类中的非抽象方法可以被重写。
最终类:
1,加上final的类就叫最终类,加上final的方法就叫最终方法,
2,最终类中可以有最终方法也可以没有
3,最终类不能有子类,最终方法不能被重写
- 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后序代码都是只读引用。
Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为()
正确答案: C 你的答案: D (错误)
A. 5
B. 10
C. 15
D. 20
substring实际是new,5字符
str3和4也都是new,每个5字符
分别都会创建新的对象
常量池是PermGen的
因此应该是一共15字符
java的垃圾回收机制:
年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。
年老代:年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收
永久代:存储的是final常量,static变量,常量池。
str3,str4都是直接new的对象,而substring的源代码其实也是new一个string对象返回,如下图:
经过fullgc之后,年老区的内存回收,则年轻区的占了15个,不算PermGen。所以答案选C
-
What will be printed when you execute the following code?
class C {
C() {
System.out.print(“C”);
}
}
class A {
C c = new C();A() {
this(“A”);
System.out.print(“A”);
}A(String s) {
System.out.print(s);
}
}
class Test extends A {
Test() {
super(“B”);
System.out.print(“B”);
}public static void main(String[] args) {
new Test();
}
}
正确答案: B 你的答案: B (正确)
A. BB
B. CBB
C. BAB
D. None of the above
初始化过程是这样的:
1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;
(1)初始化父类的普通成员变量和代码块,执行 C c = new C(); 输出C
(2)super(“B”); 表示调用父类的构造方法,不调用父类的无参构造函数,输出B
(3) System.out.print(“B”);
所以输出CBB
- 下面有关webservice的描述,错误的是?
正确答案: B 你的答案: C (错误)
Webservice是跨平台,跨语言的远程调用技术
Webservice通信机制实质就是json数据交换
Webservice采用了soap协议(简单对象协议)进行通信
WSDL是用于描述 Web Services 以及如何对它们进行访问
它的通信机制实质就是xml数据交换;
- 下面哪项技术可以用在WEB开发中实现会话跟踪实现?
正确答案: A B C D 你的答案: A B (错误)
A. session
B. Cookie
C. 地址重写
D. 隐藏域
实现会话跟踪的机制
Cookies,URL重写,隐藏式表单域,Session机制
Cookies
Cookies是使用最广泛的会话跟踪机制,Cookies是有服务器创建,并把Cookies信息保存在用户机器上的硬盘上,下次用户再次访问该站点服 务器的时候,保存在用户机器上硬盘的Cookies信息就被送回给服务器。一般Cookies一般不多于4KB,且用户的敏感信息如信用卡账号密码不应该 保存在Cookies中。
URL重写
URL重用户在每个URL结尾附加标识回话的数据,与标识符关联的服务器保存有关与会话的数据,如我们访问某个新闻的时候,在地址栏我们一般会看到这样的 信息:http://www.XXX.com/news?id=??,通常的话id后面的问号表示该条新闻在后台数据库中的新闻表的id。URL重写能够 在客户端停用cookies或者不支持cookies的时候仍然能够发挥作用。
隐藏表单域
通常,在表单中我们使用隐藏表单域的时候会有这么一句代码:。通过给type属性赋值为hidden值来实现隐藏,这样用户在浏览的时候看不到这行代码的数据,但是当用户通过查看 源代码还是可以看到的。
Session机制
这个机制要慎用,特别是对于访问量很大的站点,因为这种机制是吧Session信息保存在服务器端。如果访问量特别大的话,对于服务器的承受力的要求有多高是可想而知的。
- 下列代码的输出结果是_____
boolean b=true?false:true==true?false:true;
System.out.println(b);
正确答案: B 你的答案: A (错误)
true
false
null
空字符串
== 优先级高于 三目运算符,先判断 true = = true,此时返回为 true,
这时表达式为 boolean b = true?false:true?false:true
此时三目运算符从右向左执行,true?false:true,返回false
这时表达式为 boolean b = true?false:false;
结果为:boolean b = false ;
1.= =大于三目运算符
2.三目运算符从右往左
- Java数据库连接库JDBC用到哪种设计模式?
正确答案: B 你的答案: B (正确)
生成器
桥接模式
抽象工厂
单例模式
JDBC连接 数据库 的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不动,原因就是JDBC提供了统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了
- 下列哪些情况下会导致线程中断或停止运行( )
正确答案: A B 你的答案: A B (正确)
InterruptedException异常被捕获
线程调用了wait方法
当前线程创建了一个新的线程
高优先级线程进入就绪状态
A选项正确,Java中一般通过interrupt方法中断线程
B选项正确,线程使用了wait方法,会强行打断当前操作,进入阻塞(暂停)状态,然后需要notify方法或notifyAll方法才能进入就绪状态
C选项错误,新创建的线程不会抢占时间片,只有等当前线程把时间片用完,其他线程才有资格拿到时间片去执行。
D选项错误,调度算法未必是剥夺式的,而准备就绪但是还没有获得CPU,它的权限更高只能说明它获得CPU被执行的几率更大而已
- 有关静态初始化块说法正确的是?
正确答案: A B C 你的答案: A B (错误)
无法直接调用静态初始化块
在创建第一个实例前或引用任何静态成员之前,将自动调用静态初始化块来初始化
静态初始化块既没有访问修饰符,也没有参数
在程序中,用户可以控制何时执行静态初始化块
静态内容只在类加载时执行一次,之后不再执行。
默认调用父类的无参构造方法,可以在子类构造方法中利用super指定调用父类的哪个构造方法。
- Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )
正确答案: A D F 你的答案: B C (错误)
A. Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B. 通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C. 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D. Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E.Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F. Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率 - 构造方法用于创建类的实例对象,构造方法名应与类名相同,返回类型为void。
正确答案: B 你的答案: A (错误)
正确
错误
构造方法和普通方法的区别,只有权限修饰和方法名(和类名相同),虽然没有返回值,但是它没有返回类型,包括void!
- 下面这段java代码,当 T 分别是引用类型和值类型的时候,分别产生了多少个 T对象和T类型的值()
T t = new T();(值类型时:T t;)
Func(t);
Func 定义如下:
public void Func(T t) { }
正确答案: D 你的答案: D (正确)
A. 1 1
B. 2 1
C. 2 2
D. 1 2
引用类型作为函数的参数时,复制的是引用的地址,不会产生一个新的T;而如果T是值类型,其作为函数实参时会复制其值,也就是产生了一个新的T。所以D选项正确
- 容器panel缺省使用的布局编辑策略是( )
正确答案: B 你的答案: C (错误)
Border Layout
Flow Layout
GridLayout
Card Layout - Integer i = 42;
Long l = 42l;
Double d = 42.0;
下面为true的是
正确答案: G 你的答案: B (错误)
A. (i == l)
B. (i == d)
C. (l == d)
D. i.equals(d)
E. d.equals(l)
F. i.equals(l)
G. l.equals(42L)
1、基本型和基本型封装型进行“= =”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
int a = 220;
Integer b = 220;
System.out.println(a= =b);//true
2、两个Integer类型进行“= =”比较, 如果其值在-128至127 ,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
Integer c=3;
Integer h=3;
Integer e=321;
Integer f=321;
System.out.println(c= =h);//true
System.out.println(e= =f);//false
3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true。
Integer a=1;
Integer b=2;
Integer c=3;
System.out.println(c.equals(a+b));//true