JAVA--高级基础开发

JavaSE软件工程师认证考试试卷java

 

1、    填空题(共20个题目,总计20分)c++

 

  1. 使用Java开发应用程序包括编写源程序,编译源程序,解释并运行三个步骤,其中Java源程序编译后生成的字节码文件的扩展名为      .class          
  2. 在Java中,浮点型变量的类型有float和double两种,对于float型变量,内存分配4个字节,对于double型变量,内存分配         个字节。
  3. 在Java JDK1.7以前,switch只能支持byte、short、char、int或者其对应的封装类以及Enum类型。在JDK1.7中又加入了  String          类型。
  4. 在循环结构中,若是想跳出循环体,结束整个循环结构可使用    break     语句。
  5. 类是组成Java程序的基本要素,类体有两部分构成:一部分是变量的定义,另外一部分是    方法      的定义。
  6.     方法的重载        是指在一个类中能够有多个方法具备相同的名字,但这些方法的参数类型、个数、顺序必须不一样,与方法的返回值和访问修饰符无关。
  7.      import        关键字做为Java源文件的第一条非注释性语句,指明该源文件定义的类全部的包。
  8. 在Java中若是一个类中没有显示使用extends关键字标明这个类继承自哪一个类,那么这个类就默认是      Object         的子类。
  9. 声明数组仅仅是给出了数组的名字和元素的数据类型,要想真正地使用数组还必须使用   new       关键字在堆内存中分配内存空间。
  10. 在Java中有二维数组int [ ] [ ] array={{1,2,3},{4,5}} ,可使用     length   获得二维数组中第二维中第一个数组的长度。
  11. 在Java中使用java.lang包中的    String      类来建立一个字符串对象,它表明一个字符序列可变的字符串,能够经过相应的方法改变这个字符串对象的字符序列。
  12. 在Java中每一个Java基本类型在java.lang包中都在一个相应的包装类,把基本类型数据转换为对象,其中包装类Integer是 Number  Object      的直接子类。
  13. 对于一个已经不被任何引用变量引用的对象,当垃圾回收器准备回收该对象所占用的内存时,将自动调用该对象的     finalize()     方法。
  14. finalize():当垃圾收集肯定再也不有对该对象的引用时,垃圾收集器在对象上调用该对象。
  15. Math类提供了许多数学运算的静态方法,其中 Random()  方法是用来生成随机数的方法,其返回类型是double类型。
  16. 在Java中对于程序可能出现的检查时异常,要么用try…catch语句捕获并处理它,要么使用   new  throws  异常类型         语句抛出它,由上一级调用者来处理。Throws  异常类型
  17. read方法从输入流中顺序读取源中的单个字节数据,该方法返回字节值(0-255之间的一个整数),若是到达源的末尾,该方法返回  -1        
  18. 在Java中编写实现多线程应用有两种途径:一种是继承Thread类建立线程,另外一种是实现    Runnable          接口建立线程。
  19.    链表    结构是一种由多个节点组成的数据结构,而且每一个节点包含有数据以及指向下一个节点的引用。
  20. 在Java Socket网络编程中,开发基于TCP协议的服务器端程序使用的套接字是    ServerSocket          

 

 

2、    选择题(共25个题目,总计25分)编程

 

1)数组

在Java中,源文件Test.java中包含以下代码,则程序编译运行的结果是(A   )。(选择一项)安全

 

public class Test {服务器

         public static void main(String[ ] args) {网络

                  system.out.println("Hello!");数据结构

         }多线程

}框架

 

 

 

 

A

输出:Hello!

 

B.

编译出错,提示“没法解析system”

 

C.

运行正常,但没有输出任何内容

 

D.

运行时出现异常

 

2)

在Java中,下面( AB  )语句能正确经过编译。(选择两项)

 

 

 

 

A

System.out.println(1+1);     

 

B.

char i =2+'2';

System.out.println(i); 52------对应的ASCII码是4

 

C.

String s="on"+'one';

 

D.

int b=255.0;

 

3)

分析以下Java代码,编译运行的输出结果是( A   )。(选择一项)

 

public static void main(String[ ] args) {

                  boolean a=true;

                  boolean b=false;

                  if (!(a&&b)) {

                          System.out.print("!(a&&b)");

                  }else if (!(a||b)) {

                          System.out.println("!(a||b)");

                  }else {

                          System.out.println("ab");

                  }

}

 

 

 

 

A

!(a&&b)

 

B.

!(a||b)

 

C.

ab

 

D.

!(a||b)ab

 

 

 

 

 

 

4)

在Java中有以下代码,则编译运行该类的输出结果是( D  )。(选择一项)

 

