1.下面代码运行结果是?
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;}
}
正确答案: D 你的答案: A (错误)
compiletime error
prints:1
prints:2
prints:3
prints:7
prints:8
D
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
2.servlet周期包含哪些:
正确答案: A B C 你的答案: A B C D (错误)
初始化
销毁
请求处理
开始
init() --> 初始化
service() --> 处理请求
destory () --> 销毁(停止)
Servlet生命周期分成3个阶段:
1)初始化阶段:调用init方法
2)响应客户请求:调用service
3)终止:调用destory方法
初始化阶段:在下列时刻servlet容器装载servlet
1 servlet容器启动时,自动装载某些servlet
2 在servlet容器启动后,客户首次向servlet发送请求
3 servlet类文件被更新之后,重新装载servlet
Servlet被装载之后,servlet容器创建一个servlet’对象并调用servlet的init方法,在servlet生命周期内,init方法只能被调用一次。servlet工作原理:客户端发起一个请求,servlet调用service方法时请求进行响应,service对请求的方式进行了匹配,选择调用dopost或者doget等这些方法,然后进入对应方法中调用逻辑层的方法,实现对客户的响应。
响应客户请求:对于用户到达servlet的请求,servlet容器会创建特定于该请求的servletrequest和servletresponse对象,然后调用servlet的service方法,service方法从servletrequest对象中获取客户请求的信息,处理该请求,并且通过servletresponse对象向客户端返回响应信息。
终止:当web应用终止或者servlet容器终止或servlet容器重新装载servlet新实例时,servlet容器会调用servlet对象的destory方法,在destory方法中可以释放servlet占用的资源
1.下列外部类定义中,不正确的是:( )
正确答案: C 你的答案: D (错误)
class x { … }
class x extends y { … }
static class x implements y1,y2 { … }
public class x extends Applet { … }
static修饰的为类成员,会随着类的加载而加载,比如静态代码块,静态成员,静态方法(这里只是加载,并没有调用)等等,可以想象一下,如果把一个Class文件中的外部类设为static,目的难道是让这个类随着应用的启动而加载吗?如果在这次使用过程中根本没有使用过这个类,那么是不是就会浪费内存。这样来说设计不合理,总而言之,设计不合理的地方,Java是不会让它存在的。
而为什么内部类可以使用static修饰呢,因为内部类算是类的成员了,如果没有使用静态来修饰,那么在创建内部类的时候就需要先有一个外部类的对象,如果我们一直在使用内部类,那么内存中就会一直存在外部类的引用,而我们有时候只需要使用内部类,不需要外部类,那么还是会浪费内存,甚至会造成内存溢出。使用static修饰内部类之后,内部类在创建对象时就不需要有外部类对象的引用了。
最终结论就是:static可以用来修饰内部类,但是不可以用来修饰外部类
2.Java的体系结构包含( )。
正确答案: A B C D 你的答案: A B C (错误)
Java编程语言
Java类文件格式
Java API
JVM
Java体系结构包括四个独立但相关的技术:
Java程序设计语言
Java.class文件格式
Java应用编程接口(API)
Java虚拟机
我们再在看一下它们四者的关系:
当我们编写并运行一个Java程序时,就同时运用了这四种技术,用Java程序设计语言编写源代码,把它编译成Java.class文件格式,然后再在Java虚拟机中运行class文件。当程序运行的时候,它通过调用class文件实现了Java API的方法来满足程序的Java API调用
1.下面代码输出是?
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 你的答案: B (错误)
编译正确,输出”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”
编译错误
答案:C
枚举类有三个实例,故调用三次构造方法,打印三次It is a account type
public class NameList
{private List names = new ArrayList();public synchronized void add(String name){names.add(name);}public synchronized void printAll() {for (int i = 0; i < names.size(); i++){System.out.(i) + "");}}public static void main(String[]args){final NameList sl = new NameList();for (int i = 0; i < 2; i++){new Thread(){public void run(){sl.add("A");sl.add("B");sl.add("C");sl.printAll();}} .start();}}
}
下面正确的2项是?
正确答案: E G 你的答案: C E (错误)
运行的时候可能抛异常
运行的时候可能没有输出,也没有正常退出
代码运行的时候可能没有输出,但是正常退出
代码输出"A B A B C C "
代码输出"A B C A B C A B C "
代码输出"A A A B C A B C C "
代码输出"A B C A A B C A B C "
在每个线程中都是顺序执行的,所以sl.printAll();必须在前三句执行之后执行,也就是输出的内容必有(连续或非连续的)ABC。
而线程之间是穿插执行的,所以一个线程执行 sl.printAll();之前可能有另一个线程执行了前三句的前几句。
E答案相当于线程1顺序执行完然后线程2顺序执行完。
G答案则是线程1执行完前三句add之后线程2插一脚执行了一句add然后线程1再执行 sl.printAll();输出ABCA。接着线程2顺序执行完输出ABCABC
输出加起来即为ABCAABCABC。
本文发布于:2024-02-04 17:07:13,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170712351557649.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |