Java基础题(三)

  • Post author:
  • Post category:java



1. 有以下程序片段,下列哪个选项不能插入到第一行 。(A )。

1.
2.public  class  A{
3.//do sth
4. }

A.public class MainClass{ }

B. package mine;

C. class ANotherClass{ }

D. import java.util.*;


解析:


Java一个源程序只能有一个public类存在,且类名与文件名相同。Java程序是从main方法开始执行的,public为类加载器提供入口,然后找到public类中的main方法开始执行。如果存在多个public类,程序将不知道该从哪里执行。

注意,内部类可以是public的,因为内部类是作为外部类的成员存在的。


2. jvm堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区)。

常量池属于 PermGen(方法区)


3. 已知有下列Test类的说明,则下列哪个语句是正确的?(A)

public class Test
{
private float f = 1.0f;
int m = 12;
static int n = 1;
public static void main (String args[])
{
Test t = new Test();
}
}

A.t.f;

B. this.n;

C. Test.m

D. Test.f


解析:


B项错误:this不能在static的方法中使用,this是指向对象的的引用,而静态方法在类加载的时候创建加载,此时没有创建对象。

C,D项错误:m 和 f 都是普通成员属性,而 “类名.” 方式只能调用 静态成员属性。


4. 关于如下程序的描述哪个是正确的?(C )

public class Person{
static int arr[] = new int[5];
public static void main(String a[]){
System.out.println(arr[0]);
}
}

A.编译将产生错误

B.编译时正确,但运行时将产生错误

C.正确,输出0

D.正确,输出 null


解析:


类的成员变量会被默认初始化.

char[] ch = new char[3];//默认空格

int [] Int = new int[2];//默认0

String[] strings = new String[2];//默认null


5. 下列代码执行结果为()

public static void main(String args[])throws InterruptedException{
            Thread t=new Thread(new Runnable() {
                public void run() {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    System.out.print("2");
                }
            });
            t.start();
             
            t.join();
            System.out.print("1");
        }

A. 21

B.12

C. 可能为12,也可能为21

D. 以上答案都不对


解析:


因为子线程的休眠时间太长,因此主线程很有可能在子线程之前结束也就是输出结果是12,但是子线程用了join函数,因此主线程必须等待子线程执行完毕才结束因此输出结果只能是21


6. 给出以下代码,请给出结果.(B)

class Two{
    Byte x;
}
class PassO{
    public static void main(String[] args){
        PassO p=new PassO();
        p.start();
    }
    void start(){
        Two t=new Two();
        System.out.print(t.x+””);
        Two t2=fix(t);
        System.out.print(t.x+” ” +t2.x);
    }
    Two fix(Two tt){
        tt.x=42;
        return tt;
    }
}

A. null null 42

B. null 42 42

C. 0 0 42

D. 0 42 42

E. An exception is thrown at runtime

F. Compilation


解析:基本类型初始化是0,包装类型初始化是null


7. java 1.8开始支持接口中定义静态方法


9. 以下程序段的输出结果为:

public class EqualsMethod
{
    public static void main(String[] args)
    {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.print(n1 == n2);
        System.out.print(",");
        System.out.println(n1 != n2);
    }
}

A. false,false

B. false,true

C. true,false

D. true,true


解析:


使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,作为基本类型。

使用Integer a = new Integer(1); 时,无论值是多少,都作为对象。

  1. 有如下一段程序:请问最后打印出来的是什么?(B)

    public class Test{


    private static int i=1;

    public int getNext(){


    return i++;

    }

    public static void main(String [] args){


    Test test=new Test();

    Test testObject=new Test();

    test.getNext();

    testObject.getNext();

    System.out.println(testObject.getNext());

    }

    }

A.2

B.3

C.4

D.5


解析:


本题考察两个知识点static属性和i++操作

点1:因为i是static的,是类属性,所以不管有多少对象,都共用的一个变量,这里getNext()方法被调用了三次,所以进行了三次i++操作

