解析:
编译不会编译注释中的内容。javac编译后的字节码文件中也不会出现自己手打的注释。
解析:
Java中类是单继承,但接口可以多继承
解析:
先要理解什么是类的方法,所谓类的方法就是指类中用static 修饰的方法(非static 为实例方法),比如main 方法,那么可以以main 方法为例,可直接调用其他类方法,必须通过实例调用实例方法,this 关键字不是这么用的
解析:
解决哈希冲突常用的两种方法是:开放定址法和链地址法
解析:
接口方法默认是public abstract的,且实现该接口的类中对应的方法的可见性不能小于接口方法的可见性,因此也只能是public的。
解析:
选C
父类没有无参的构造函数,所以子类需要在自己的构造函数中显式调用父类的构造函数,会编译报错
解析:
A不用解释,B中JVM将字节码转换成不同平台(OS)下可执行的机器码指令。D中说的与硬件交互是JVM机器指令与硬件的交互。
解析:
A.函数中定义的变量是局部变量,作用域为当前函数或循环等
B.局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了
解析:
解析:
字节流必是一个接点流,字符流就是一个操作流
解析:
这道题,首先没有初始化对象根本没有输出。
其次,即使初始化了对象,也该是输出
我是父类
我是父类
我是子类
解析:
导包关键词import
解析:
值传递,传递的是原来值的副本。
引用传递,除了一些特殊的(String,包装类属于不可变类),一般的引用类型在进行传递的时候,一开始形参和实参都是指向同一个地址的,这个时候形参对对象的改变会影响到实参
解析:
类中声明的变量有默认初始值;方法中声明的变量没有默认初始值,必须在定义时初始化,否则在访问该变量时会出错。boolean类型默认值是false
解析:
this表示当前类的对象,由static修饰的方法是由类直接调用,不需要创建对象,所以在static里不能用this.
解析:
关于抽象类
JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default
关于接口
JDK 1.8以前,接口中的方法必须是public的
JDK 1.8时,接口中的方法可以是public的,也可以是default的
解析:
第一,记住wait必须要进行异常捕获
第二,记住调用wait或者notify方法必须采用当前锁调用,即必须采用synchronized中的对象
解析:
newSupper().get()和newSub().get()只调用了get()方法,又没有打印输出get()返回的数值,所以肯定没有5
解析:
Collection
-----List
-----LinkedList 非同步
----ArrayList 非同步,实现了可变大小的元素数组
----Vector 同步
-----Set 不允许有相同的元素
Map
-----HashTable 同步,实现一个key–value映射的哈希表,key和value都不允许出现nul值
-----HashMap 非同步,
-----WeakHashMap 改进的HashMap,实现了“弱引用”,如果一个key不被引用,则被GC收
注:
List接口中的对象按一定顺序排列,允许重复
Set接口中的对象没有顺序,但是不允许重复
Map接口中的对象是key、value的映射关系,key不允许重复
解析:
A、LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。
B、LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。
C、PriorityQueue是一个队列,不允许null值,入队和出队的时间复杂度是O(log(n))。
D、PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的线程安全队列,该队列的元素遵循FIFO原则。
解析:
continue是跳出本次循环
解析:
A:一个类里面多个内部类,构造方法名是与和.java文件同名的public类名。内部类也是类,构造方法名和内部类名不同。
B:构造方法不返回任何值,也没有返回类型。无异议。
C:子类在构造方法里面调用父类的构造方法时,会在第一行使用“super(参数列表)”显示调用父类的构造方法。这里是显示地直接调用,而且没有创建新对象。
D:每一个和.java文件同名的public类可以有多个构造方法,构造方法允许重载。内部类也可以有多个构造方法,而匿名内部类一个构造方法都没有。
解析:
基类是抽象类,子类继承父类,但是没有实现基类的抽象方法,那么子类也是抽象类。抽象类不能创建对象,所以在主函数中创建对象编译不会通过。
解析:
解析:
解析:
a++ 先把10赋值给a 再+1 所以左边是10 但此时a=11。右边a-- 也是先赋值 a=11,再-1。10+11=21 此时a=10。
解析:
公式-n=n+1可推出n=-n-1,所以~10=-11再加5结果为-6
解析:
抛InterruptedException的代表方法有:
java.lang.Object 类的 wait 方法
java.lang.Thread 类的 sleep 方法
java.lang.Thread 类的 join 方法
解析:
JVM内存区:程序计数器、虚拟机栈、本地方法栈、堆、方法区(包括常量池)。
不属于JVM内存区:直接内存(Direct Memory),用户I/O操作
解析:
1、abstract类不能用来创建abstract类的对象;
2、final类不能用来派生子类,因为用final修饰的类不能被继承;
3、如2所述,final不能与abstract同时修饰一个类,abstract类就是被用来继承的;
4、类中有abstract方法必须用abstract修饰,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。
解析:
A、一旦执行到return,就不再执行后续的代码。
B、类的封装性可不是这么体现的,数据域和方法都可以被封装。数据域可以是基本数据类型也可以是引用类型。
C、方法的返回值可以是引用类型。
D、重载,判定方法只有方法名一致,形参列表不同。
解析:
Java是一门面向对象编程语言,属于计算机语言。故正确答案为D选项。
解析:
instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例,而Object是所有类的父类。
解析:
+号两边如果有一边为字符类型 则为字符串连接。
解析:
A,类是一个封装,类的成员只能在类内部使用,外部需要 “对象名.变量名” 来引用。
B,正确,局部变量只在定义它的代码块或者函数内部可见
C,跟类的成员变量一样,需要指定对象才能引用
D,如果类没有构造方法,JVM会生成一个默认构造方法,如果定义了任意类型的构造方法,编译器都不会自动生成构造方法。
解析:
在同一个java原文件中,可以有多个class类,但是只有有一个公共的 public class
解析:
覆盖是发生在子类与基类中,重载发生在一个类中重载要求方法名一样,形参类型、顺序和个数不能完全一样,返回值类型不能作为判断的标准覆盖要求 方法名、形参类型、顺序和个数都完全一样。
解析:
try:可能发生异常的语句
catch:捕获,并处理异常(printStackTrace()用来跟踪异常事件发生时执行堆栈的内容)
throw:方法内部抛异常
throws:声明方法异常
finaly:代码中无论是否有异常都会执行,清除资源
解析:
内部类可以是静态static的,也可用public,default,protected和private修饰,外部类的修饰符只能是public,abstract,final。
解析:
Set 不能有重复的元素,且是无序的,要有空值也就只能有一个。因为它不允许重复。 L ist 可以有重复元素,且是有序的,要有空值也可以有多个,因为它可重复。
解析:
++i就是先赋值 再计算 当到9的时候直接+1超过了10直接输出。
解析:
此题的父类方法有private修饰,所以对子类不可见,子类不能覆盖。所以子类方法和父类是两个方法。
解析:
package语句只能放在第一行。
解析:
&& 运算时出现false时运算结果就判断为false
a != 3 && a != 4 && a != 5 && a != 6
a = 4;
因为a != 4 false 所以 结果false;
a = 6;
因为a != 6 false 所以 结果false;
a = 8;
因为a != 3 a != 4 a != 5 a != 6都为 ture 所以 结果true
所以
答案D
解析:
结果中数组的第一个元素 0 是 原数组中的第二个0。
这个程序就是在删除数组中的0 ,但是会有个小问题,就是连续的0会只删除一个。
原因:当执行remove的时候,ArrayList 数组的 size 会变小一个,原本的位置上的 0 会被后面的 0 给替代;而在执行完remove后执行了k++;所以跳过了第二个0
解析:
y是2,返回的结果是2+(z–/++x),再来看z–/++x,结果应该是3/2,但是因为x,y,z都是int型的,所以最后的返回值只能是int,这时候z–/++x的值就是1,那么最终的结果就是2+1=3。
解析:
\D 匹配一个非数字字符。
解析:
Step 1: new B()构造一个B类的实例
此时super(5)语句调用显示调用父类A带参的构造函数,该构造函数调用setValue(v),这里有两个注意点一是虽然构造函数是A类的构造函数,但此刻正在初始化的对象是B的一个实例,因此这里调用的实际是B类的setValue方法,于是调用B类中的setValue方法 ==> 而B类中setValue方法显示调用父类的setValue方法,将B实例的value值设置为2 x 5 = 10。
紧接着,B类的构造函数还没执行完成,继续执行setValue(getValue()- 3) // 备注1语句。
先执行getValue方法,B类中没有重写getValue方法,因此调用父类A的getValue方法。这个方法比较复杂,需要分步说清楚:
调用getValue方法之前,B的成员变量value值为10。
value++ 执行后, B的成员变量value值为11,此时开始执行到return语句,将11这个值作为getValue方法的返回值返回出去
但是由于getValue块被try finally块包围,因此finally中的语句无论如何都将被执行,所以步骤2中11这个返回值会先暂存起来,到finally语句块执行完毕后再真正返回出去。
这里有很重要的一点:finally语句块中 this.setValue(value)方法调用的是B类的setValue方法。因为此刻正在初始化的是B类的一个对象(运行时多态),就像最开始第一步提到的一样(而且这里用了使用了this关键词显式指明了调用当前对象的方法)。因此,此处会再次调用B类的setValue方法,同上,super.关键词显式调用A的setValue方法,将B的value值设置成为了2 * 11 = 22。
因此第一个打印项为22。
finally语句执行完毕 会把刚刚暂存起来的11 返回出去,也就是说这么经历了这么一长串的处理,getValue方法最终的返回值是11。
回到前面标注了 //备注1 的代码语句,其最终结果为setValue(11-3)=>setValue(8)
这里执行的setValue方法,将会是B的setValue方法。 之后B的value值再次变成了2*8 = 16;
Step2: new B().getValue()
B类中没有独有的getValue方法,此处调用A的getValue方法。同Step 1,
调用getValue方法之前,B的成员变量value值为16。
value++ 执行后, B的成员变量value值为17,此时执行到return语句,会将17这个值作为getValue方法的返回值返回出去
但是由于getValue块被try finally块包围而finally中的语句无论如何都一定会被执行,所以步骤2中17这个返回值会先暂存起来,到finally语句块执行完毕后再真正返回出去。
finally语句块中继续和上面说的一样: this.setValue(value)方法调用的是B类的setValue()方法将B的value值设置成为了2 * 17 = 34。
因此第二个打印项为34。
finally语句执行完毕 会把刚刚暂存起来的17返回出去。
因此new B().getValue()最终的返回值是17.
Step3: main函数中的System.out.println
将刚刚返回的值打印出来,也就是第三个打印项:17
最终结果为 22 34 17。
解析:
插入排序:最佳O(N)
快速排序:最佳O(NlogN)
堆 排序:最佳O(NlogN)
归并排序:最佳O(NlogN)
因此选择插入排序。
解析:
A.很明显是赋值符号
B.<<=左移赋值
C.不是
D.>>>= 右移赋值,左边空出的位以0填充
解析:
ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的
LinkedList 是线程不安全的,底层是由链表实现的
HashTable 是线程安全的,不能存储 null 值
HashMap 不是线程安全的,可以存储 null 值
解析:
解析:
1、一个类可以实现多个接口
2、抽象类可以没有抽象方法;
3、有抽象方法的类必须定义为抽象类
解析:
Jsp只会在客户端第一次发请求的时候被编译,之后的请求不会再编译,同时tomcat能自动检测jsp变更与否,变更则再进行编译。
第一次编译并初始化时调用: init() ;销毁调用: destroy() 。在整个jsp生命周期中均只调用一次。
service()方法是接收请求,返回响应的方法。每次请求都执行一次,该方法被HttpServlet封装为doGet和doPost方法
解析:
HttpSessionAttributeListener:可以实现此侦听器接口获取此web应用程序中会话属性列表更改的通知;
HttpSessionBindingListener:当该对象从一个会话中被绑定或者解绑时通知该对象,这个对象由HttpSessionBindingEvent对象通知。这可能是servlet程序显式地从会话中解绑定属性的结果,可能是由于会话无效,也可能是由于会话超时;
HttpSessionObjectListener:没有该接口API;
HttpSessionListener:当web应用程序中的活动会话列表发生更改时通知该接口的实现类,为了接收该通知事件,必须在web应用程序的部署描述符中配置实现类;
HttpSessionActivationListener:绑定到会话的对象可以侦听容器事件,通知它们会话将被钝化,会话将被激活。需要一个在虚拟机之间迁移会话或持久会话的容器来通知所有绑定到实现该接口会话的属性
解析:
java中只有byte, boolean是一个字节, char是两个字节, 所以对于java来说127不会发生溢出, 输出328
但是对于c/c++语言来说, char是一个字节, 会发生溢出, 对127加一发生溢出, 0111 1111 --> 1000 0000, 1000 0000为补码-128, 所以结果为200-128=72
解析:
静态内部类:不可以访问外部非静态资源;
成员内部类:可以访问外部所有资源,但本身内部不可以有静态属性(需要被外部实例化)
局部内部类:不可被访问符合和static修饰,只能访问final变量和形参
匿名内部类:a没有构造器,没有静态资源,无法被访问符修饰 b只能在匿名内部类中创建一个实。
解析:
byte类型的变量在做运算时被会转换为int类型的值,故A、B左为byte,右为int,会报错;而C、D语句中用的是a+=b的语句,此语句会将被赋值的变量自动强制转化为相对应的类型。
解析:
A、错,Hashtable 是一个哈希表,该类继承自Dictionary类,实现了 Map 接口
B、错,HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。该类继承AbstractMap,实现Map接口
C、 对,Hashtable 线程安全的,而 HashMap 是线程不安全的。Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。
D、讲的没错,但是不符合题意
E、对。
解析:
List,List,List