.
第001题
Java中所有类的父类是( )。
A、Father
B、Dang
C、Exception
D、Object
正确答案: D 我的答案: D (正确)
解释:java中Object是所有类的父亲,所有类的对象都是Class的实例。
第002题
在某个类A中存在一个方法:void set(int x),以下不能作为这个方法的重载的声明的是()
A、void set(int y)
B、int set(int x,double y)
C、double set(int x,int y)
D、void set(int x,int y)
正确答案: A 我的答案: A (正确)
解释:方法重载满足的条件
- 同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载 2.参数列表不同指参数的类型,参数的个数,参数的顺序至少一项不同
3.方法的返回值类型,方法的修饰符可以不同。
第003题
关于下面程序 ThisTest .java 运行结果 说法正确的是 : ( )
public class ThisTest {
public static void main(String args[]) {
String x="7";
int y = 2;
int z=2;
System.out.println(x+y+z);
}
}
A、11 B、722 C、22 D、程序有编译错误
正确答案: B 我的答案: B (正确)
解释:+号两边如果有一边为字符类型 则为字符串连接,这里是“7”+2+2—>“72”+2—>722
如果变为y+z+x 则等价于(y+z)+x 输出47
第004题
下面的程序 编译运行后,在屏幕上显示的结果是()
public class test {
public static void main(String args[]) {
int x,y;
x=5>>2;
y=x>>>2;
System.out.println(y);
}
}
A、0 B、2 C、5 D、80
正确答案: A 我的答案: B (错误)
解释:5的二进制是0101。
x=5>>2 (>>带符号右移)
将0101右移2位,为:0001。
y=x>>>2 (>>>无符号右移,左边空缺补充为0)
将0001右移2位,补0。结果为:0000。
所以得出答案0
Java中的位运算符:
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。
第005题
下面的输出结果是什么?
public class Demo {
public static void main(String args[])
{
String str=new String("hello");
if(str=="hello")
{
System.out.println("true");
}
else {
System.out.println("false");
}
}
}
A、true B、false
正确答案: B 我的答案: A (错误) 重点
解释:= =用来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不要求数据类型严格相同),则只要两个变量的值相等,就返回true;对于两个引用类型变量,必须指向同一个对象,= =才会返回true。
java中使用new String(“hello”)时,jvm会先使用常量池来管理"hello"常量,再调用String类的构造器创建一个新的String对象,新创建的对象被保存在堆内存中;而直接使用"hello"的字符串直接量,jvm会用常量池来管理这些字符串。故上述程序中str=="hello"返回结果为false
第006题
下面程序的输出结果为( )
public class Demo {
public static String sRet = "";
public static void func(int i)
{
try
{
if (i%2==0)
{
throw new Exception();
}
}
catch (Exception e)
{
sRet += "0";
return;
}
finally
{
sRet += "1";
}
sRet += "2";
}
public static void main(String[] args)
{
func(1);
func(2);
System.out.println(sRet);
}
}
A、120 B、1201 C、12012 D、101
正确答案: B 我的答案: A (错误)
解释:“1201”
①调用func(1),if不符合,直接进入finally,sRet=“1"
②finally语句中没有返回值,故继续向下执行,sRet=“12”
③调用func(2),if符合,sRet=“120”,此时有返回值!!!
④调用finally语句,sRet=“1201”
⑤因为已经有返回值了,finally之后的语句也不再执行,sRet=“1201”。
错误原因是第二次忽略了finally
第007题
以下哪项不属于java类加载过程?
A、生成java.lang.Class对象
B、int类型对象成员变量赋予默认值
C、执行static块代码
D、类方法解析
正确答案: B 我的答案: D (错误)
解释:不应该选D,而应该选B
类的加载包括:加载,验证,准备,解析,初始化。
选项A:生成java.lang.Class对象是在加载时进行的。生成Class对象作为方法区这个类的各种数据的访问入口。
选项B:既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。
选项C:这个会调用。可以用反射试验。
选项D:类方法解析发生在解析过程。
第008题
运行代码,输出的结果是()
public class P {
public static int abc = 123;
static{
System.out.println("P is init");
}
}
public class S extends P {
static{
System.out.println("S is init");
}
}
public class Test {
public static void main(String[] args) {
System.out.println(S.abc);
}
}
A、P is init<br />123
B、S is init<br />P is init<br />123
C、P is init<br />S is init<br />123
D、S is init<br />123
正确答案: A 我的答案: D (错误)
解释:属于被动引用不会出发子类初始化
1.子类引用父类的静态字段,只会触发子类的加载、父类的初始化,不会导致子类初始化
2.通过数组定义来引用类,不会触发此类的初始化
3.常量在编译阶段会进行常量优化,将常量存入调用类的常量池中, 本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。
第009题
在java中重写方法应遵循规则的包括()
A、访问修饰符的限制一定要大于被重写方法的访问修饰符
B、可以有不同的访问修饰符
C、参数列表必须完全与被重写的方法相同
D、必须具有不同的参数列表
正确答案: B C 我的答案: B C (正确)
解释:方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
第010题
What is Static Method in Java()
A、It is a method which belongs to the class and not to the object(instance)
B、A static method can access only static data. It can not access non-static data (instance variables)
C、A static method can call only other static methods and can not call a non-static method from it.
D、A static method can not be accessed directly by the class name and doesn’t need any object
正确答案: A B C 我的答案: A C (错误)
解释:
A:静态方法是一个属于类而不属于对象(实例)的方法。(√)
B:静态方法只能访问静态数据。无法访问非静态数据(实例变量)。(√)
C:静态方法只能调用其他静态方法,不能从中调用非静态方法。(√)
D:静态方法不能通过类名直接访问,也不需要任何对象。(×) 静态方法可以直接用类名访问。
第011题
类Test1定义如下:
public class Test1{//1
public float aMethod(float a,float b){}//2
//3
}//4
将以下哪种方法插入行3是不合法的。
A、public int aMethod(int a,int b){}
B、private float aMethod(int a,int b,int c){}
C、public float aMethod(float a,float b){}
D、public float aMethod(float a,float b,float c){}f
正确答案: C 我的答案: C (正确)
解释:
重载的概念是:
方法名称相同,参数个数、次序、类型不同
因此重载对返回值没有要求,可以相同,也可以不同
但是如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载。
第012题
J2EE中,当把来自客户机的HTTP请求委托给servlet时,会调用HttpServlet的
( )方法
A、service
B、doget
C、dopost
D、init
正确答案: A 我的答案: A (正确)
解释:.首先Servlet通过HttpRequest对象封装http请求信息,然后Servlet容器调用HttpServlet的service方法,它会根据用户请求的方式调用具体的方法。如果请求方式是Get则调用doGet方法,如果请求方式是POST则调用doPost方法,执行完后,通过HttpRespones对象生成相应数据相应客户的请求,一般要重写doGet方法和doPost方法
第013题
When is the text “Hi there”displayed?
public class StaticTest
{
static
{
System.out.println(“Hi there”);
}
public void print()
{
System.out.println(“Hello”);
}
public static void main(String args[])
{
StaticTest st1 = new StaticTest();
st1.print();
StaticTest st2 = new StaticTest();
st2.print();
}
}
A、Never.
B、Each time a new object of type StaticTest is created.
C、Once when the class is loaded into the Java virtual machine.
D、Only when the main() method is executed.
正确答案: C 我的答案: D (错误)
解释:静态代码块优先于主方法,且只在类加载时执行一次
第014题
在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句
式应该为()
A、this.A(x)
B、this(x)
C、super(x)
D、A(x)
正确答案: B 我的答案: A (错误)
解释:
A.这是调用普通方法的写法
B是调用与类名同名的方法即构造方法
C.这时显示调用父类构造方法
D.调用静态方法
第015题
下列哪一项不属于Swing的顶层容器?()
A、JApplet
B、JTree
C、JDialog
D、JFrame
正确答案: B 我的答案: B (正确)
解释:
顶层容器是指可以不能被其他容器包含 ,是容纳其他容器的容器组件,
顶层容器包含JApplet、JDialog、JFrame和JWindow及其子类.
JFrame中就可以放Jtree(树形组件)
所以B不是
第016题
Java 提供的事件处理模型是一种人机交互模型。它有三个基本要素
A、事件源
B、事件对象
C、事件过程
D、事件监听器
正确答案: A B D 我的答案: A B D (正确)
解释:Java 提供的事件处理模型是一种人机交互模型。它有三个基本要素:
- 事件源(Event Source):即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件;
- 事件(Event):事件封装了组件上发生的事情,比如按钮单击、按钮松开等等;
- 事件***(Event Listener):负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件;
第017题
JDK1.7版本之前,接口和抽象类描述正确的有( )
A、抽象类没有构造函数。
B、接口没有构造函数。
C、抽象类不允许多继承。
D、接口中的方法可以有方法体。
正确答案: B C 我的答案: A B C (错误)
解释:
A.抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已
B.在接口中 不可以有构造方法,在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。
C.Java不允许类多重继承
D.jdk1.8后接口中的方法可以有方法体,jdk1.8之前不可以有方法体
第018题
下面几个关于Java里queue的说法哪些是正确的()?
A、LinkedBlockingQueue是一个可选有界队列,不允许null值
B、PriorityQueue,LinkedBlockingQueue都是线程不安全的
C、PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))
D、PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原则
正确答案: A C 我的答案: 空 (错误)
解释:A、LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。
B、LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。
C、PriorityQueue是一个队列,不允许null值,入队和出队的时间复杂度是O(log(n))。
D、PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的*线程安全队列,该队列的元素遵循FIFO原则。
第019题
Java程序的种类有( )
A、类(Class)
B、Applet
C、Application
D、Servlet
Java程序的种类有:
正确答案: B C D 我的答案: A D (错误)
解释:
Java程序的种类有:
(a)内嵌于Web文件中,由浏览器来观看的_Applet
(b)可独立运行的 Application
(c)服务器端的 Servlets
第020题
有关hashMap跟hashTable的区别,说法正确的是?
A、HashMap和Hashtable都实现了Map接口
B、HashMap是非synchronized,而Hashtable是synchronized
C、HashTable使用Enumeration,HashMap使用Iterator
D、HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。
正确答案: A B C D 我的答案: A B C (错误)
解释:HashTable和HashMap区别(敲黑板!):
①继承不同。
public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map
②Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。
③Hashtable中,key和value都不允许出现null值。
在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
④两个遍历方式的内部实现上不同。
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
⑤哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
⑥Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
第021题
下列程序段执行后t3的结果是()。
int t1=2, t2=3, t3;
t3=t1<t2?t1:(t2+t1);
A、2 B、3 C、4 D、5
正确答案: A 我的答案: A (正确)
解释:三目运算符,
if(t1<t2)
t3=t1;;
else
t3=t2+t1;
第022题
下列代码中的错误是()
public class Test
{
public static void main(String [] args)
{
int i;
i+=1;
}
}
A、非法的表达式 i+=1
B、找不到符号i
C、类不应为public
D、尚未初始化变量i
正确答案: D 我的答案: D (正确)
解释:
1.方法定义中或者方法声明上。
2.在内存的栈中。
3.随方法的调用而存在,随着方法的调用完毕而消失。
4.没有默认值,必须定义,赋值,然后才能使用
第023题
根据下面的程序代码,哪些选项的值返回true?
public class Square {
long width;
public Square(long l) {
width = l;
}
public static void main(String arg[]) {
Square a, b, c;
a = new Square(42L);
b = new Square(42L);
c = b;
long s = 42L;
}
}
A、a == b B、s == a
C、b == c D、a.equals(s)
正确答案: C 我的答案: C (正确)
解释:
a = new Square(42L);
b = new Square(42L);
这里new了两个对象,所以a,b不是同一个引用a!=b
s的类型跟a,b不同类型,所以s!=a,s!=b
c = b;
这里b,c是同一个对象的引用,所以b==c是true
第024题
java语言中,按照一定格式生成程序的文档的工具是?
A、javac B、javah
C、javadoc D、jar
正确答案: C 我的答案: C (正确)
解释:jar 将许多文件组合成一个jar文件
javac 编译
javadoc 它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。
javah 把java代码声明的JNI方法转化成C\C++头文件。
第025题
以下程序的运行结果是:( )
TreeSet<Integer> set = new TreeSet<Integer>();
TreeSet<Integer> subSet = new TreeSet<Integer>();
for(int i=606;i<613;i++){
if(i%2==0){
set.add(i);
}
}
subSet = (TreeSet)set.subSet(608,true,611,true);
set.add(629);
System.out.println(set+" "+subSet);
A、编译失败
B、发生运行时异常
C、[606, 608, 610, 612, 629] [608, 610]
D、[606, 608, 610, 612, 629] [608, 610,629]
正确答案: C 我的答案: A (错误)
解释:subset(form,true,to,true)是Treeset的非静态方法,该方法返回从form元素到to元素的一个set集合,两个boolean类型是确认是否包含边境值用的。
第026题
多重继承的概念在Java中实现是通过如下哪些?()
I. 扩展两个或多个类
II. 扩展一个类并实现一个或多个接口。
III. 实现两个或更多接口。
A、只有I &II B、只有II & III
C、只有III D、都是
正确答案: B 我的答案: B (正确)
解释:Java只支持单继承,实现多重继承三种方式:
(1)直接实现多个接口
(2)扩展(extends)一个类然后实现一个或多个接口
(3)通过内部类去继承其他类
所以Ⅰ错误,Ⅱ、Ⅲ正确,
第027题
抽象类方法的访问权限默认都是public。( )
A、正确 B、错误
正确答案: B 我的答案: B (正确)
解释:
关于抽象类
JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default
关于接口
JDK 1.8以前,接口中的方法必须是public的
JDK 1.8时,接口中的方法可以是public的,也可以是default的
JDK 1.9时,接口中的方法可以是private的
第028题
以下对继承的描述错误的是()
A、Java中的继承允许一个子类继承多个父类
B、父类更具有通用性,子类更具体
C、Java中的继承存在着传递性
D、当实例化子类时会调用父类中的构造方法
正确答案: A 我的答案: A (正确)
解释:jdk1.8后不允许多继承(多继承有违社会常理),所以A错误
第029题
下面哪个行为被打断不会导致InterruptedException:( )?
A、Thread.join
B、Thread.sleep
C、Object.wait
D、CyclicBarrier.await
E、Thread.suspend
正确答案: E 我的答案: B (错误)
解释:
抛InterruptedException的代表方法有:
java.lang.Object 类的 wait 方法
java.lang.Thread 类的 sleep 方法
java.lang.Thread 类的 join 方法
关于D选项:
CyclicBarrier是一个屏障类,它的await方法可以简单的理解为:等待多个线程同时到达之后才能继续进行,在此之前它就是这些线程的屏障,线程不能继续进行,而对于失败的同步尝试,CyclicBarrier 使用了一种要么全部要么全不 (all-or-none) 的破坏模式:如果因为中断、失败或者超时等原因,导致线程过早地离开了屏障点,那么在该屏障点等待的其他所有线程也将通过 BrokenBarrierException(如果它们几乎同时被中断,则用 interruptedException)以反常的方式离开。
第030题
如果Child extends Parent,那么正确的有()?
A、如果Child是class,且只有一个有参数的构造函数,那么必然会调用Parent中相同参数的构造函数
B、如果Child是interface,那么Parent必然是interface
C、如果Child是interface,那么Child可以同时extends Parent1,Parent2等多个interface
D、如果Child是class,并且没有显示声明任何构造函数,那么此时仍然会调用Parent的构造函数
正确答案: B C D 我的答案: B C D (正确)
解释:
A 可以调用父类无参的构造函数,子类的有参构造函数和是否调用父类的有参数的构造函数无必然联系。
B 接口继承的时候只能继承接口不能继承类,因为如果类可以存在非抽象的成员,如果接口继承了该类,那么接口必定从类中也继承了这些非抽象成员,这就和接口的定义相互矛盾,所以接口继承时只能继承接口。
C 接口可以多继承可以被多实现,因为接口中的方法都是抽象的,这些方法都被实现的类所实现,即使多个父接口中有同名的方法,在调用这些方法时调用的时子类的中被实现的方法,不存在歧义;同时,接口的中只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。 对于一个接口继承多个父接口的情况也一样不存在这些缺点。所以接口可以多继承。
D 子类即使没有显示构造函数,也会有个无参数的默认构造函数,仍然会调用父类的构造函数。
第031题
在类Tester中定义方法如下,
public double max(int x, int y) { // 省略 }
则在该类中定义如下哪个方法头是对上述方法的重载(Overload)?
public int max(int a, int b) {}
public int max(double a, double b) {}
public double max(int x, int y) {}
private double max(int a, int b) {}
正确答案: B 我的答案: B (正确)
解释:
Java 重载的规则:
- 1、必须具有不同的参数列表;
- 2、可以有不同的返回类型,只要参数列表不同就可以;
- 3、可以有不同的访问修饰符;
- 4、可以抛出不同的异常;
- 5、方法能够在一个类中或者在一个子类中被重载。
方法的重写:
- 1、在子类中可以根据需要对从基类中继承来的方法进行重写。
- 2、重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。
- 3、重写方法不能使用比被重写的方法更严格的访问权限。
总之:重载就是一句话:同名不同参,返回值无关。
覆盖/重写:同名同参
第032题
关于final说法正确的是? ( )
final类的方法肯定不能被同一个包的类访问
final类的方法能否被同一个包的类访问不是由final决定
final方法等同于private方法
final对象本身的引用和值都不能改变
正确答案: B 我的答案: B (正确)
解释:
- final 变量:
final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。
final 修饰符通常和 static 修饰符一起使用来创建类常量。 - final 方法
类中的 final 方法可以被子类继承,但是不能被子类修改。
声明 final 方法的主要目的是防止该方法的内容被修改。 - final 类
final 类不能被继承,没有类能够继承 final 类的任何特性。
第033题
以下不是修饰符final的作用的是( )。
修饰常量
修饰不可被继承的类
修饰不可变类
修饰不可覆盖的方法
正确答案: C 我的答案: D (错误)
final的作用:(上一题的解析)
-
- 修饰变量,变量的引用地址不可变,但是地址中的内容可以变。
-
- 修饰方法,方法不可被重写,但是还是可以重载
-
- 修饰类,类不可继承。
第034题
非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完
全一致.
A、正确 B、错误
正确答案: B 我的答案: A (错误)
解释:
方法头指:修饰符+返回类型 +方法名(形参列表)
两同两小一大原则
- 返回值和参数列表相同
- 返回值类型小于等于父类的返回值类型
- 异常小于等于父类抛出异常
- 访问权限大于等于父类
第035题
What will happen when you attempt to compile and run the following code?
public class Test{
static{
int x=5;
}
static int x,y;
public static void main(String args[]){
x--;
myMethod( );
System.out.println(x+y+ ++x);
}
public static void myMethod( ){
y=x++ + ++x;
}
}
A、compiletime error
B、prints:1
C、prints:2
D、prints:3
E、prints:7
F、prints:8
正确答案: D 我的答案: A (错误)
解释:
- 1.静态语句块中x为局部变量,不影响静态变量x的值
- 2.x和y为静态变量,默认初始值为0,属于当前类,其值得改变会影响整个类运行。
- 3.java中自增操作非原子性的
main方法中:执行x–后 x=-1
调用myMethod方法,x执行x++结果为-1(后++),但x=0,++x结果1,x=1 ,则y=0
x+y+ ++x,先执行x+y,结果为1,执行++x结果为2,得到最终结果为3
第036题
String与StringBuffer的区别。
A、String是不可变的对象,StringBuffer是可以再编辑的
B、字符串是常量,StringBuffer是变量
C、String是可变的对象,StringBuffer是不可以再编辑的
D、以上说法都不正确
正确答案: A B 我的答案: C (错误)
解释;String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都是String类的对象。字符串是常量;它们的值在创建之后不能改变。所以可以共享它们。StringBuffer是字符串缓存区,它的内容可以被修改,长度也可以改变,StringBuffer类是线程安全的,也就是说多个线程可以安全的访问StringBuffer对象。StringBuilder与StringBuffer类似,都是字符串缓冲区,但StringBuilder不是线程安全的,如果你只是在单线程中使用字符串缓冲区,那么StringBuilder的效率会更高些。值得注意的是StringBuilder是在JDK1.5版本中增加的。以前版本的JDK不能使用该类。
第037题
下列哪个选项是合法的标识符?()
A、123
B、_name
C、class
D、first
正确答案: B D 我的答案: B (错误)
解释:
Java标识符由 数字、字母、下划线(_)、美元符号($) 组成, 首位不能是数字 。并且 Java关键字不能作为标识符 。first不是关键字。
第038题
在 hibernate 开发中,关于 POJO 类对象的状态说法正确的是()。
A、自由状态(Transient):实体在内存中自由存在,与数据库中的记录无关
B、持久状态(Persistent):实体处于由Hibernate框架所管理的状态,对应了数据库中
的一条记录,同时与某个session实例发生了关联
C、游离状态(Detached):在session 关闭之后,可以使对象从持久状态转换到游离状态。
D、不能将对象从游离状态转换成持久态
正确答案: A B C 我的答案: A B C (正确)
解释:Hibernate Pojo的三态分别为transient(瞬时态),persistent(持久态),detached(游离态)
三种状态间相互转换关系,及他们在数据库、session中的状态如下:
- a.当我们new一个pojo时,它处于瞬时态,此时与session、数据库均无任何关联。
- b.此后,我们获得session并开启hibernate事务,调用save(),persist(),saveOrUpdate()方法,将pojo转变为持久态,此时session中存有这个pojo,但直到transaction.commit()被调用时,sql语句才会执行,此后数据库中也才有此条数据。
- c.但当commit()并且session.close()执行过后,pojo就变为了游离态,也就是说,数据库中有该记录,但session中不再有。
- d.持久化状态的实例,也可以重新变成瞬时态,那就是调用delete()方法。
- e.通过get()或load()方法得到的pojo是持久态的。
- f.游离态的pojo可以通过update(),saveOrUpdate(),lock()和replicate()方法重新成为持久态。
- g.调用merge()方法后,pojo维持原态,但内容会被更新到数据库
第039题
以下代码定义了一个变量,如何输出这个变量的值?
A、<% String myBean =
(String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE);%>
<%=myBean%>
B、<bean:write name=“helloworld”/>
C、<bean:write name=“stringBean”/>
D、<%=stringBean%>
正确答案: A C D 我的答案: A C (错误)
解释:
- A选项:通过 pageContext(PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问) 获取stringBean 的值,赋给 String 类型的变量 myBean,然后通过 Jsp 表达式 处理该值。
- bean:define
题目中的 Struts 的bean:define 标签定义了一个字符串变量 stringBean ,它的值为 helloworld。 - bean:write
bean:write相当于 <%=request.getAttribute(“something”)%> 其中 something 是属性的名字。所以 B 错,C对。 - D选项:
通过Jsp 表达式 获取变量 stringBean 的值
第040题
以下哪些方法可以取到http请求中的cookie值()?
A、request.getAttribute
B、request.getHeader
C、request.getParameter
D、request.getCookies
正确答案: B D 我的答案: B D (正确)
解释:
-
1)Cookie[] getCookies()
返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。 -
2)Object getAttribute(String name)
以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回 null。 -
3)String getHeader(String name)
以字符串形式返回指定的请求头的值。Cookie也是头的一种; -
4)String getParameter(String name)
以字符串形式返回请求参数的值,或者如果参数不存在则返回 null
第041题
关于类的叙述正确的是()。
A、在类中定义的变量称为类的成员变量,在别的类中可以直接使用
B、局部变量的作用范围仅仅在定义它的方法内,或者是在定义它的控制流块中
C、使用别的类的方法仅仅需要引用方法的名字即可
D、只要没有定义不带参数的构造函数,JVM都会为类生成一个默认构造函数
正确答案: B 我的答案: B (正确)
解释:
A在类中定义的变量称为类的成员变量,在别的类中不可以直接使用局部变量的