public static void main(String[ ] args) {

                  for(int i=0;i<10;i++){

                          if (i%2!=0)

                                   return;

                          System.out.print(i);

                  }

}

 

 

 

 

A

13578

 

B.

02468

 

C.

0123456789

 

D.

0

 

5)

在Java的程序类中以下方法定义正确的是( AD  )。(选择两项)

 

 

 

 

A

public int ufTest(int num){

                  int sum=num+100;

                  return sum;

}

 

B.

public String ufTest(int num){

                  int sum=num+100;

                  return sum;

}

 

C.

public void ufTest(int num){

                  int sum=num+100;

                  return sum;

}

 

D.

public float ufTest(int num){

                  int sum=num+100;

                  return sum;

}

 

6)

分析下面的Java源程序,编译后的运行结果是(   B )。(选择一项)

 

import java.util.*;

public class Test {

         public static void main(String[ ] args) {

                  int [ ] numbers=new int[ ]{1,2,3};

     返回该数组对应的指定的索引

                  System.out.println(Arrays.binarySearch(numbers, 2));

         }

}

 

 

输出

 

A

输出:0

 

B.

输出:1

 

C.

输出:2

 

D.

输出:3

 

 

7)

分析以下Java程序的代码所示,则编译运行后的输出结果是( C )。(选择一项)

 

public class Test {

         int count=9;                                               

         public void count1(){

                  count=10;

                  System.out.println("count1="+count);

         }

         public void count2(){

                  System.out.println("count2="+count);

         }

         public static void main(String[ ] args) {

                  Test t=new Test();

                  t.count1();

                  t.count2();

         }

}

 

 

 

 

A

count1=9;

count2=9;

 

B.

count1=10;

count2=9;

 

C.

count1=10;

count2=10  c成员变量在整个类中使用。

 

D.

count1=9;

count2=10;

 

8)

在Java中,如下定义数组的语句正确的是( CD   )。(选择两项)

 

 

 

 

A

int  t[10]=new int[ ];

 

B.

char [ ]a=”hello”; 

 

C.

String [ ] s=new String [10];

 

D.

double[ ] d [ ]=new double [4][ ]; 

 

9)

分析以下Java代码,该程序编译后的运行结果是( D   )。(选择一项)

 

public static void main(String[ ] args) {

                  String str=null;

Null就表名空指针,不在指向任何东西则会抛出NullPointerException

                  str.concat("abc");

                  str.concat("def");

                  System.out.println(str);

         }

 

 

 

 

A

null

 

B.

abcdef

 

C.

编译错误

 

D.

运行时出现NullPointerException异常

 

 

10)

给定以下Java代码,编译运行后,输出结果是( CD  )。(选择一项)

 

public class Test {

         public static void main(String[ ] args) {

                  StringBuffer a=new StringBuffer("A");

                  StringBuffer b=new StringBuffer("B");

                  operate(a, b);

                  System.out.println(a+","+b);

         }

         static void operate(StringBuffer x,StringBuffer y){

                  x=new StringBuffer("BBB");

                  y=x;

         }

}

 

 

 

 

A

BBB,B

 

B.

BBB,BBB

 

C.

A,B

 

D.

A,A

 

11)

给定以下Java程序,Test类中的四个输出语句输出结果依次是( C   )。(选择一项)

 

class Person {

         String name="person";

         public void shout(){

                  System.out.println(name);

         }

}

class Student extends Person{

         String name="student";

         String school="school";

}

public class Test {

         public static void main(String[ ] args) {

                  Person p=new Student();

                  System.out.println(p instanceof Student);

                  System.out.println(p instanceof Person);

                  System.out.println(p instanceof Object);;

                  System.out.println(p instanceof System);

         }

}

 

 

 

 

A

true,false,true,false

 

B.

false,true,false,false

 

C.

true,true,true,编译错误

 

D.

true,true,false,编译错误

 

12)

 

在Java中,LinkedList类与ArrayList类同属于集合框架类,下列(CD   )选项中是LinkedList类有而ArrayList类没有的方法。(选择两项)

 

 

 

 

A

add(Object o)

 

B.

add(int index,Object o)

 

C.

getFirst()

 

D.

removeLast()

         

 

13)

以下Java代码,输出的运行结果是(  )。(选择一项)

 

public class Test {

         public static void main(String[ ] args) {

                  List<String> list=new ArrayList<String>();

                  list.add("str1");

                  list.add(2, "str2");

                  String s=list.get(1);

                  System.out.println(s);

         }

}

 

 

 

 

A

运行时出现异常

 

B.

正确运行,输出str1

 

C.

正确运行,输出str2

 

