Java笔试题附答案

时间:2025-06-25 10:26:38 赛赛 JAVA认证 我要投稿
  • 相关推荐

Java笔试题附答案(精选3套)

  在日常学习和工作生活中,我们需要用到试题的情况非常的多,试题是参考者回顾所学知识和技能的重要参考资料。还在为找参考试题而苦恼吗?下面是小编整理的Java笔试题附答案,希望能够帮助到大家。

Java笔试题附答案(精选3套)

  Java笔试题附答案 1

  一、单项选择题

  1.Java是从()语言改进重新设计。

  A.Ada

  B.C++

  C.Pasacal

  D.BASIC

  答案:B

  2.下列语句哪一个正确()

  A. Java程序经编译后会产生machine code

  B.Java程序经编译后会产生byte code

  C.Java程序经编译后会产生DLL

  D.以上都不正确

  答案:B

  3.下列说法正确的有()

  A.class中的constructor不可省略

  B. constructor必须与class同名,但方法不能与class同名

  C.constructor在一个对象被new时执行。

  D.一个class只能定义一个constructor

  答案:C

  4.提供Java存取数据库能力的包是()

  A.java.sql

  B.java.awt

  C.java.lang

  D.java.swing

  答案:A

  5.下列运算符合法的是()

  A.&&

  B.<>

  C.if

  D.:=

  答案:A

  6.执行如下程序代码

  a=0;c=0;

  do{

  --c;

  a=a-1;

  }while(a>0);

  后,C的值是()

  A.0

  B.1

  C.-1

  D.死循环

  答案:C

  7.下列哪一种叙述是正确的()

  A.abstract修饰符可修饰字段、方法和类

  B.抽象方法的body部分必须用一对大括号{}包住

  C.声明抽象方法,大括号可有可无

  D.声明抽象方法不可写出大括号

  答案:D

  8.下列语句正确的是()

  A.形式参数可被视为localvariable

  B.形式参数可被字段修饰符修饰

  C.形式参数为方法被调用时,真正被传递的参数

  D.形式参数不可以是对象

  答案:A

  9.下列哪种说法是正确的()

  A.实例方法可直接调用超类的实例方法

  B.实例方法可直接调用超类的类方法

  C.实例方法可直接调用其他类的实例方法

  D.实例方法可直接调用本类的类方法

  答案:D

  二、多项选择题

  1.Java程序的种类有()

  A.类(Class)

  B.Applet

  C.Application

  D.Servlet

  2.下列说法正确的有()

  A.环境变量可在编译sourcecode时指定

  B.在编译程序时,所能指定的环境变量不包括class path

  C.javac一次可同时编译数个Java源文件

  D.javac.exe能指定编译结果要置于哪个目录(directory)

  答案:BCD

  3.下列标识符不合法的有()

  A.new

  B.$Usdollars

  C.1234

  D.car.taxi

  答案:ACD

  4.下列说法错误的有()

  A.数组是一种对象

  B.数组属于一种原生类

  C.intnumber=[]={31,23,33,43,35,63}

  D.数组的大小可以任意改变

  答案:BCD

  5.不能用来修饰interface的'有()

  A.private

  B.public

  C.protected

  D.static

  答案:ACD

  6.下列正确的有()

  A. call byvalue不会改变实际参数的数值

  B. call by reference能改变实际参数的参考地址

  C. call byreference不能改变实际参数的参考地址

  D. call byreference能改变实际参数的内容

  答案:ACD

  7.下列说法错误的有()

  A.在类方法中可用this来调用本类的类方法

  B.在类方法中调用本类的类方法时可直接调用

  C.在类方法中只能调用本类中的类方法

  D.在类方法中绝对不能调用实例方法

  答案:ACD

  三、判断题

  1.Java程序中的起始类名称必须与存放该类的文件名相同。()

  答案:正确

  2.Unicode是用16位来表示一个字的。()

  答案:正确

  3.原生类中的数据类型均可任意转换。()

  答案:错误

  1.分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。

  答案:

  BOOL : if ( !a ) orif(a)

  int : if ( a == 0)

  float : const EXPRESSION EXP = 0.000001

  if ( a < EXP && a >-EXP)

  pointer : if ( a !=NULL) or if(a == NULL)

  2.请说出const与#define 相比,有何优点?

  答案:1) const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。

  2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。

  3.简述数组与指针的区别?

  数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。

  (1)修改内容上的差别

  char a[]= “hello”;

  a[0] = ‘X’;

  char *p = “world”; // 注意p 指向常量字符串

  p[0] = ‘X’;// 编译器不能发现该错误,运行时错误

  (2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

  char a[] ="hello world";

  char *p = a;

  cout<< sizeof(a) << endl; // 12字节

  cout<< sizeof(p) << endl; // 4 字节

  计算数组和指针的内存容量

  voidFunc(char a[100])

  {

  cout<< sizeof(a) << endl; // 4 字节而不是100字节

  }

  4.类成员函数的重载、覆盖和隐藏区别?

  答案:

  a.成员函数被重载的特征:

  (1)相同的范围(在同一个类中);

  (2)函数名字相同;

  (3)参数不同;

  (4)virtual 关键字可有可无。

  b.覆盖是指派生类函数覆盖基类函数,特征是:

  (1)不同的范围(分别位于派生类与基类);

  (2)函数名字相同;

  (3)参数相同;

  (4)基类函数必须有virtual 关键字。

  c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

  (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

  (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

  5. There are two int variables: a and b, don’t use “if”, “? :”, “switch”orother judgement statements, find out the biggest one of the two numbers.

  答案:( ( a + b ) + abs( a - b ) ) / 2

  Java笔试题附答案 2

  1)Java 中能创建 Volatile 数组吗?

  能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。

  2)volatile 能使得一个非原子操作变成原子操作吗?

  一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。但是对一个 volatile 型的 long 或 double 变量的读写是原子。

  3)volatile 修饰符的有过什么实践?

  一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型来读写。double 和 long 都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但 Java 中 volatile 型的 long 或 double 变量的读写是原子的.。volatile 修复符的另一个作用是提供内存屏障(memory barrier),例如在分布式框架中的应用。简单的说,就是当你写一个 volatile 变量之前,Java 内存模型会插入一个写屏障(write barrier),读一个 volatile 变量之前,会插入一个读屏障(read barrier)。意思就是说,在你写一个 volatile 域时,能保证任何线程都能看到你写的值,同时,在写之前,也能保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。

  4)volatile 类型变量提供什么保证?(答案)

  volatile 变量提供顺序和可见性保证,例如,JVM 或者 JIT为了获得更好的性能会对语句重排序,但是 volatile 类型变量即使在没有同步块的情况下赋值也不会与其他语句重排序。 volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。某些情况下,volatile 还能提供原子性,如读 64 位数据类型,像 long 和 double 都不是原子的,但 volatile 类型的 double 和 long 就是原子的。

  5) 10 个线程和 2 个线程的同步代码,哪个更容易写?

  从写代码的角度来说,两者的复杂度是相同的,因为同步代码与线程数量是相互独立的。但是同步策略的选择依赖于线程的数量,因为越多的线程意味着更大的竞争,所以你需要利用同步技术,如锁分离,这要求更复杂的代码和专业知识。

  6)你是如何调用 wait()方法的?使用 if 块还是循环?为什么?(答案)

  wait() 方法应该在循环调用,因为当线程获取到 CPU 开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段标准的使用 wait 和 notify 方法的代码:

  // The standard idiom for using the wait method

  参见 Effective Java 第 69 条,获取更多关于为什么应该在循环中来调用 wait 方法的内容。

  Java笔试题附答案 3

  选择题

  1). 下面( )是合法的标识符。

  A.$persons

  B.2Users

  C.*poi nt

  D.this

  正确答案:A

  答案解析:本题考查Java 标识符的命名,属于考试重点内容,应该掌握。Java 中标识符的命名规则是:标识符以字母、下画线或美元符作为首字符的字符串序列;标识符是区分大小写的;标识符的字符数没有限制。由此可见,Java 中标识符不能以数字开头,所以选项B错误;不能以“*”开头,选项C错误;this 是专用标识符,具有专门的意义和用途,选项D 错误,只有选项A 正确。

  2). 设有一个已按各元素的值排好序的顺序表(长度大于2),现分别用顺序查找法和二分查找法查找与给定值k相等的元素,比较的次数分别是s和b,在查找不成功情况下s和b的关系是( )。

  A.s =b

  B.s>b

  C.s

  D.s>=b

  正确答案:B

  答案解析:顺序查找的基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到结点的关键字和给定值k进行比较,若当前扫描到结点的关键字与k相等,则查找成功;若扫描结束后,仍未找到关键字等于k的结点,则查找失败。二分查找法是一种效率较高的查找方法,要求线性表是有序表。基本思想是:首先将待查的k值和有序表R[O]~R[n -1]的中间位置mid上的结点的关键字进行比较,若相等,则查找完成;否则,若R[mi d]. key>k,则说明待查找的结点只可能在左子表R[O]~R[mi d -1]中,我们只需在左子表中继续进行折半查找,若R[mi d]. key

  3). 定义一个表示10个值为null的字符串数组,下面选项正确的是( )。

  A.String []a;

  B.String a[];

  C.char a[10][];

  D.String a[]=new String[10];

  正确答案:D

  答案解析:本题考查字符串数组变量的声明。选项A和选项B的效果是一样的,都是用来定义一个字符串数组,但没有指明数组个数,不满足题目要求;选项C是一个二维的字符数组,在C语言中,一个二维的字符数组就可以表示一个一维的字符串数组,而在Java中,字符char是基本类型,字符串String则是以对象的形式来表示的;选项D正确,它定义了一个含有10个元素的字符串数组,如果没有给字符串数组赋值,则默认为null。

  4). Thread类中能运行线程的方法是( )。

  A.resume()

  B.start()

  C.run()

  D.init()

  正确答案:C

  答案解析:resume()是Thread类提供的用于线程控制的方法;start()是Thread类中的方法,新建的`线程不会自动运行,必须调用线程的start()方法才能运行该线程;run()是Thread类中的方法,在该方法中定义了线程的具体行为,线程开始执行时,就是从它的run()方法开始执行的,就像Java应用程序从main()开始、Applet从init()开始一样;init()不是Thread类中的方法。

  5). 在面向对象的方法中,一个对象请求另一个对象为其服务的方式是通过发送

  A.调用语句

  B.命令

  C.口令

  D.消息

  正确答案:D

  6). 下列的( )原始类型在使用流时可以互换。

  A.byte和boolean

  B.char和int

  C.byte和char

  D.String和char

  正确答案:B

  答案解析:本题考查Java语言中字节类型的概念。在Java语言中,byte是字节类型,用1字节表示.boolean是布尔类型,用true和false表示,它们的表示方法并不一样,也不提供它们之间的转换,选项A错误。Java内部用整数来表示char,通常可以在方法调用和其他语句中互换使用char和int,选项B正确。char用2字节表示,byte字节类型用l字节表示,Java内部也不允许互换使用它们,选项C错误。String在Java语言中是一个类,它提供对字符串的一系列操作,而char是Java语言中的一个基本类型,它不是一个类,两者有本质的区别,故而它们是不能互换使用的,选项D错误。需要注意的是,在Java语言中提供的类都是以大写字母开头,基本类型都用小写字母表示。

  7). 下列说法中,不属于数据模型所描述的内容是( )。

  A.数据结构

  B.数据操作

  C.数据查询

  D.数据约束

  正确答案:C

【Java笔试题附答案】相关文章:

二级Java试题精选(附答案)07-25

java试题及答案07-04

2016年二级Java试题练习(附答案)10-17

JAVA模拟试题及答案10-18

photoshop试题附答案07-15

java面试题及答案11-01

java考试试题及答案10-25

2017年Java试题及答案11-09

java基础笔试题及答案10-18