点2:i++是先用后加的,即return i++;最后返回3,i的值实际为4.


11. Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。


12. 以下哪个式子有可能在某个进制下成立(A)?


A. 13

14=204

B. 12

34=568

C. 14*14=140

D. 1+1=3


解析:


设x表示x进制。

13

14=204

=>(1

x

1+3*x

0)

(1

x

1+4*x

0) = 2*x

2+4*x

0

=>(x+3)(x+4)=2x^2+4

=>x^2-7x-8=0

=>(x-8)(x+1)=0

=> x=8或者x=-1

1、抽象类可以有构造,只不过不能new。

2、接口中可以有变量,但是无论你怎么写,最后都是public static final的。

3、抽象类中可以有静态方法,接口中也可以有。

扩展:

1、接口中可以有非抽象的方法,比如default方法(Java 1.8)。

2、接口中可以有带方法体的方法。(Java 1.8)

3、接口中的方法默认是public的。

1、abstract类不能用来创建abstract类的对象;

2、final类不能用来派生子类,因为用final修饰的类不能被继承;

3、final不能与abstract同时修饰一个类,abstract类就是被用来继承的;

4、类中有abstract方法必须用abstract修饰,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。


15. Spring依赖注入(DI)的三种方式,分别为:


1. 接口注入

2. Setter 方法注入

3. 构造方法注入


16. 下面程序的输出是:()


String x=“fmn”;

x.toUpperCase();

String y=x.replace(‘f’,‘F’);

y=y+“wxy”;

System.out.println(y);

A. FmNwxy

B. fmnwxy

C. wxyfmn

D. Fmnwxy


解析:


本题主要考察String对象的不可变性

String x=“fmn”; “fmn”是在常量池里的不可变对象。

x.toUpperCase(); 在堆中new一个”FMN”对象,但无任何引用指向它。

String y=x.replace(‘f’,‘F’); 在堆中 new一个”Fmn”对象,y指向它。

y=y+“wxy”; 在堆中 重新new一个”Fmnwxy”对象, 修改y指向,现在y指向它。

  1. static不可以修饰非static的属性,因为类加载的时候,static属性比非static先初始化,那么一个存在的总不能访问一个没有存在的.

  2. 如何放掉一个指定占据的内存空间?(D)

    A. 调用free()方法

    B. 代用system.gc()方法

    C. 赋值给该项对象的引用为null

    D. 程序员无法明确强制垃圾回收器运行


解析:


释放掉占据的内存空间是由gc完成,但是程序员无法明确强制其运行,该空间在不被引用的时候不一定会立即被释放,这取决于GC本身,无法由程序员通过代码控制。


19. 以下哪项不属于java类加载过程?()


A. 生成java.lang.Class对象

B. int类型对象成员变量赋予默认值

C. 执行static块代码

D. 类方法解析


解析:


不应该选D,而应该选B

类的加载包括:加载,验证,准备,解析,初始化。

选项A:生成java.lang.Class对象是在加载时进行的。生成Class对象作为方法区这个类的各种数据的访问入口。

选项B:既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。

选项C:这个会调用。可以用反射试验。

选项D:类方法解析发生在解析过程。


20. Java反射机制主要提供了以下功能:


1.在运行时判断任意一个对象所属的类;

2.在运行时构造任意一个类的对象;

3.在运行时判断任意一个类所具有的成员变量和方法;

4.在运行时调用任意一个对象的方法;

5.生成动态代理。


21. 常用的servlet包的名称是?javax.servlet, javax.servlet.http


22. 下面几个关于Java里queue的说法哪些是正确的(AC)?


A. LinkedBlockingQueue是一个可选有界队列,不允许null值

B. PriorityQueue,LinkedBlockingQueue都是线程不安全的

C. PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))

D. PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原则


解析:


A、LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。

B、LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。

C、PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))。

D、PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,该队列的元素遵循FIFO原则。



版权声明:本文为Makasa原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。