D.

编译时出现异常

 

14)

在Java中关于静态方法,如下说法中正确的是( AC )。(选择两项)

 

 

 

 

A

静态方法中不能直接调用非静态方法——》对,经过建立对象的形式

 

B.

非静态方法中不能直接调用静态方法 è错,能够访问

 

C.

静态方法能够用类名直接调用  对

 

D.

静态方法里可使用this super

 

15)

以下Java代码运行的结果是(  B  )。(选择一项)

 

public class Test {

         final int age;

         public Test(){

                  age=10;

         }

         public static void main(String[ ] args) {

                  System.out.println(new Test().age);

         }

}

 

 

 

 

A

输出:0

 

B.

输出:10

 

C.

输出:null

 

D.

运行时出现异常

 

 

 

16)

在Java中关于abstract关键字,如下说法正确的是(   AB。(选择两项)

 

 

 

 

A

abstract类中能够没有抽象方法

 

B.

abstract类的子类也能够是抽象类 

 

C.

abstract方法能够有方法体

 

D.

abstract类能够建立对象

 

17)

在Java中,下列关于读写文件的描述错误的是( B   )。(选择一项)

 

 

 

 

A

Reader类的read()方法用来从源中读取一个字符的数据

 

B.

Reader类的read(int n )方法用来从源中读取一个字符的数据

 

C.

Writer类的write(int n)方法用来向输出流写入单个字符

 

D.

Writer类的write(String str)方法用来向输出流写入一个字符串

 

18)

分析以下Java代码,有标注的四行代码中,有错误的是第(  D  )处。(选择一项)

 

import java.io.FileWriter;

import java.io.IOException;

public class Test {

         public static void main(String[ ] args) {

                  String str = "Hello World";

                  FileWriter fw = null;

                  try {

                          fw = new FileWriter("c:\\hello.txt"); // 1

                          fw.write(str);                     // 2

                  } catch (IOException e) {

                          e.printStackTrace();                // 3

                  } finally {

                          fw.close();                        // 4

                  }

         }

}

 

 

 

 

A

1

 

B.

2

 

C.

3

 

D.

4

 

19)

在Java的IO操做中,(   D   )方法能够用来刷新流的缓冲。(选择两项)

 

 

 

 

A

void release()

 

B.

void close()

 

C.

void remove()

 

D.

void flush()

 

 

 

 

 

20)

下列关于线程的优先级说法中,正确的是(  BC   )。(选择两项)

 

 

 

 

A

线程的优先级是不能改变的

 

B.

线程的优先级是在建立线程时设置的

 

C.

在建立线程后的任什么时候候均可以从新设置

 

D.

线程的优先级的范围在1-100之间   1—10 之间

 线程的优先级在建立线程时能够设置,也能够经过getPriority()方法来得到线程的优先级,经过setPriority()方法来设定线程的优先级。线程的优先级属于考试重、

21)

下列关于Java线程的说法正确的是( B    )。(选择一项)

 

 

 一个虚拟的CPU。(2)该CPU执行的代码。(3)代码所操做的数据

 

A

每个Java线程能够当作由代码、一个真实的CPU以及数据三部分组成

 

B.

建立线程的两种方法中,从Thread类中继承的建立方式能够防止出现多父类的问题

 

C.

Thread类属于java.util程序包  lang

 

D.

使用new Thread(new X()).run();方法启动一个线程  start()

 

22)

在Java网络编程中,使用客户端套接字Socket建立对象时,须要指定(    )。(选择一项)

 

 

 

 

A

服务器主机名称和端口

 

B.

服务器端口和文件

 

C.

服务器名称和文件

 

D.

服务器地址和文件

 

23)

在Java的反射中关于代理说法正确的是(     )。(选择两项)

 

 

 

 

A

动态代理类与静态代理类同样,必须由开发人员编写源代码,并进行编译

 

B.

代理类与被代理类具备一样的接口

 

C.

动态代理是public、final和abstract类型的

 

D.

java.lang.reflect包中的Proxy类提供了建立动态代理类的方法

 

 

