java 基础面试练习题(易错题)

本文精选了Java编程基础测试题及其解析,涵盖单选题和多选题,涉及类和对象、初始化过程、字符串操作等多个核心知识点。

单选题

2. 下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
byte[] src,dst;

A:dst=String.frombytes(src,”GBK”).getbytes(“UTF-8)
B:dst=new String (src,”GBK”).getbytes(“UTF-8)
C:dst=new String (”GBK”, src,) getbytes()
D:dst=String.encode(string.decode(src,”GBK”)), “UTF-8)

参考答案:
B

3.单选
以下关于类和对象的说法,哪一个是错误的( )?

A:类是抽象的,对象是具体的

B:类可以产生多个对象,多个对象可以抽象出一个类

C:“人”这个类,可以具体化为学生、工人,因此学生和工人就是对象

D:类可以通过 new 产生对象

参考答案:
C
解析:

工人和学生仍然是一个抽象的概念,因此工人和类仍然是类。

7.单选
关于对象的初始化过程,以下顺序正确的是( )?

A:
①将成员变量赋为定义类时设置的初值。
②实例化对象时,成员变量初始化为默认值。
③通过初始化块给成员变量赋值
④调用构造方法时,使用构造方法所带的参数初始化成员变量

B:
①实例化对象时,成员变量初始化为默认值。
②将成员变量赋为定义类时设置的初值。
③通过初始化块给成员变量赋值 。
④调用构造方法时,使用构造方法所带的参数初始化成员变量

C:
①通过初始化块给成员变量赋值
②将成员变量赋为定义类时设置的初值。
③实例化对象时,成员变量初始化为默认值。
④调用构造方法时,使用构造方法所带的参数初始化成员变量

D:
①调用构造方法时,使用构造方法所带的参数初始化成员变量
②将成员变量赋为定义类时设置的初值。
③通过初始化块给成员变量赋值 。
④实例化对象时,成员变量初始化为默认值。

参考答案:
B

解析:
对象的初始化过程遵循的顺序是:

①实例化对象时,成员变量初始化为默认值。
②将成员变量赋为定义类时设置的初值。
③通过初始化块给成员变量赋值
④调用构造方法时,使用构造方法所带的参数初始化成员变量

11. 给出以下代码

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:第三行编译错误

参考答案:
B
解析:

实例化的对象重写了equals()方法,无论输入什么都会输出true。
此题较难,综合了匿名内部类知识和重写的知识,实际上new后面的类并不是Object,而是一个继承Object的类,但它没有名字,是一个匿名的内部类

12. 如下代码

 public class Test{
   
   
  public int aMethod(){
   
   
    static int i=0;
    i++;
    return i;
  }
  public static void main (String args[]){
   
   
    Test test=new Test();
    test.aMethod();
    int j=test.aMethod();
    System.out.println(j);
  }
}

输出的结果是什么()

A:0
B:1
C:2
D:编译失败

参考答案:
D
解析:

非静态方法里不能存在静态的局部变量。

14. 以下程序的执行结果是()

class Base{
   
   
public Base(String s) {
   
   
    System.out.print("B");
    }
}
public class Derived extends Base{
   
   
    public Derived(String s) {
   
   
        System.out.println("D");
    }
}
public static void main(String []args){
   
   
    new Derived("C");
}

A:BD
B:DB
C:C
D:编译错误

参考答案:

  • [ ]
  • D

解析:
实例化子类时会先调用父类的构造器,子类构造器不显示提供调用父类构造器的方法(super())时,则子类默认调用父类无参的构造器,但是此题中父类提供了有参构造器,编译器不会再默认提供无参构造器,所以编译器会因为找不到构造器而报错。

15.

 Math.floor(-8.5)=( )
A:(float)-8.0
B:(long)-9
C:(long)-8
D:(double)-9.0

参考答案:
D
解析:

Math.floor(x)取得小于等于x的最大值,返回类型是double类

18. 以下对抽象类的描述正确的是()
A:抽象类没有构造方法
B:抽象类必须提供抽象方法
C:有抽象方法的类一定是抽象类
D:抽象类可以通过new关键字直接实例化

参考答案:
C
解析:

抽象类可以有构造方法;抽象类中可以没有抽象方法;有抽象方法的类一定是抽象类; 抽象类不能被直接实例化。

19. 在类设计中,类的成员变量要求仅仅能够被同一package下的类访问,请问应该使用下列哪个修饰词()
A:protected
B:public
C:private
D:不需要任何修饰词

参考答案:
D
解析:

而default和protected老有人记不住。 只要记住protected一个特点是只要子类都能访问,不管在不在一个包。

20. 以下代码运行输出是()

public class Person{
   
   
   private String name=”person”;
   int age=0;
}
   pubic class Child extends Person{
   
   
 public String grade;
 public static void main(String[] args){
   
   
 Person p=new Child();
 System.out.println(p.name);
}
}

A:没有输出
B:编译出错
C:运行出错
D:输出:Person

参考答案:
B
解析:

父类Person的成员变量name是private,不能被子类继承

25. 给出以下代码,请给出结果.

class A{
   
   
    Byte x;
}
class B{
   
   
    public static void main(String[] args){
   
   
        B b=new B();
        b.start();
    }
    void start(){
   
   
        A a=new A();
        System.out.print(a.x+””);
        A a2=fix(a);
        System.out.print(a.x+” ” +a2.x);
    }
    A fix(A aa){
   
   
        aa.x=42;
        return aa;
    }
}

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

参考答案:
B
解析:

主要的逻辑在该方法中完成 void start(){
A a=new A(); //创建一个A类型的a变量,a里的Byte类型(byte的包装类类型)的成员变量x默认值为null
System.out.print(a.x+””);//输出a的属性x=null
A a2=fix(a); //将对象传入fix方法,局部变量aa和a指向同一个对象,返回的引用也同理
System.out.print(a.x+” ” +a2.x);//a和a2指向同一个引用
}
Byte与byte不同,Byte是一个包装类,所以定义没有初始化的类为null
关键要理解在方法传参中,引用的传递是复制引用而不是复制一个新对象

26. 给出类代码:

public class A  {
   
    
    public static void main(String[] args){
   
    
     for(int i=0;i<2;i++){
   
    
      switch(i){
   
    
         case 0: System.out.print(i);       
         case 1: System.out.print(i);        
         break;       
       }      
     } 
     System.out.println("End");  
   } 
}

运行的结果是:

A:01End
B:0End

C:1End
D:001End

参考答案:
D
解析:

switch-case语句从与case值匹配的地方开始执行,直到遇到break为止;假如没有break,则程序从匹配处走完整个switch-case语句

28. 按照Java的标识符命名规范,下列关于类名的标识符最符合规范的是()
A:Helloman
B:HelloMan
C:helloman
D:helloMan

参考答案:
B
解析:

java 标识符可以是 字母、数字、$、_(下划线),但不可用数字开头 不可以是java 的关键字
包名:全部小写(如:multiplicationtable) 类名:每个单词的首字母大写(如:MultiplicationTable)
变量名:第一个字母小写,以后每个单词的首字母大写(如:multiplicationTable)
常量:全部使用大写字母,单词间用下划线隔开(如:MULTIPLICATION_TABLE)

32. DRAM 存储器的中文含义是( )
A:动态随机存储器
B:动态只读存储器
C:静态只读存储器
D:静态随机存储器

参考答案:
A
解析:

DRAM即为Dynamic Random Access Memory的缩写

33.

int i=1, j=10 ;
do{
   
   
if(i++>--j) continue;
}while(i<5);

以上代码执行结束,i和j的值为?

A:i = 6 and j = 5
B:i = 5 and j = 5
C:i = 6 and j = 4
D:i = 5 and j = 6
E:i = 6 and j = 6

参考答案:
D
解析:

i++是先比较再做自加一运算;–j是先做减一运算再比较大小

34. 在Java语言的控制结构中,break语句是经常用到的语句。下面一段代码中break语句起到( )的作用。

int pointer = 0;
while (pointer <= 10) {
   
   
    switch (pointer % 3) {
   
   
    case 1:
        pointer += 1;
        break;
    case 2:
        pointer += 2;
        break;
    default:
        pointer += 3;
        break;
    }
}

A:结束当次循环,使控制权直接转移到控制循环的条件表达式
B:从嵌套循环内部跳出最里面的循环
C:终止switch语句的语句序列,提高switch-case语句性能

D:退出循环

参考答案:
C
解析:

此处break用于中止switch-case块

35. 想要编译和运行java程序,我们至少需要______
A:jdk
B:jre
C:jdk或者jre
D:jdk和jre

参考答案:
A
解析:

jdk自带jre,既能编译也能运行。

40. 请问以上程序执行的结果是?()

public class Test{
   
    
    public String name="abc"; 
    public static void main(String[] args){
   
    
        Test test=new Test(); 
        Test testB=new Test(); 
        System.out.println(test.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值