美文网首页
5.18:JAVA面试题

5.18:JAVA面试题

作者: apollooo | 来源:发表于2018-05-19 18:12 被阅读0次

    1 以下属于面向对象的特征的是()

       A.重载    B.重写    C.封装    D.继承
    

    答:面向对象的特征主要是:封装、继承、多态。而多态的实现主要是函数方法的重载和重写。所以这道题的答案应该是ABCD。
    重载和重写的区别:重载是编译时的多态,指的是在一个类当中同名的方法有不同的参数(包括类型及数量其中一个不同即可)。重写是运行时的多态,指的是子类重写父类的方法且有相同的返回类型。

    2 以下代码运行输出是()

    public class Person{
    private String name="Person";
    int age=0;
    }
    public class Child extends Person{
    public String grade;
    public static void main(String[] args){
    Person p=new Child();
    System.out.println(p.name);
    }
    }
    A. Person B.没有输出 C. 编译出错 D. 运行出错
    答:很显然这道题应该选C。在JAVA继承中,子类是可以继承父类的所以属性和方法除了构造器。但是不能访问父类的私有属性和方法。

    3 在使用super 和 this 关键字时,以下描述正确的是()

    • A. 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
    • B. super() 和 this() 不一定要放在构造方法的第一行
    • C. this() 和 super() 可以同时出现在一个构造函数中
    • D. this() 和 super() 可以在static环境中使用,包括static方法和static语句块

    答:super()函数在子类构造函数中调用父类的构造函数时使用,而且必须要在构造函数的第一行。this()函数主要应用于同一类中从某个构造函数调用另一个重载版的构造函数。this()只能用在构造函数中,并且也只能在第一行。所以在同一个构造函数中this()和super()不能同时出现。而在static中只能调用static的方法或者属性。而super和this都属于构造函数。所以不能再static环境中使用。即这道题应选A。

    4. 以下对封装的描述正确的是()

    • A. 只能对一个类中的方法进行封装,不能对属性进行封装
    • B. 如果子类继承了父类,对于父类中封装的方法,子类仍然可以直接调用
    • C. 封装的意义不大,因此再编码时尽量不要使用
    • D. 封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性

    答:在JAVA中,封装就是将对象自身的属性或者方法进行访问限制,即privateprotectedpublic。适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。在这道题当中A选项中是可以对属性进行封装。B选项中父类的私有方法子类无法调用。所有答案是D。

    5. 以下对于继承描述错误的是()

    • A. JAVA中的继承允许一个子类继承多个父类
    • B. 父类更具有通用性,子类更具体
    • C. JAVA中的继承具有传递性
    • D. 当实例子类时会递归调用父类的构造方法

    答:JAVA中继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。子类实际上是将父类定义的更加的具体化的一种手段。父类表示的范围大,而子类表示的范围小。一个子类只能够继承一个父类,存在单继承局限,且只允许多层继承,不允许多重继承,Java存在单继承局限。实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化。所以答案为A

    6. 以下程序运行结果为()

    public class Person {
    public Person(){
      System.out.println("Person");
    }
    }
    public class Teacher extends Person{
    private String name="tom";
    public Teacher(){
      System.out.println("Teacher");
      super();
    }
    public static void main(String[] args){
    Teacher teacher=new Teacher();
    System.out.println(this.name);
    }
    }

    • A. Person,teacher,tom
    • B. teacher,Person,tom
    • C. 运行出错
    • D. 编译有两处错误

    答:通过前面的介绍我们知道,super和this关键字必须在构造器的第一行且不能再静态方法中使用。所以此题选D。

    7. 以下说法错误的是()

    • A. super.方法()可以调用父类所有非私有方法
    • B. super()可以调用父类的所有非私有构造函数
    • C. super.属性可以调用父类的所有非私有属性
    • D. this和super关键字可以出现在同一个构造函数中
      答:答案为D。

    8. 以下关于final关键字说法错误的是()

    • A. final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
    • B. final修饰的类肯定不能被继承
    • C. final修饰的方法不能被重载
    • D. final修饰的变量不允许被再次赋值
      答:在Java中,final关键字可以用来修饰类、方法和变量。当用final修饰一个类时,表明这个类不能被继承。final修饰的方法在子类中不能被重写。final修饰的变量是不能再次赋值的,为常量。而接口和抽象类设计出来就是为了继承的,所有不能用final修饰。答案为AC。

    9. 访问修饰符作用范围由大到小是()

    • A. private-default-protected-public
    • B. public-default-protected-private
    • C. private-protected-default-public
    • D. public-protected-default-private
      答:JAVA中的访问修饰的设计控制对类的访问。访问权限如下图:


      访问修饰符.png

      可以看处答案为D。

    10 .以下()不是Object类的方法

    • A. clone()
    • B. finalize()
    • C. toString()
    • D. hasNext()
      答:JAVA中object类的方法主要有1.Object clone():创建并返回此对象的一个副本。2.boolean equals(Object obj):判断是否和其他对象相等,注意这里是地址相等。3.void finalize():垃圾回收器在回收对象时调用。4.Class<? extends Object> getClass():返回该对象在运行时的类型。5.int hashCode():返回该对象的哈希值。6.void notify():唤醒在此对象监视器上等待的单个线程。7.void notifyAll():唤醒在此对象监视器上等待的所有线程。8.String toString():返回该对象的字符串表示。9.void wait():导致当前的线程等待。所以答案为D。

    11. 多态的表现形式有()

    • A. 重写
    • B. 抽象
    • C. 继承
    • D. 封装
      答案:AB。在JAVA中,多态的实现主要由4种方式:方法重载,方法重写,抽象类和接口。

    12. 以下对重载描述错误的是()

    • A. 方法重载只能发生在一个类的内部
    • B. 构造方法不能重载
    • C. 重载要求方法名相同,参数列表不同
    • D. 方法的返回值类型不是区分方法重载的条件
      答案:选B。

    13. 以下()添加到ComputerBook中不会出错

    public class Book { protected int getPrice(){ return 30; } }
    public class ComputerBook extends Book{ }

    • A. protected float getPrice(){}
    • B. protected int getPrice(int page){}
    • C. int getPrice();{}
    • D. public int getPrice(){ return 10; }
      答:选D,因为其他的都没有返回值。

    14 . 以下对抽象类的描述正确的是()

    • A. 抽象类没有构造方法
    • B. 抽象类必须提供抽象方法
    • C. 有抽象方法的类一定是抽象类
    • D. 抽象类可以通过new关键字直接实例化
      答:抽象类是指在普通类的结构里面增加抽象方法的组成部分。抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。所以抽象类是有构造方法的,因为抽象类是由普通类演变来的。抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理。抽象类里面的抽象方法必须全部被子类实现,如果子类不能全部实现,那么子类必须也是抽象类。但抽象类可以没有抽象方法。应选C。

    15. 以下对接口描述错误的有()

    • A. 接口没有提供构造方法
    • B. 接口中的方法默认使用public、abstract修饰
    • C. 接口中的属性默认使用public、static、final修饰
    • D. 接口不允许多继承
      答:在JAVA中,接口是一个特殊的抽象类,是抽象方法的集合,只有抽象方法和全局常量(用 static final 修饰的变量),且没有构造方法。接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口。接口的子类必须要覆写接口中的全部抽象方法。接口的对象可以利用子类对象的向上转型进行实例化。且子类在实现接口的同时还可以继承继承抽象类。抽象方法可以不用写public abstract,全局常量可以不用写public static final。选D。

    16. 以下代码,描述正确的有()

    public interface IDemo {
    public static final String name;1
    void print();2
    public void getinfo();3
    }
    abstract class Person implements IDemo{ public void print(){}; }4

    • A. 第1行错误,没有给变量赋值
    • B. 第2行错误,方法没有修饰符
    • C. 第4行错误,没有实现接口的全部方法
    • D. 第3行错误,没有方法的实现
      答:选A。

    17.接口和抽象类描述正确的有()

    • A. 抽象类没有构造函数
    • B. 接口没有构造函数
    • C. 抽象类不允许多继承
    • D. 接口中的方法可以有方法体
      答:选BC。
      接口与抽象类的区别接口是对动作的抽象,而抽象类是对根源的抽象。相同点->都不能被直接实例化,都包含了抽象方法。不同点->抽象类中可以有非抽象方法且有构造函数。接口中只有抽象方法且没有构造函数。一个类可以实现多个接口但只能继承一个抽象类。抽象级别:接口>抽象类>实现类。

    18. 以下描述错误的有()

    • A. abstract 可以修饰类、接口、方法
    • B. abstract修饰的类主要用于被继承
    • C. abstract 可以修饰变量
    • D. abstract修饰的类,其子类也可以是abstract修饰的
      答:选C。在用abstract修饰接口时,IDEA会提示:Modifier 'abstract' is redundant for interfaces(用abstract修饰接口是多余的)。

    19. 以下描述正确的有()

    • A. 方法的重写应用在一个类的内部
    • B. 方法的重载与返回值类型无关
    • C. 构造方法不能重载
    • D. 构造方法可以重写
      答:选B。构造方法不能被重写。因为子类和父类的构造方法名称不一样。

    20. 以下程序运行结果是()

    public class Father {
    private String name="father";
    public String getName(){
    return name;
    }
    }
    public class Test extends Father{
    private String name="test";
    public static void main(String[] args){
    Test test=new Test();
    System.out.println(test.getName());
    }
    }

    • A. father
    • B. test
    • C. 编译出错
    • D. 运行出错,无输出
      答:选A。在JAVA中,子类调用父类的方法会使用父类的属性。

    21. 以下对异常的描述不正确的有()

    • A. 异常分为Error和Exception
    • B. Throwable是所有异常类的父类
    • C. Exception是所有异常类父类
    • D. Exception包括RuntimeException和RuntimeException之外的异常
      答:Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。Exception类表示程序可以处理的异常,可以捕获且可能恢复,主要分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception )。它们都是Throwable的子类。选C。

    22. 在try-catch-finally语句块中,以下可以单独与finally一起使用的是()

    A . catch B . try C . throws D . throw
    答:选B。

    23 . 下面代码运行结果是()

    public class Demo {
    public int add(int a, int b){
    try{
    return a+ b;
    }catch (Exception e){
    System.out.println("catch 语句块");
    }finally {
    System.out.println("finally 语句块");
    }
    return 0;
    }
    public static void main(String[] args){
    Demo demo=new Demo();
    System.out.println("和为:"+demo.add(9,34));
    }
    }

    • A. 编译异常
    • B. finally语句块 和是:43
    • C. 和是:43 finally语句块
    • D. catch语句块 和是:43
      答:选B。当执行到return语句是会先执行finally再执行return。

    24 . 以下描述不正确的有()

    • A. try块不可以省略
    • B. 可以使用多重catch块
    • C. finally块可以省略
    • D. catch块和finally块可以同时省略
      答:选D。try模块后面至少有一个catch或者finally。

    25 . 以下对自定义异常描述正确的是()

    • A. 自定义异常必须继承Exception
    • B. 自定义异常可以继承自Error
    • C. 自定义异常可以更加明确定位异常出错的位置和给出详细出错信息
    • D. 程序中已经提供了丰富的异常类,使用自定义异常没有意义
      答:自定义异常必须继承于Throwable。选C。

    26 . 以下程序运行结果是()

    public class Test2 {
    public int div(int a, int b){
    try {
    return a/b;
    }catch (Exception e){
    System.out.println("Exception");
    }catch (NullPointerException e){
    System.out.println("ArithmeticException");
    }catch (ArithmeticException e){
    System.out.println("ArithmeticException");
    }finally {
    System.out.println("finally");
    }
    }
    public static void main(String[] args) {
    Test2 Demo=new Test2();
    System.out.println("商是:"+Demo.div(9,0));
    }
    }

    • A. Exception finally 商是:0
    • B. ArithmeticException finally 商是:0
    • C. finally商是:0
    • D. 编译报错
      答:选D。因为Exception 是NullPointerException和ArithmeticException的基类。所以产生异常会被Exception直接捕获。所以后面是无法捕获到异常导致编译报错。

    27 . 以下对TCP和UDP描述正确的是()

    • A. TCP不能提供数据的可靠性
    • B. UDP能够保证数据库的可靠性
    • C. TCP数据传输效率高于UDP
    • D. UDP数据传输效率高于TCP
      答:选D。TCP提供可靠数据,UDP提供不可靠数据。所以TCP的效率低于UDP。

    28 . 在Java中,下面对于构造函数的描述正确的是()

    • A. 类必须显示定义构造函数
    • B. 构造函数的返回类型是void
    • C. 构造函数和类有相同的名称,并且不能带任何参数
    • D. 一个类可以定义多个构造函数
      答:选AD。

    29 . 根据下面的代码,String s = null;会抛出NullPointerException异常的有()

    • A. if( (s!=null) & (s.length()>0) )
    • B. if( (s!=null) & & (s.length()>0) )
    • C. if( (s==null) | (s.length()==0) )
    • D. if( (s==null) || (s.length()==0) )
      答:选AC。在逻辑语法中,&是会将条件执行完再去判断,而&&当条件不成立即终止。|和||是一样的。

    30 . 在Java中,关于HashMap类的描述,以下说法错误的是()

    • A. HashMap使用键/值得形式保存数据
    • B. HashMap 能够保证其中元素的顺序
    • C. HashMap允许将null用作键
    • D. HashMap允许将null用作值
      答:HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。选B。

    31 . 下列选项中关于java中super关键字的说法错误的是()

    • A. super关键字是在子类对象内部指代其父类对象的引用
    • B. super关键字不仅可以指代子类的直接父类,还可以指代父类的父类
    • C. 子类可以通过super关键字调用父类的方法
    • D. 子类可以通过super关键字调用父类的属性
      答:选B。

    32 . 在Java中,以下代码( )正确地创建了一个InputStreamReader对象

    • A. InuptStreamReader(new FileInputStream(“1.dat”));
    • B. InuptStreamReader(new FileReader(“1.dat”));
    • C. InuptStreamReader(new BufferReader(“1.dat”));
    • D. InuptStreamReader (“1.dat”);
      答:选A。在InuptStreamReader的构造函数中,都要求传入一个InuptStream实例对象,而以上只有FileInputStream继承与InuptStream。其他都继承于Reader。

    33 . 在Java中,()类提供定位本地文件系统,对文件或目录及其属性进行基本操作

    • A. FileInputStream
    • B. FileReader
    • C. FileWriter
    • D. File
      答:选D。

    34 . Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述错误的是()

    • A. ArrayList和LinkedList均实现了List接口
    • B. ArrayList的访问速度比LinkedList快
    • C. 添加和删除元素时,ArrayList的表现更佳
    • D. HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
      答:选C。ArrayList:动态数组,中间插入删除慢、按位置查找快。LinkedList:双向链表,中间插入删除快、按位置查找慢。

    35 . 在Java中开发JDBC应用程序时,使用DriverManager类getConnection()方法建立与数据源的连接语句为:Connection con = DriverManager.getConnection(“jdbc:odbc:news”);URL连接中的”news”表示的是()

    • A. 数据库中表的名称
    • B. 数据库服务器的机器名
    • C. 数据源的名称
    • D. 用户名
      答:选C。jdbc:mysql://127.0.0.1:3306/testtable在这里先是数据库类型,然后是数据源,最后是数据库名。

    36 . 在Java中,JDBCAPI定义了一组用于与数据库进行通信的接口和类,它们包括在()包中。

    A . java.lang B . java.sql C . java.util D . java.math
    答:java.lang包包含着Java最基础和核心的类,在编译时会自动导入。java.sql可以动态地安装不同驱动程序来访问不同数据源。java.util包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类。集合类、时间处理模式、日期时间工具等各类常用工具包。java.math提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。

    37 . Java中,以下()接口以键-值对的方式存储对象。

    A . java.util.Collection B . java.util.Map C . java.util.List D . java.util.Set
    答:选B。

    38 . 以下关于对象序列化描述正确的是()

    • A. 使用FileOutputStream可以将对象进行传输
    • B. 使用PrintWriter可以将对象进行传输
    • C. 使用ObjectOutputStream类完成对象存储,使用ObjectInputStream类完成对象读取
    • D. 对象序列化的所属类需要实现Serializable接口
      答:选CD。

    39 . 在Java中,()类可用于创建链表数据结构的对象。

    A . LinkedList B . ArrayList C . Collection D . HashMap
    答:选A。

    40 . 分析下面这段Java代码,它的运行结果是()。

    Import java.io.*;
    Public class B{
    Public static void main(string [] args){
    int i=12;
    System.out.println(i+=i-=i*=i);
    }
    }
    A . 100 B . 0 C . -120 D . 程序无法编译
    答:选C。

    41 . 使用JDBC事务的步骤是()

    • A. 取消Connection的事务自动提交方式
    • B. 发生异常回滚事务
    • C. 获取Connection对象
    • D. 操作完毕提交事务
      答:事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。选CABD。

    42 . 以下对JDBC事务描述错误的是( )

    • A. JDBC事务属于JAVA事务的一种
    • B. JDBC事务属于容器事务类型
    • C. JDBC事务可以保证操作的完整性和一致性
    • D. JDBC事务是由Connection发起的,并由Connection控制
      答:选B。

    43 . 要通过可滚动的结果集更新数据,以下正确的是()

    • A. pst=con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
    • B. pst=con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY)
    • C. pst=con.prepareStatement(sql, Resu ltSet.TYPE_SCROLL_SENSITIVE)
    • D. pst=con.prepareStatement(sql, ResultSet.CONCUR_UPDATABLE)
      答 :选A。

    44 . 存储过程pro有两个参数,第一个为输入参数,第二个为输出参数,以下代码正确的是()

    • A. CallableStatement cst=con.prepareCall(“(call pro(?,?))”);
    • B. CallableStatement cst=con.prepareCall(“(call pro(?))”);
    • C. CallableStatement cst=con.prepareCall(“{call pro(?,?)}”);
    • D. CallableStatement cst=con.prepareCall(“{call pro(?,?,?)}”);
      答:选C。

    45 . 以下描述正确的是()

    • A. CallableStatement是PreparedStatement的父接口
    • B. PreparedStatement是CallableStatement的父接口
    • C. CallableStatement是Statement的子接口
    • D. PreparedStatement是Statement的父接口
      答:选B。

    46 . 要删除book表中书籍(bookName)是”java”的记录,以下代码正确的是()

    String sql=”delete from book where bookName=?”;
    PreparedStatement pst=con.preparedStatement(sql);
    输出代码
    pst.execute();

    • A. pst.setString(1,”java”);
    • B. pst.setString(0,”java”);
    • C. pst.setInt(0,”java”);
    • D. 以上选项都不正确
      答:选A。

    47 . 获取ResutlSet对象rst的第一行数据,以下正确的是()

    • A. rst.hashNext();
    • B. rst.next();
    • C. rst.first();
    • D. rst.nextRow();
      答: 选B。

    48 . 以下可以正确获取结果集的有()

    • A. Statement sta=con.createStatement();
      ResultSet rst=sta.executeQuery(“select * from book”);
    • B. Statement sta=con.createStatement(“select * from book”);
      ResultSet rst=sta.executeQuery();
    • C. PreparedStatement pst=con.preparedStatement();
      ResultSet rst=pst.executeQuery(“select * from book”);
    • D. PreparedStatement pst=con.preparedStatement(“select * from book”);
      ResultSet rst=pst.executeQuery();
      答:选AC。

    49 . 以下负责建立与数据库连接的是()

    • A. Statement
    • B. PreparedStatement
    • C. ResultSet
    • D. DriverManager
      答:选D。

    50 . 使用JDBC连接数据库的顺序是()

    • A. 加载驱动
    • B. 导入驱动包
    • C. 发送并处理SQL语句
    • D. 建立于数据库的连接
    • E. 关闭连接
      答:选BADCE。

    相关文章

      网友评论

          本文标题:5.18:JAVA面试题

          本文链接:https://www.haomeiwen.com/subject/zlundftx.html