3、    判断题(共20个题目,总计10分,正确√,错误×)

 

  1. Java语言是一种面向对象的语言,具备较好的安全性和可移植性及与平台无关等特性。( × )
  2. 假设有一个Java源程序文件,它只定义了一个具备public属性的类Hello,那么编译该文件的命令是“javac Hello”。(  ×  )javac  类名.java
  3. 在编译Java源程序时,计算机根本不会去识别各个变量名的具体含义,所以命名规范对编写Java程序而言不是必要的,并且有可能会下降编写Java源程序的效率。(×    )
  4. 在Java中任何一个子类的构造方法都必须调用其父类的构造方法(包括隐式调用),而且调用父类的构造方法的语句必须是子类构造方法的第一条语句。(   √  )
  5. Java语言为全部的Java程序自动导入包“java.lang”,所以Java程序能够直接用“java.lang”中的类和接口。(√    )
  6. Java中的类不容许多重继承,但接口支持多重继承。( 对  )。,单继承
  7. 父类Person中定义了一个private void show()的方法,那么子类要重写这个方法时,方法的访问修饰符能够是默认的,protected或public。(  √  )只能大 ,不能
  8. 抽象方法不能含有方法体,而且必须定义在抽象类中。(  × )
  9. 构造方法用于建立对象,通常不容许有任何返回值,所以须要在构造方法返回类型处标注为void。( ×   )
  10. 在Java中对象能够赋值,只要使用赋值运算符便可,至关于生成了一个各属性与赋值对象相同的新对象。(  ×  ),对象仍是不变。
  11. Java容许建立不规则数组,即Java多维数组中各行的列数能够不一样。(√   )
  12. 在Java异常处理中可使用多个catch子句,此时应将异常类的父类Exception放到第一个catch子中。( ×    )
  13. 与未加访问控制符的缺省状况相比,public和protected修饰符扩大了类及其属性和方法的被访问范围,private修饰符则缩小了这种范围。(   √ )
  14. 泛型是JavaSE1.7(1.5)的新特性,泛型的本质(是容器元素类型的一种约束,指定容器内的全部元素都是同一种类型)是参数化类型,也就是说所操做的数据类型被指定为一个参数。Java语言引入泛型的好处是安全简单。(×   )
  15. List是有序的Collection,使用此接口可以精确的控制每一个元素插入的位置。用户可以使用索引来访问List中的无素,这相似于Java的数组。( √   )
  16. 在使用File类中的delete()方法时,删除时可能文件不存在,因此咱们最好先判断一下是否存在,否则会出现NullPointerException异常。( √   )
  17. 当一个线程进入一个对象的一个synchronized方法后,其它线程不能够再进入该对象的其它方法执行。(  ×   )
  18. TCP/IP传输控制协议是Internet的主要协议,定义了计算机和外设进行通讯的规则。TCP/IP网络参考模型包括七个层次:应用层、会话层、表示层、传输层、网络层、链路层和物理层。(     )
  19. Java反射机制是指:Java程序能够加载一个运行时才得知名称的类,获悉其完整结构信息(但不包括methods定义),并生成其对象实体、或对其fields设值、或调用其methods。(    ) 

 

4、    简答题(共5个题目,总计25分)

  1. Java异常处理中,关键字try、catch、finally、throw、throws分别表明什么含义?(5分)

    答:   try…catch: 进行异常的捕获。try :该代码块中编写可能产生异常的代码。Catch:实现对某种异常的捕获。来处理异常

:  finally:有一些特定的代码,不管是否发生异常,都须要去处理,则放在finally里中的代码,是必定会被执行到的。

答:throw: 用来抛出一个异常类对象,应用在方法体中。

答: throws: 用来声明一个异常,应用在方法签名的后面,关键字throws 用于方法上来声明一个异常,用于表示当前的方法不处理异常,而是提醒该方法的调用者来处理异常。

 

  1. 请你简述sleep( )和wait( )有什么区别?(5分)

答:sleep方法,能够强制当前执行的线程休眠,以减慢线程,当咱们调用sleep方法时 就进入了休眠状态。(计时等待),Wait方法: 一个线程在等待另外一个线程执行一个动做时,该线程进入Waiting状态,进入该状态是不能本身唤醒的,必须等待另外一个线程调用notify关键字来唤醒。

2 请你简述HashMap和Hashtable的区别?(5分)

答: HashMap和Hashtable都实现了Map接口,HashMap:此集合中存储的数据是无序且不重复的, HashMap能够接受为null的键值(key)和值(value),而Hashtable则不行

2HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程能够共享一个Hashtable;而若是没有正确的同步的话,多个线程是不能共享HashMap的.

3另外一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。因此当有其它线程改变了HashMap的结构(增长或者移除元素),将会抛出ConcurrentModificationException,但迭代器自己的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并非一个必定发生的行为,要看JVM。这条一样也是Enumeration和Iterator的区别。

4. 因为Hashtable是线程安全的也是synchronized,因此在单线程环境下它比HashMap要慢。若是你不须要同步,只须要单一线程,那么使用HashMap性能要好过Hashtable。

 

3 TCP/IP协议栈中,TCP协议和UDP协议的联系和区别?(5分)

