关于打*的题目,要么是我不会,要么就是我没有认真听课,后期会努力学习补充每道题的解析的!
(╹▽╹)
Java专项练习(二)
Java专项练习(一)
public class Car
{
public String type;
String NO;
private int heavy;
double speed;
protected String owner;
public String price;
private String color;
}
A.type,No
B.type,price
C.heavy,owner
D.type,owner,price
解析:
public权限是在本类、子类和类外都可被对象访问: protect权限是在本类或子类中可被对象访问: private权限是只能在本类内被访问
A.List
B.Set
C.SortedSet
D.Map
解析:
Collection主要的子接口:
List:可以存放重复内容
Set:不能存放重复内容,所有重复的内容靠hashCode()和equals()两个方法区分
Queue:队列接口
SortedSet:可以对集合中的数据进行排序
Map是键值对类型容器的顶级接口
A.volatile,synchronized
都可以修改变量,方法以及代码块
B.volatile,synchronized 在多线程中都会存在阻塞问题
C.volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
D.volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性
解析:
多线程中volatile 和synchronized的特性考察。
public class TestIncr {
public static void main(String args[]) {
int i = 0;
i = i++ + i;
System.out.println("I =" +i);
}
}
A.I = 1
B.I = 2
C.I = 3
D.编译出错
解析:
i i++
0 1(此时i未被调用,所以i的值依旧为0)
所以i = i++ + i = 1 + 0 = 1;
public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}
A.0
B.2
C.4
D.10
解析:
没有break,发生case穿透现象,程序会继续向下执行,直到遇到break或者结束switch语句的大括号为止。
public class TestObj{
public static void main(String[] args){
Object o=new Object(){
public boolean equals(Object obj){
return true;
}
};
System.out.println(o.equals("Fred"));
}
}
请给出结果:()
A.运行时抛出异常
B.true
C.Fred
D.第三行编译错误
解析:
new Object(){
public boolean equals(Object obj){
return true;
}
};
就是那个匿名类,继承并重写了Object类的equals方法,o只是指向所创建匿名对象的一个引用
将Object换成String,就会提示Cannot inherit from final 'java.lang.String
代码重写了equals方法,所以不管比较的是什么内容,传进来之后都会返回true。
A.accept
B.listen
C.connect
D.close
解析:
A.float a=10
B.int a=(int)8846.0
C.byte a=10; int b=-a
D.double d=100
解析:
精度丢失只会发生在从大范围到小范围的转换,
B选项为double到int转换,为大范围向小范围。
class Base {
Base() {
System.out.print("Base");
}
}
public class Alpha extends Base {
public static void main( String[] args ) {
new Alpha();
//调用父类无参的构造方法
new Base();
}
}
A.Base
B.BaseBase
C.编译失败
D.代码运行但没有输出
E.运行时抛出异常
解析:
子类继承父类,在创建对象时,先调用父类的静态成员和静态方法,再是子类的静态成员和静态方法,再是父类的构造函数,再是子类的构造函数。
此处由于无静态函数和静态方法,所以先调用父类的构造函数然后是子类的构造函数。
先创建了子类对象,调用了父类中默认无参的构造函数打印出Base,子类默认无参的构造函数内部无内容;
接着创建了父类对象,调用了父类中默认无参的构造函数打印出Base。
所以结果是BaseBase.
A.11 ,-11
B.11 ,-12
C.12 ,-11
D.12 ,-12
解析:
round函数是取最接近整数,如果遇到一样近,则取最大值。
A.RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.
B.A method is not required to declare in its throws clause any subclasses of RuntimeExeption that might be thrown during the execution of the method but not caught
C.An RuntimeException is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.
D.NullPointerException is one kind of RuntimeException
解析:
四个选项都来自于Java API原文.
A选项是RuntimeException的定义;
B选项是把Error的第二段定义拿来改掉换成RuntimeException,但这样说对于RuntimeException也没错;
C选项也是把Error的定义换成了RuntimeException,但这里的"indicates serious problems"不应该用在RuntimeException上,Error才表示严重的错误,RuntimeException并不是.
public class DataObject implements Serializable{
private static int i=0;
private String word=" ";
public void setWord(String word){
this.word=word;
}
public void setI(int i){
Data0bject.i=i;
}
}
创建一个如下方式的DataObject:
DataObject object=new Data0bject ( );
object.setWord("123");
object.setI(2);
将此对象序列化为文件,并在另外一个JVM中读取文件,进行反序列化,请问此时读出的Data0bject对象中的word和i的值分别为:
A.“”, 0
B.“”, 2
C.“123”, 2
D.“123”, 0
解析:
序列化保存的是对象的状态,静态变量属于类的状态,因此,序列化并不保存静态变量。所以i是没有改变的
10. class Line {
11. public class Point { public int x,y;}
12. public Point getPoint() { return new Point(); }
13. }
14. class Triangle {
15. public Triangle() {
16. // insert code here
17. }
18. }
A.Point p = Line.getPoint();
B.Line.Point p = Line.getPoint();
C.Point p = (new Line()).getPoint();
D.Line.Point p = (new Line()).getPoint();
<bean id="txProxyTemplate" abstract="true"
class=
"org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="myTransactionManager" />
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
A.定义了声明式事务的配置模板
B.对get方法采用只读事务
C.缺少sessionFactory属性的注入
D.配置需要事务管理的bean的代理时,通过parent引用这个配置模板,代码如下:
<bean id="petBiz" parent="txProxyTemplate">
<property name="target"ref="petTarget"/>
</bean>
解析:
https://www.nowcoder.com/questionTerminal/0ae7fe7ffb2345fba9c967eb18af0d5c
A.生成器
B.桥接模式
C.抽象工厂
D.单例模式
解析:
https://www.nowcoder.com/questionTerminal/134a62da02d34bc6a7ff309af3fbb76f
A.生成java.lang.Class对象
B.int类型对象成员变量赋予默认值
C.执行static块代码
D.类方法解析
解析:
参考书籍
深入理解java虚拟机 周志明著
原文链接 http://www.importnew.com/18548.html
A.都实现了Map接口
B.Hashtable类不是同步的,而HashMap类是同步的
C.Hashtable不允许null键或值
D.HashMap不允许null键或值
解析:
后续学到了在整理哈
A.e3,e1,e4,e2
B.e2,e4,e3,e1
C.e2,e3,e4,e1
D.任意顺序都有可能
解析:
栈stack先进后出
1.进一个出一个e1,e2,e3,e4
2.进两个出一个e2,e4,e3,e1
3.先进两个出一个再进一个出一个e2,e3,e4,e1
4.先进一个出一个再进两个出一个e1,e3,e4,e2
5.进三个出一个e3,e4,e2,e1
6.进一个出一个在进三个e1,e4,e3,e2
7.全进再出e4,e3,e2,e1
…
A.引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
B.扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
C.系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
D.tomcat 为每个 App 创建一个 Loader,里面保存着此 WebApp 的 ClassLoader。需要加载 WebApp 下的类时,就取出 ClassLoader 来使用
解析:
类的加载是由类加载器完成的,类加载器包括:根加载器( BootStrap )、扩展加载器( Extension )、系统加载器( System )和用户自定义类加载器( java.lang.ClassLoader 的子类)。
从 Java 2 ( JDK 1.2 )开始,类加载过程采取了父亲委托机制( PDM )。 PDM 更好的保证了 Java 平台的安全性,在该机制中, JVM 自带的 Bootstrap 是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。 JVM 不会向 Java 程序提供对 Bootstrap 的引用。下面是关于几个类加载器的说明:
Bootstrap :一般用本地代码实现,负责加载 JVM 基础核心类库( rt.jar );
Extension :从 java.ext.dirs 系统属性所指定的目录中加载类库,它的父加载器是 Bootstrap ;
system class loader :又叫应用类加载器,其父类是 Extension 。它是应用最广泛的类加载器。它从环境变量 classpath 或者系统属性 java.class.path 所指定的目录中记载类,是用户自定义加载器的默认父加载器。
用户自定义类加载器: java.lang.ClassLoader 的子类
父类委托机制是可以修改的,有些服务器就是自定义类加载器优先的。
A.初始态->运行态
B.就绪态->运行态
C.阻塞态->运行态
D.运行态->就绪态
解析:
A.使用FileOutputStream可以将对象进行传输
B.使用PrintWriter可以将对象进行传输
C.使用transient修饰的变量不会被序列化
D.对象序列化的所属类需要实现Serializable接口
解析:
学习中!
对应知识为Java输入输出流
A.抽象类中可以有普通成员变量,接口中没有普通成员变量。
B.抽象类和接口中都可以包含静态成员常量。
C.一个类可以实现多个接口,但只能继承一个抽象类
D.抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。
解析:
public class ThreadTest extends Thread {
public void run() {
System.out.println("In run");
yield();
System.out.println("Leaving run");
}
public static void main(String []argv) {
(new ThreadTest()).start();
}
}
A.程序运行输出只有In run
B.程序运行输出只有Leaving run
C.程序运行输出先有In run后有Leaving run
D.程序运行输出先有Leaving run后有In run
E.程序没有任何输出就退出了
F.程序将被挂起,只能强制退出
解析:
Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。
yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。
结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。
A.抽象类可以有构造方法,接口中不能有构造方法
B.抽象类中可以有普通成员变量,接口中没有普通成员变量
C.抽象类中不可以包含静态方法,接口中可以包含静态方法
D.一个类可以实现多个接口,但只能继承一个抽象类。
解析:
同422题
A.StringBuilder是 线程不安全的
B.Java类可以同时用 abstract和final声明
C.HashMap中,使用 get(key)==null可以 判断这个Hasmap是否包含这个key
D.volatile关键字不保证对变量操作的原子性
解析:
线程问题
A.StringBuilder线程不安全,StringBuffer线程安全。
B.同时用 abstract和final就会自相矛盾。
C.Hashmap中的value可以之null,get(key)==null有两种情况,一是key不存在,二是该key中存的是null,所以应该使用map.containskey(key)返回的true/false来判断是否存在这个key。
D.volatile关键字有两个作用:
1.并发环境可见性:volatile修饰后的变量能够保证该变量在线程间的可见性,线程进行数据的读写操作时将绕开工作内存(CPU缓存)而直接跟主内存进行数据交互,即线程进行读操作时直接从主内存中读取,写操作时直接将修改后端变量刷新到主内存中,这样就能保证其他线程访问到的数据是最新数据
2.并发环境有序性:通过对volatile变量采取内存屏障(Memory barrier)的方式来防止编译重排序和CPU指令重排序,具体方式是通过在操作volatile变量的指令前后加入内存屏障,来实现happens-before关系,保证在多线程环境下的数据交互不会出现紊乱。
A.final修饰的方法不能被重载
B.final可以修饰类、接口、抽象类、方法和属性
C.final修饰的方法也不能被重写
D.final修饰的属性是常量,不可以修改
解析:
final修饰符
1.final修饰符可以修饰类、成员变量和成员方法。
2.final修饰类,意味着这个类不能再作为父类派生出其他子类,这样的类为最终类,如:String类。
3.final修饰一个变量,即定义一个常量,常量不占内存,因此其值也不会改变。
4.final定义最终方法,表示该方法不能被覆盖,即子类可以继承但不能重写该方法,称为最终方法。
A.面向对象的最重要的特性是支持继承、封装和多态
B.系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展
C.函数式的语言必然是面向对象的语言
D.面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口
E.过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装
F.Java和C++都是静态类型的面向对象编程语言
解析:
A.response.setHeader(“X-MyHeader”, “34”);
B.response.addHeader(“X-MyHeader”, “34”);
C.response.setHeader(new HttpHeader(“X-MyHeader”, “34”));
D.response.addHeader(new HttpHeader(“X-MyHeader”, “34”));
E.response.addHeader(new ServletHeader(“X-MyHeader”, “34”));
F.response.setHeader(new ServletHeader(“X-MyHeader”, “34”));
解析:
网络编程内容 我还没认真学到那里o(╥﹏╥)o
A.System.out.print (buffer[i]);
B.FileOutputStream fout = new FileOutputStream(this.filename);
C.FileInputStream fin = new FileInputStream(this.filename);
D.System.in.read(buffer)。
解析:
题目已经给出了让表示数组中对应下标的值,所以当然会A啦。
BC都是文件输出输入流,D是标准输入流
if (x>0)
System.out.println("excellent");
else if (x>-3)
System.out.println("good");
else
System.out.println("normal");
A.x > 0
B.x > -3
C.x <= -3
D.-3 < x <= 0
解析:
兄弟们,就是分段函数,自己画个图,很好理解的
public class Test1{//1
public float aMethod(float a,float b){}//2
//3
}//4
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){}
解析:
对于方法重载的考察
重载要点:
首先重载的方法名必须相同
1.形参个数不同;如D与题目方法构成重载
2.形参类型不同;如A与题目方法构成重载
3.形参次序不同;如
public aMethod(float a,int b){}; public aMethod(int a,float b){};
public int aMethod(float a,float b){}
public float aMethod(float b,float a){}
注意:访问权限可以不一样,方法返回类型可以不同,但是这两种情况都不算重载
A.new关键字在生成一个对象时会为对象开辟内存空间
B.new关键字在生成一个对象时会调用类的构造方法
C.new关键字在生成一个对象时会将生成的对象的地址返回
D.Java中只能通过new关键字来生成一个对象
解析:
java中创建对象有以下几种方法:
1.用new语句创建对象,这是最常用的创建对象的方式。
2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
3.调用对象的clone()方法。
4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法.
public class Test1 {
static int cnt = 6;
static {
cnt += 9;
}
public static void main(String[] args) {
System.out.println("cnt =" + cnt);
}
static {
cnt /= 3;
}
}
A.cnt=5
B.cnt=2
C.cnt=3
D.cnt=6
解析:
在JVM调用mian方法之前先用进行静态内容的初始化。顺序为:父类的静态变量和方法,按顺序执行;子类的静态变量和方法,按顺序执行。
A.abstract不能与final并列修饰同一个类
B.abstract 类中不建议有private的成员
C.abstract 方法必须在abstract类或接口中
D.static方法中能直接处理非static的属性
解析:
A.因为抽象类里只有变量和抽象方法的方法头,不能实例化,需要子类来对抽象方法进行具体化即被继承;而final类被称为最终类,不能派生子类,不能被继承,也不能被更改。二者概念相冲突,所以必定不能一起修饰同一个类。
B.可以有private成员,但是一般不建议,因为private成员只能被类本身的对象访问,所以在abstract类中定义private成员不会被他的子类访问到,因此也可以说是无意义。
C.抽象类中必定有抽象方法,有抽象方法的一定是抽象类;接口是一系列抽象方法的集合。
D.静态方法只能调用静态成员变量。但是实例方法可以调用实例变量、静态变量和静态方法。
类加载的时候,static属性比非static先初始化,那么一个存在的总不能访问一个没有存在的吧。
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;
}
A.运行时报错
B.程序正常运行,输出值为5
C.程序正常运行,输出值为10
D.程序正常运行,输出值为15
解析:
有异常,try,catch,finally按顺序执行,最后返回num的值;
无异常,try,finally,最后返回num的值。
显然是第一种情况,有异常。
A.只能包含一个类,类名必须与文件名相同
B.只能包含与文件名相同的类,以及其中的内部类
C.只能有一个与文件名相同的类,可以包含其他类
D.可以包含任意类
解析:
当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转译单元)。每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包括大小写,但不包括文件的后缀名.java)。每个编译单元只能有一个public类,否则编译器就不会接受。如果在该编译单元之中还有额外的类的话,那么在包之外的世界是无法看见这些类的,这是因为它们不是public类,而且它们主要用来为主public类提供支持。 -------《Java 编程思想》
A.用来访问父类被隐藏的非私有成员变量
B.用来调用父类中被重写的方法
C.用来调用父类的构造函数
D.以上都是
解析:
super代表父类对应的对象,所以用super访问在子类中无法直接使用的父类成员和方法
A.在使用final关键字定义的方法里面必须使用final关键字定义变量。
B.使用final关键字定义变量,必须在变量定义的同时给定变量的具体数值,完成变量初始化。
C.final关键字可以用来修饰方法,表明此方法不可以被子类重写。
D.使用final关键字定义变量,必须同时使用static关键字。
解析:
同426
A 选项在 final 定义的方法里,不是必须要用 final 定义变量。
B final 定义的变量,可以在不是必须要在定义的同时完成初始化,也可以在构造方法中完成初始化。
C 正确,final修饰方法,称为最终方法,不可修改,不能被子类重写,但是可以被重载。
D final 定义变量,可以用 static 也可以不用。
A.修饰常量
B.修饰不可被继承的类
C.修饰不可变类
D.修饰不可覆盖的方法
解析:
同426解析
ABD是final的基本修饰类别C选项不理解什么是不可变类
int i;
for(i=2;i<=10;i++){
System.out.println(i);
}
A.2
B.10
C.11
D.不确定
解析:
第一次运行是给i赋初值为2,然后判断是否小于等于10,然后执行代码,再执行i++。第二次判断i++是否小于等于10,满足条件执行代码,再执行i++。如此反复,最后一次肯定是i=10,输出为10,然后执行i++,此时i=11,再判断11是否小于10,不满足,跳出循环。所以i的值为11.
public class HelloB extends HelloA
{
public HelloB()
{
}
{
System.out.println("I’m B class");
}
static
{
System.out.println("static B");
}
public static void main(String[] args)
{
new HelloB();
}
}
class HelloA
{
public HelloA()
{
}
{
System.out.println("I’m A class");
}
static
{
System.out.println("static A");
}
}
A.
static A
I’m A class
static B
I’m B class
B.
I’m A class
I’m B class
static A
static B
C.
static A
static B
I’m A class
I’m B class
D.
I’m A class
static A
I’m B class
static B
解析:
代码块执行顺序:
父类的静态变量和父类的静态代码块(按在代码中的顺序执行)、子类的静态变量和子类的静态代码块(按在代码中的顺序执行)、
父类的构造函数、子类的构造函数。
父类的成员函数、子类的成员函数。
静态域正确的理解是这样的:
并不是静态块最先初始化,而是静态域.而静态域中包含静态变量、静态块和静态方法,其中需要初始化的是静态变量和静态块.而他们两个的初始化顺序是靠他们俩的位置决定的!
A.程序员必须创建一个线程来释放内存
B.内存回收程序负责释放无用内存
C.内存回收程序允许程序员直接释放内存
D.内存回收程序可以在指定的时间释放内存对象
解析:
A.总是采用UTF-8编码
B.总是采用lS08859-1编码
C.由客户端浏览器和Web容器配置共同决定编码
D.由服务器所在的操作系统决定编码
解析:
网络编程 还没学习
Boolean flag = false;
if (flag = true)
{
System.out.println("true");
}
else
{
System.out.println("false");
}
A.The code fails to compile at the “if” statement.
B.An exception is thrown at run-time at the “if” statement.
C.The text“true” is displayed.
D.The text“false”is displayed.
解析:
=是赋值,给flag赋值成true,所以输出为true.
A.Spring是一个支持快速开发Java EE框架的框架
B.Spring中包含一个“依赖注入”模式的实现
C.使用Spring可以实现声明式事务
D.Spring提供了AOP方式的日志系统
解析:
Spring我还没有学啊
public class Base
{
public void methodOne()
{
System.out.print("A");
methodTwo();
}
public void methodTwo()
{
System.out.print("B");
}
}
public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print("C");
}
public void methodTwo()
{
super.methodTwo();
System.out.print("D");
}
}
A.ABDC
B.AB
C.ABCD
D.ABC
解析:
只要是被子类重写的方法,不被super调用都是调用子类方法
A.String
B.byte
C.char
D.Array
解析:
引用类型包括类、接口和数组类型以及特殊的null类型
A.MyWorld
B.parseXML
C.-value
D.&maybe
解析:
标识符的定义:
由数字、字母、下划线、$构成,不能以数字开头,不能用保留字和关键字。
A.InputStreamReader
B.BufferedReader
C.Writer
D.PipedInputStream
解析:
简单地说,字符流是字节流根据字节流所要求的编码集解析获得的
可以理解为字符流=字节流+编码集
所以本题中和字符流有关的类都拥有操作编码集(unicode)的能力。
Integer s=new Integer(9);
Integer t=new Integer(9);
Long u=new Long(9);
Which test would return true?
A.(su)
B.(st)
C.(s.equals(t))
D.(s.equals(9))
E.(s.equals(new Integer(9))
解析:
==比较地址
equals比较内容
s和t都是分别创建的两个对象,地址不同,当然为false啦.
A.优先选用接口,尽量少用抽象类
B.抽象类可以被声明使用,接口不可以被声明使用
C.抽象类和接口都不能被实例化。
D.以上说法都不对
解析:
A选项有待考察 虽然我选对了 ̄□ ̄||
A.private
B.public
C.protected
D.static
解析:
public class Test
{
private int a=10;
int b=20;
static int c=1;
public static void main(String arg[])
{
Test t = new Test();
}
}
A.t.a
B.this.c
C.Test.b
D.t.c
解析:
实例变量只能用对象来调用;类变量可以由类名和对象来调用。
A.对于局部内部类,只有在方法的局部变量被标记为final或局部变量是effctively final的,内部类才能使用它们
B.成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)
C.由于匿名内部类只能用在方法内部,所以匿名内部类的用法与局部内部类是一致的
D.静态内部类可以直接访问外部类的非静态成员
解析:
A.在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
B.super()和this()不一定要放在构造方法内第一行
C.this()和super()可以同时出现在一个构造函数中
D.this()和super()可以在static环境中使用,包括static方法和static语句块
解析:
super和this都只能位于构造器的第一行,而且不能同时使用,这是因为会造成初始化两次,this用于调用重载的构造器,super用于调用父类被子类重写的方法
public class OuterClass{
private float f=1.0f;
//插入代码到这里
}
A.
class InnerClass{
public static float func(){return f;}
}
B.
abstract class InnerClass{
public abstract float func(){}
}
C.
static class InnerClass{
protected static float func(){return f;}
}
D.
public class InnerClass{
static float func(){return f;}
}
解析:
1.静态内部类才可以声明静态方法
2.静态方法不可以使用非静态变量
3.抽象方法不可以有函数体
解析:
抽象类中不一定包括抽象方法,可以有非抽象方法即成员方法。
但是包含抽象方法的类一定是抽象类。
A.void
B.null
C.abstract
D.default
解析:
看了下这题下面的讨论。没有返回值一般说的是构造函数,而返回值为空用的是void。
A.垃圾回收
B.虚拟机
C.代码安全
D.多线程
解析:
线程学习ing
选项A,Java语言中,垃圾回收机制对系统中不使用的内存进行回收,从而使程序员从繁忙的内存管理中解放出来。
选项B,Java编写好的程序首先由编译器转换为标准字节代码,然后由虚拟机执行。虚拟机把字节代码程序与各操作系统和硬件分开,使Java程序独立于平台。
选项C,Java的代码安全检测体现在多个层次上,在编译层、解释层、平台层分别作不同的安全检查。
选项D,多线程是Java程序的并发机制,它能同步共享数、处理不同的事件。
多线程应该是一种实现方式,而不是管理机制的,管理机制作用应该还是落在jvm上面了吧
A.若代码执行到return语句,则将当前值返回,而且继续执行return语句后面的语句。
B.只需要对使用基本数据类型定义的属性使用getter和setter,体现类的封装性。
C.方法的返回值只能是基本数据类型。
D.在同一个类中定义的方法,允许方法名称相同而形参列表不同。
解析:
A.return即结束程序,遇到return就不会执行后面的代码了,但是要考虑特殊的try,catch,finally语句中return。
B.数据域和方法都可以被封装。数据域可以是基本数据类型也可以是引用类型。但不是这么体现的。
C.方法的返回值也可以是引用数据类型
D.这句话说的是方法重载。
A.数组是一个对象
B.数组不是一种原生类
C.数组的大小可以任意改变
D.在Java中,数组存储在堆中连续内存空间里
解析:
选C
A、数组就是一个对象,在堆上分类内存。
B、数组不是原生类,原生类就是基本数据类型
C、数组是定长的
D、数组就是连续内存。
A.stop()
B.paint()
C.init()
D.destroy()
解析:
A.int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象。
B.在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
C.封装的主要作用在于对外隐藏内部实现细节,可以增强程序的安全性
D.final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性。
解析:
final只能修饰常量、方法和类。但不能修饰抽象类,因为被final修饰的类不能被继承,但是抽象类需要作为父类被继承。
A.x[25]存放了数据“\0”。
B.x[24] 存放了数据“\0”。
C.若访问x[25],程序将抛出异常。
D.x[1]访问此数组的第一个元素。
解析:
java数组没有/0,判断结尾时直接以数组长度判断
public class Demo{
public static void main(String args[]){
int num = 10;
System.out.println(test(num));
}
public static int test(int b){
try
{
b += 10;
return b;
}
catch(RuntimeException e)
{
}
catch(Exception e2)
{
}
finally
{
b += 10;
return b;
}
}
}
解析:
如果finally块中有return语句的话,它将覆盖掉函数中其他return语句。
A.System.out.print (buffer[i]);
B.FileOutputStream fout = new FileOutputStream(this.filename);
C.FileInputStream fin = new FileInputStream(this.filename);。
D.System.in.read(buffer)。
解析:
程序的逻辑很简单。程序必须打开两个文件,以可读的方式打开一个已有文件和以可写的方式打开一个新文件,后将已有文件中的内容,暂时存放在内存中,再写入新的文件,后关闭所有文件,程序结束。
根据题意,首先需要读入一个文件中的字符,需要FileInputStream fin = new FileInputStream(this.filename);
A.Set中至多只能有一个空元素
B.List中至多只能有一个空元素
C.List和Set都可以包含重复元素的有序集合
D.List和Set都是有序集合
解析:
java里面讲的有序无序,指的是你按照顺序存进去数据,然后再按照顺序取出来,两者是一样的。比如List(0)我放的是“a”,那么我list.get(0)取出来也是“a”。并不代表我存了打乱顺序存1到10十个数,它会自己给按照升序或者降序给你排好序。
A.session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止
B.request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应
C.application对象:多个application对象实现了用户间数据的共享,可存放全局变量
D.response对象:response对象包含了响应客户请求的有关信息
解析:
public class Example{
String str=new String("tarena");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
//引用类型变量,传递的是地址,属于引用传递。
str="test ok";
ch[0]='g';
}
}
A.tarena and abc
B.tarena and gbc
C.test ok and abc
D.test ok and gbc
解析:
引用自该题目下的讨论。
String str=new String(“tarena”);
语句执行的时候,首先会检查字符串常量池有没有“tarena”,如果没有,就在字符串常量池创建一个“tarena”,然后根据字符串常量池的“tarena”,在堆中创建一个“tarena”对象,这个str指向堆中的“tarena”对象;如果字符串常量池有“tarena”,就直接在堆中创建一个“tarena”对象。
总的来说,就是在堆中有一个str成员变量,指向堆中的一个地址A,地址A中的值是“tarena”。且由于字符串底层是final类型的数组实现,那么这个地址A的值“tarena”是不变的。str的值始终是“tarena”,除非将str指向其他地址。
char[]ch={“a”’,“b”,“c”};
同样,上面语句在堆中创建一个成员变量ch,并创建一个地址B,B中的值是数组的元素:“a”、“b”、“c”,该成员变量ch指向地址B
public void change(String str,char ch[]){
//引用类型变量,传递的是地址,属于引用传递。
str=“test ok”;
ch[0]=“g”;
}
上面语句执行的时候,在栈中创建2个局部变量str、ch,局部变量str被赋予A地址的副本,指向A地址。而局部变量ch被赋予地址B的副本,指向地址B。
当 str=“test ok”; 执行的时候,我们知道地址A的内容是不会变的,那么即使局部变量str指向地址A,它的值变化也不会引起地址A的值变化,而是在栈中开辟一个地址C,地址C的值是“test ok”,局部变量str指向地址C,而成员变量str仍然指向地址A,且值是“tarena”。
当 ch[0]=“g”; 执行的时候,由于地址B的值可变,那么局部变量ch的值的变化,会导致地址B的值的变化,地址B第一个值就从"a"变为"g",因此成员变量ch指向地址B,它的值也变化,为 [“g”,“b”,“c”]
A.public void Example( int m){…}
B.public int example(){…}
C.public void example2(){…}
D.public int example ( int m, float f){…}
解析:
同431
方法重载的考察
方法名相同------------------排除AC选项。
方法的参数类型,参数个不一样。-----------------B选项和题目中的都没有参数,所以排除B选项。
方法的返回类型可以不相同
方法的修饰符可以不相同
A.只对写操作加锁,不对读操作加锁
B.读操作不加锁,采用copyOnWrite的方式实现写操作
C.分区段加锁
D.无法做到
解析:
A,只对写操作加锁,不对读操作加锁,会造成读到脏数据
B,CopyOnWrite的核心思想是利用高并发往往是读多写少的特性,对读操作不加锁,对写操作,先复制一份新的集合,在新的集合上面修改,然后将新集合赋值给旧的引用。这里读写平均,不适用
C,分段加锁,只在影响读写的地方加锁,锁可以用读写锁,可以提高效率
A.true,false,true
B.false,true,false
C.true,true,false
D.false,false,true
解析:
解析:导包只可以导到当前层,不可以再导入包里面的包中的类 。
A.Servlet对象
B.HTTP服务器
C.Web容器
D.JSP网页
解析:
web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器。一个服务器可以多个容器。
A.插入排序
B.快速排序
C.堆排序
D.归并排序
解析:
A.继承Thread类
B.实现Runnable接口
C.实现Thread接口
D.以上都不正确
解析:
1、继承Thread类,Override它的run方法;
2、实现Runnable接口,实现run方法;
由于Java只有单继承,所以,第一种方法只能继承一个Thread;第二种则可以实现多继承。
A.通过子类对父类方法的覆盖实现多态
B.利用重载来实现多态.即在同一个类中定义多个同名的不同方法来实现多态。
C.利用覆盖来实现多态.即在同一个类中定义多个同名的不同方法来实现多态。
D.通过子类对父类方法的重载实现多态
解析:
Java通过方法重写和方法重载实现多态
方法重写是指子类重写了父类的同名方法
方法重载是指在同一个类中,方法的名字相同,但是参数列表不同
A.static
B.package
=C.private
D.public==
解析:
这题只说定义一个类,但是没有说这个类是普通外部类或者内部类。
因为普通类也就是外部类,通过 eclipse 的警告“Illegal modifier for the class Test; only public, abstract & final are permitted” 可知只能用 public, abstract 和 final 修饰。
内部类则可以用 修饰成员变量的修饰符修饰内部类,比如 private, static, protected 修饰。
A.throw关键字可以在方法上声明该方法要抛出的异常。
B.throws用于抛出异常对象。
C.try是用于检测被包住的语句块是否出现异常,如果有异常,则捕获异常,并执行catch语句。
D.finally语句块是不管有没有出现异常都要执行的内容。
E.在try块中不可以抛出异常
解析:
thhrow 是抛出对象例如:throw new RuntimeException() , 而throws是在方法后面抛出异常
A.原子性
B.有序性
C.可见性
D.持久性
解析:
synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性
A.隐藏细节
B.提高可重用性
C.扩展代码模块
D.提高编译可靠性
A.程序计算器
B.方法区
C.java虚拟机栈
D.java堆
解析:
私有:java虚拟机栈,程序计数器,本地方法栈 共享:java堆,方法区
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.print(names.get(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();
}
}
}
A.运行的时候可能抛异常
B.运行的时候可能没有输出,也没有正常退出
C.代码运行的时候可能没有输出,但是正常退出
D.代码输出"A B A B C C "
E.代码输出"A B C A B C A B C "
F.代码输出"A A A B C A B C C "
G.代码输出"A B C A A B C A B C "
解析:
线程问题
A.HashMap
B.StringBuffer
C.String
D.Hashtable
解析:
通过阅读源码可以知道,string与stringbuffer都是通过字符数组实现的。
其中string的字符数组是final修饰的,所以字符数组不可以修改。
stringbuffer的字符数组没有final修饰,所以字符数组可以修改。
string与stringbuffer都是final修饰,只是限制他们所存储的引用地址不可修改。
至于地址所指内容能不能修改,则需要看字符数组可不可以修改。
A.init()
B.stop()
C.opreationcrawl()
D.reader()
解析:
Applet 是一种在 Web 环境下,运行于客户端的Java程序组件。Applet 必须运行于某个特定的“容器”,这个容器可以是浏览器本身,也可以是通过各种插件,或者包括支持 Applet 的移动设备在内的其他各种程序来运行。与一般的Java应用程序不同,Applet 不是通过 main 方法来运行的。Applet运行之前,先调用 Init() 方法,然后调用 start() 方法,最后调用 paint() 方法。
A.JTextField b = new JTextField(“开始”);
B.JLabel b = new JLabel(“开始”);
C.JCheckbox b = new JCheckbox(“开始”);
D.JButton b = new JButton(“开始”);
解析:
英语题
1.
2.public class A{
3.//do sth
4. }
A.public class MainClass{ }
B.package mine;
C.class ANotherClass{ }
D.import java.util.*;
解析:
一个程序里只能有一个public类。
public class Test{
public static void main(String [] args){
List list=new ArrayList();
list.add("a");
list.add("b");
list.add("a");
Set set=new HashSet();
set.add("a");
set.add("b");
set.add("a");
System.out.println(list.size()+","+set.size());
}
}
请问运行主要的程序会打印出的是什么()
A.2,2
B.2,3
C.3,2
D.3,3
解析:
1、List和Set的区别,set中不能放重复的
2、Set中重复的定义,未定义自己的equels方法的话,调用默认的,也就是直接==
A.java.io
B.java.sql
C.java.awt
D.java.rmi
解析:
图形用户界面(Graphical User Interface,简称 GUI)是指采用图形方式显示的计算机操作用户界面。
java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。
java.sql 提供使用 Java 编程语言访问并处理存储在数据源中的数据的 API。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。
java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类。功能:包含用于创建用户界面和绘制图形图像的所有类。
java.rmi 提供 RMI 包。RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。
A.在接口中定义的方法除了default和static关键字修饰的方法拥有方法体,其他方法都应是没有方法体的抽象方法(JDK1.8以后)
B.一个java类只能有一个父类,但可以实现多个接口
C.在类声明中,用implements关键字声明该类实现的接口
D.定义接口时使用implements关键字。
解析:
定义接口用关键字interface;实现接口用关键字implements
A.233
B.223
C.221
D.222
解析:
i++是先输出i再++
A.try
B.catch
C.throw
D.throws
解析:
try{
}catch(){
}finally{
}
finally不管是否有异常都会执行,而且,try可以和catch和finally中的一个搭配使用,但是catch和finally不能单独使用
public class ZeroTest {
public static void main(String[] args) {
try{
int i = 100 / 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
throw new RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
A.3
B.123
C.1
D.12
解析:
1、inti = 100/ 0; 会出现异常,会抛出异常,System.out.print(i)不会执行,
2、catch捕捉异常,继续执行System.out.print(1);
3、throw则是将异常抛给它的上一级处理,程序便不往下执行了。
4.无论如何finnaly一定会执行。
解析:静态方法中不能调用对象的变量,因为静态方法在类加载时就初始化,对象变量需要在新建对象后才能使用
A.通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。
B.他们都可以实现了多线程运行。
C.run方法是thread的一个普通方法调用。
D.调用start方法后,一旦得到cpu时间片,就开始执行run()方法。
解析:
1.start方法
用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法。但要注意的是,此时无需等待run()方法执行完毕,即可继续执行下面的代码。所以run()方法并没有实现多线程。
2.run方法
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。
解析:Thread.sleep() 和 Object.wait(),都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception)
A.在静态方法中可用this来调用本类的类方法
B.在静态方法中调用本类的静态方法时可直接调用
C.在静态方法中只能调用本类中的静态方法
D.在静态方法中绝对不能调用实例方法
解析:
A.静态成员随类的加载而加载,这个时候对象都还没有,this代表当前对象,所以this不能用于static方法中.C还可以调用静态变量D.可以通过对象.进行调用
class HasStatic{
private static int x = 100;
public static void main(String args[ ]){
HasStatic hs1 = new HasStatic();
hs1.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hs1=new HasStatic();
hs1.x++;
HasStatic.x--;
System.out.println( "x=" +x);
}
}
A.5行不能通过编译,因为引用了私有静态变量
B.10行不能通过编译,因为x是私有静态变量
C.程序通过编译,输出结果为:x=103
D.程序通过编译,输出结果为:x=102
解析:
答案选D
因为x的 修饰符为 static 所以x为类变量,即对于所有的实例来说,他们访问的x为同一个x,类变量存储在方法区,不属于每个实例的私有,
刚开始x=100
调用hs1.x++ x为101;
调用hs2.x++ x为102;
调用hs1.x++ x为103 (此时hs1指向了一个新的HasStatic实例,但是依然访问的是同一个X)
调用HasStatic.x-- x为102
所以结果为D
A a0=new A();
A a1 =new B();
A a2=new C();
A.第1行不能通过编译
B.第1、2行能通过编译,但第3行编译出错
C.第1、2、3行能通过编译,但第2、3行运行时出错
D.第1行、第2行和第3行的声明都是正确的
解析:
抽象类和接口都不能被实例化。但抽象类有构造方法,而接口没有。
A.while(int i<7){i++;System.out.println("i is "+i);}
B.int j=3;while(j){ System.out.println("j is "+j);}
C.int j=0;for(int k=0;j+k!=10;j++,k++){System.out.println("j is "+j+“k is” +k);}
D.int j=0; do{System.out.println("j is "+j++);if(j==3){continue loop;}}while(j<10);
A.synchronized关键字
B.volatile关键字
C.Lock类
D.transient关键字
A.LinkedHashSet
B.TreeSet
C.HashSet
D.AbstractSet
解析:
package Test;
public class Test {
private static void test(int[] arr) {
for (int i = 0; i < arr.length; i++) {
try {
if (arr[i] % 2 == 0) {
throw new NullPointerException();
} else {
System.out.print(i);
}
} finally {
System.out.print("e");
}
}
}
public static void main(String[]args) {
try {
test(new int[] {0, 1, 2, 3, 4, 5});
} catch (Exception e) {
System.out.print("E");
}
}
}
A.编译出错
B.eE
C.Ee
D.eE1eE3eE5
E.Ee1Ee3Ee5
解析:
由于arr[0] =0,所以在进入 test()方法里面会在第一个if 上抛出一个 NullPointerException,接着会执行 finally 的语句, (finally语句先于 return 和 throw语句执行),输出一个’e,然后回到 main方法中,由于捕捉到异常,所以进入到catch语句中,然后打印一个’E’,所以最终结果为"eE"
A.两个或一个都有可能
B.两个
C.一个
D.三个
解析:
如果常量池没有,就会在常量池创建一个xyz字符串,然后执行new,在堆中再创建一个字符串;
如果常量池有,就会根据常量池中的xyz字符串,在堆中new一个新的字符串。
另外,字符串常量池在jdk1.7之后,也是存在于堆区。且常量池中保存的只是字符串的引用,实际上我们所说的常量池中的字符串,也是在堆中创建,但是他的引用在常量池中。
A.ConcurrentHashMap使用synchronized关键字保证线程安全
B.HashMap实现了Collction接口
C.Array.asList方法返回java.util.ArrayList对象
D.SimpleDateFormat是线程不安全的
解析:
A.CountDownLatch
B.CyclicBarrier
C.Semaphore
D.Future
A.result=1
B.result=true;
C.if(result!=0) {//so something…}
D.if(result) {//do something…}
解析:
1、boolean类型只有两个直接量值:true和false.
2、除成员变量会有默认初始值外,其他变量必须在第一次使用之前初始化
A.HashSet 它是线程安全的,不允许存储相同的对象
B.ConcurrentHashMap 它是线程安全的,其中存储的键对象可以重复,值对象不能重复
C.Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用
D.ArrayList线程安全的,允许存放重复对象
解析:
HashSet和ArrayList一样线程不安全,ConcurrentHashMap键不能重复,值可以重复
A.new java.util.Map().put(“key” , “value”) ;
B.new java.util.SortedMap().put(“key” , “value”) ;
C.new java.util.HashMap().put( null , null ) ;
D.new java.util.TreeMap().put( 0 , null ) ;
解析:
A.ThreadLocal继承自Thread
B.ThreadLocal实现了Runnable接口
C.ThreadLocal重要作用在于多线程间的数据共享
D.ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本
E.ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏
解析:
错
解析:
public class Father {
public void say(){
System.out.println("father");
}
public static void action(){
System.out.println("爸爸打儿子!");
}
}
public class Son extends Father{
public void say() {
System.out.println("son");
}
public static void action(){
System.out.println("打打!");
}
public static void main(String[] args) {
Father f=new Son();
f.say();
f.action();
}
}
/*
输出:son
爸爸打儿子!
*/
当调用say方法执行的是Son的方法,也就是重写的say方法。
而当调用action方法时,执行的是father的方法。
普通方法,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法;
静态方法,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法
A、匿名内部类可以继承一个基类,不可以实现一个接口
B、匿名内部类不可以定义构造器
C、匿名内部类不能用于实参
D、以上说法都不正确
解析:
匿名内部类的创建格式为:
new 父类构造器(参数列表)|实现接口(){
//匿名内部类的类体实现
}
1.使用匿名内部类时,必须继承一个类或实现一个接口
2.匿名内部类由于没有名字,因此不能定义构造函数
3.匿名内部类中不能含有静态成员变量和静态方法
4.匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5.匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
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);
}
}
A、编译正确,输出”It is a account type”once followed by”FIXED”
B、编译正确,输出”It is a account type”twice followed by”FIXED”
C、编译正确,输出”It is a account type”thrice followed by”FIXED”
D、编译正确,输出”It is a account type”four times followed by”FIXED”
解析:
public class Base
{
public void methodOne()
{
System.out.print("A");
methodTwo();
}
public void methodTwo()
{
System.out.print("B");
}
}
public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print("C");
}
public void methodTwo()
{
super.methodTwo();
System.out.print("D");
}
}
ABDC
解析:
Java的多态调用,父类继承子类,本题中子类重写了父类的所有方法。所以在b.methodOne()调用的是子类Derived的methodOne()方法,它里面调用了父类的methodOne(),而父类的methodOne()方法中
public void methodOne()
{
System.out.print("A");
methodTwo();
}
methodTwo();此时调用的就是子类的方法;子类的方法因而再调用父类methodTwo();所以最后的输出是ADBC
。
A、BufferedWriter
B、FileInputStream
C、ObjectInputStream
D、InputStreamReader