java牛客刷题2020年9月4日

  1. 对于abstract声明的类,下面说法正确的是

    可以实例化
    不可以被继承
    子类为abstract
    只能被继承
    可以被抽象类继承
    正确答案: E   你的答案: B
    A,抽象类不能实例化,因为有抽象方法未实现
    B,可以被继承。派生类可以实现抽象方法
    C,子类可以是抽象的,也可以非抽象的
    D,只能被继承说法太肯定,不正确
    E,可以被抽象类继承,也可以被非抽象类继承
    
  2. 有时为了避免某些未识别的异常抛给更高的上层应用,在某些接口实现中我们通常需要捕获编译运行期所有的异常, catch 下述哪个类的实例才能达到目的:()

    正确答案: B 你的答案: D (错误)

    Error
    Exception
    RuntimeException
    Throwable
    

    22222

    1. 检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。

      public class HelloB extends HelloA 
      {
       public HelloB()
       {
       }
       {
           System.out.println("I’m B class");
       }
       static
       {
           System.out.println("static B");
       }
       public static void main(String[] args)
       {
           new HelloB();
       }
      }
      class HelloA
      {
       public HelloA()
       {
       }
       {
           System.out.println("I’m A class");
       }
       static
       {
           System.out.println("static A");
       }
      }
      
      static A
      I’m A class
      static B
      I’m B class
      答案:
      其中涉及:静态初始化代码块、构造代码块、构造方法
      当涉及到继承时,按照如下顺序执行:
      1、执行父类的静态代码块
      static {
              System.out.println("static A");
          }
      输出:static A
      2、执行子类的静态代码块
      static {
              System.out.println("static B");
          }
      输出:static B
      3、执行父类的构造代码块
      {
              System.out.println("I’m A class");
          }
      输出:I'm A class
      4、执行父类的构造函数
      public HelloA() {
          }
      输出:无
      5、执行子类的构造代码块
      {
              System.out.println("I’m B class");
          }
      输出:I'm B class
      6、执行子类的构造函数
      public HelloB() {
          }
      输出:无
      
      那么,最后的输出为:
      static A
      static B
      I'm A class
      I'm B class
      正确答案:C
      
      
      
      或者:
      1.静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了。
      1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值。
      2.构造代码块:是独立的,必须依附载体才能运行,Java会把构造代码块放到每种构造方法的前面,用于实例化一些共有的实例变量,减少代码量。
      3.构造方法:用于实例化变量。
      1是类级别的,2、3是实例级别的,自然1要优先23.
      在就明白一点:对子类得主动使用会导致对其父类得主动使用,所以尽管实例化的是子类,但也会导致父类的初始化和实例化,且优于子类执行。
      
    2. Java 中的集合类包括 ArrayList 、 LinkedList 、 HashMap 等,下列关于集合类描述正确的是?()

      正确答案: A B D 你的答案: B C D (错误)

      ArrayList和LinkedList均实现了List接口
      ArrayList访问速度比LinkedList快
      随机添加和删除元素时,ArrayList的表现更加快速
      HashMap实现Map接口,它允许任何类型的键和值对象,并允许将NULL用作键或值
      
      解释:
      A、HashMap实现了Map接口的,它的Key和Value都可以是null,但是Hashtable种,Key和Value都不能是null。
      B、ArrayList与LinkedList都实现了List接口,继承了AbstractList类。
      C、ArrayList底层是动态数组是实现,随机位置添加和删除,都需要移动数组的数据,而LinkedList底层是双向链表,只需要修改Node节点的引用。
      D、随机访问数组要比链表块。
      下面放一张ArrayList和LinkedList的区别表:
      

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

      在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
      super()和this()不一定要放在构造方法内第一行
      this()和super()可以同时出现在一个构造函数中
      this()和super()可以在static环境中使用,包括static方法和static语句块
      正确答案: B C D   你的答案: B D (错误)
      1、super()表示调用父类构造函数、this()调用自己的构造函数,而自己的构造函数第一行要使用super()调用父类的构造函数,所以这俩不能在一个构造函数中会出现重复引用的情况
      2、super()和this()必须在构造函数第一行,所以这一点也表明他俩不能在一个构造函数中
      3、this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块(里面不能使用非static类型的)。
      
 posted on 2020-09-04 11:04  ben跑的换行符  阅读(191)  评论(0编辑  收藏  举报