答:TCP:TCP:传输控制协议,TCP 协议是面向链接的通讯协议,即传输数据以前在发送端和接收端创建逻辑链接,而后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。

答:UDP: 用户数据报协议,UDP 协议是一个面向无链接的协议,传输数据时,不须要创建链接,无论对方是否启动,直接将数据,数据源和目的地都封装在数据包中,直接发送

 

   1、    编码题(共3个题目,总计20分)

  1.    编写两个线程,一个线程打印1-52的整数,另外一个线程打印字母A-Z。打印顺序为12A34B56C….5152Z。即按照整数和字母的顺序从小到大打印,而且每打印两个整数后,打印一个字母,交替循环打印,直到打印到整数52和字母Z结束。(8分)

   要求:

   1)    编写打印类Printer,声明私有属性index,初始值为1,用来表示是第几回打印。

   2    在打印类Printer中编写打印数字的方法print(int i),3的倍数就使用wait()方法等待,不然就输出i,使用notifyAll()进行唤醒其它线程。

   3    在打印类Printer中编写打印字母的方法print(char c),不是3的倍数就等待,不然就打印输出字母c,使用notifyAll()进行唤醒其它线程。

   4)    编写打印数字的线程NumberPrinter继承Thread类,声明私有属性private Printer p;在构造方法中进行赋值,实现父类的run方法,调用Printer类中的输出数字的方法。

   5)    编写打印字母的线程LetterPrinter继承Thread类,声明私有属性private Printer p;在构造方法中进行赋值,实现父类的run方法,调用Printer类中的输出字母的方法。

  6)    编写测试类Test,建立打印类对象,建立两个线程类对象,启动线程。

 

public class Test09 {

    public static void main(String[] args) {

        //建立打印类的对象

        Printer  tt=new Printer();

        //建立打印数字的方法

        NumberPrinter  ss=new NumberPrinter(tt);

        ss.start();

        //建立打印字母的方法

        LetterPrinter  dd=new LetterPrinter(tt);

        dd.start();

    }

}

//编写一个打印类

class  Printer{

    //用来表示打印的次数

     private  int  index=1;

     //2)在打印类Printer中编写打印数字的方法print(int i),3的倍数就使用wait()方法等待,不然就输出i,使用notifyAll()进行唤醒其它线程。

     //打印数字的方法

     public  synchronized  void  print(int i){

        //判断indecx可否被3整除,不能整除的话就输出数字,index++.

         // 能整除的话就等待,调用输出字母的线程。

         if(index%3==0){

             try{

                 wait();

             }catch (InterruptedException  ce){

                 ce.printStackTrace();

             }

 

         }else{

             System.out.println(i);

             index++;

             notifyAll();//唤醒字母的线程

         }

     }

 

     //编写打印字母的方法

    public  synchronized  void print(char c){

         //若是index不能被3整除的话,就表示是是数字

         //若是除以3等于零,则表示的是字母。

         if(index%3!=0){

             try{

                 wait();

             }catch (InterruptedException  ce){

                 ce.printStackTrace();

             }

 

         }else{

             //输出的是字母

             System.out.println(c);

             index++;

             notifyAll();//唤醒数字的线程

         }

    }

 }

//编写打印数字的线程

class NumberPrinter  extends  Thread{

    private  Printer  p;

 

    public  NumberPrinter(Printer  p){

        this.p=p;

    }

 

     @Override

     public void run(){

        // 调用Printer类中的输出数字的方法*/

        for(int i=1;i<=52;i++){

         p.print(i);

        }

    }

}

 

//编写打印字母的方法

class  LetterPrinter  extends  Thread{

    private  Printer  p;

    public  LetterPrinter(Printer  p){

        this.p=p;

    }

    @Override

    public void run() {

        //调用Printer类中的输出字母的方法,65(A)--122(z)

        for(char  c='A';c<'z';c++){

             p.print(c);

        }

    }

}

 

 

 

 

2.    使用IO包中的类读取D盘上exam.txt文本文件的内容,每次读取一行内容,将每行做为一个输入放入ArrayList的泛型集合中并将集合中的内容使用增强for进行输出显示。

 

 

//BufferedReader 字符缓冲流读操做

public class Meth09 {

    public static void main(String[] args)throws  IOException{

        List<String>list=new ArrayList<>();

        BufferedReader  fr=new BufferedReader(new FileReader("F:\\aaa\\a.txt"));

        String  s=null;

        //每次读取一行的内容

        while ((s=fr.readLine())!=null){

            list.add(s);

        }

        for(String  ff:list){

            System.out.println(ff);

        }

        fr.close();

    }

}

相关文章
相关标签/搜索