java基础知识总结(二)

  1. +=隐含了强制类型转换。
    x+=y;等价与:x = (x的数据类型)(x + y);
  2. 函数重载?
    函数名同样。參数列表不同。跟返回值不关,就是函数重载
  3. 封装是什么?
    隐藏对象的属性和详细的实现细节,仅对外提供公共的訪问方式.
    类、方法事实上也是封装的体现。
  4. 继承是什么?
    概念:把多个类中同样的内容抽取出来,单独定义到一个类(父类)中,再定义其它类(子类)的时候,继承父类就可以.
    优点:1.提高了代码的复用性,减少了代码的反复率.2.提高了代码的维护性3.让类与类之间产生了关系,是多态的前提.
    继承的特点是:Java中类仅仅能够单继承,可是能够多层继承
    注意:
    子类中全部的构造函数都会默认訪问父类中的空參数的构造函数,由于每个子类构造内第一行都有默认的语句super();
    假设父类中没有空參数的构造函数,那么子类的构造函数内,必须通过super语句指定要訪问的父类中的构造函数。


    假设子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会訪问父类中的构造函数。

  5. 匿名对象是什么?应用场景是什么?
    应用场景:A:调用方法。

    可是仅仅仅仅限调用一次而已。B:匿名对象用作实际參数传递。

  6. 方法重写和方法重载的差别?重载能够改变返回值类型吗?

    (*面试题)
    方法重写:子类中出现和父类中一模一样的方法声明的方法。


    方法重载:同一个类中,出现方法名同样,參数列表不同的方法。
    跟返回值无关。
    重载能够改变返回值类型。由于他跟返回值无关。

  7. statickeyword是什么?有什么特点?什么时候用呢?


    statickeyword:是静态的意思,能够修饰类中成员变量和成员方法。
    静态的特点:随着类的载入而载入、优先与对象而存在、被全部对象所共享、能够通过类名.静态的内容调用。

  8. A:局部代码快: 就是在方法中用{}括起来的代码。

    作用是限定变量的生命周期,提高效率。
    B:构造代码快:在类中,方法外。用{}括起来的代码。作用是把全部构造方法中同样的内容抽取出来,
    定义到构造代码块中。将来在调用构造方法的时候,会去自己主动调用构造代码块。构造代码快优先于构造方法。
    C:静态代码快:在类中、方法外。用{}括起来的代码。仅仅只是加了static修饰。
    作用是:随着类的载入而载入。并且仅仅载入一次的代码。

  9. 一个类的实例化过程有哪些步骤?(*面试题)
    Student s = new Student(); 在内存中究竟运行了哪些步骤。


    1,载入Sutdent.class文件进内存(类载入器)
    2,在栈内存为 s 变量申请一个空间
    3,在堆内存为Student对象申请空间
    4,对类中的成员变量进行默认初始化
    5。对类中的成员变量进行显示初始化
    6,有构造代码块就先运行构造代码块,假设没有,则省略
    7。运行构造方法,通过构造方法对对对象数据进行初始化
    8,堆内存中的数据初始化完成。把内存值复制给 s 变量

  10. 子父类中构造方法的运行有什么特点?

    为什么要这样?


    子类构造方法的运行。首先会去运行父类的构造方法。
    由于子类中可能直接訪问了父类的数据,父类的数据要优先于子类的数据进行初始化。

  11. finalkeyword是什么,能够修饰什么,有什么特点?
    finalkeyword:是终于意思。能够修饰类、方法、变量。
    修饰类:类不能够被继承。
    修饰方法:方法不可被重写
    修饰变量:变量为常量。
  12. 多态是什么,前提是什么?
    多态:对象在不同一时候刻表现出来的多种状态。是一种编译时期状态和运行时期状态不一致的现象。


    成员变量:编译看左边,运行看左边。
    成员方法:编译看左边。运行看右边。普通成员方法能够重写,变量不能够。
    静态方法:编译看左边,运行看左边。

  13. 什么是抽象类?抽象类的特点和优点是什么?
    同样的方法。有同样方法的声明。可是方法体不一样。仅仅抽取方法声明的方法。叫做抽象方法。有抽象方法的类,叫做抽象类。


    特点:
    A:类或者方法必须用abstract修饰。


    B:详细类在继承抽象类的时候,要么本身也是抽象类。要么实现抽象类中的全部抽象方法。


    C:抽象类不能被实例化。

    要想使用,必须依照多态的方式使用。
    D:成员特点:
    a:成员变量
    能够是变量,也能够是常量。
    b:构造方法
    有构造方法,可是不能实例化。
    用于子类訪问父类数据的初始化。
    c:成员方法
    抽象方法仅仅定义方法声明。并不定义方法实现。
    优点:
    A:限定子类必须实现某些功能。
    B:提高代码的复用性。

  14. 抽象类的几个问题:
    A:抽象类不能实例化,构造方法有什么用。
    用于子类訪问父类数据的初始化。
    B:抽象类没有抽象方法。有什么意义?
    限制创建对象。
    C:abstract不能和哪些keyword共存?
    final: 冲突
    private: 冲突
    static: 无意义

  15. 什么是接口? 接口的特点?
    假设一个抽象类中的方法全部是抽象方法,那么java就针对这样的类型的抽象类,给出了一个更抽象的表达式:接口。


    特点:
    A:全部的方法,都是抽象方法。
    B:类实现接口
    要么本身是抽象类,要么重写接口中的抽象方法。
    C:接口不能被实例化,要想使用,用多态。


    D:成员特点
    a:成员变量
    仅仅有常量,并且是静态常量。默认修饰符:public static final
    b:构造方法
    没有构造方法,子类数据的初始化默认走的是Ojbect类的构造方法
    c:成员方法
    全部是抽象的。有默认修饰符:public abstract

  16. 抽象类和接口的差别? (*面试题)
    A:成员差别
    抽象类:
    成员变量:能够是变量。也能够是常量。


    构造方法:有。
    成员方法:有,能够是抽象的。也能够是非抽象的。


    接口:
    成员变量:仅仅能是常量。默认修饰符:publci static final
    构造方法:没有,子类数据的初始化默认走的是Ojbect类的构造方法。
    成员方法:仅仅能是抽象的,默认修饰符是:public abstract
    B:类与接口的关系差别
    类与类:
    继承关系,单继承。


    类与接口:
    实现关系,单实现、多实现。
    接口与接口:
    继承关系,单继承、多继承。
    C:设计理念的差别
    抽象类被继承体现的是:is a的关系。抽象类中一般定义的是整个继承结构的共性功能。
    接口被实现体现的是:like a的关系。

    接口中一般定义的是整个继承结构的扩展功能。

  17. 内部类的訪问特点:
    A:内部类能够直接訪问外部类的成员,包含私有。
    B:外部类要訪问内部类的成员,必须创建对象。
  18. 为什么内部类訪问局部变量必须加final修饰?(*面试题)
    A: 防止在使用后数据发生改变。
    B: 延长变量的生命周期。
  19. 什么是匿名内部类?本质是什么?
    匿名内部类就是没有名字的内部类。


    格式:
    new 类名或者接口名() {
    重写方法;
    };
    本质:是继承类或者实现接口的子类匿名对象。

  20. ==和equals()的差别? (*面试题)
    A:==
    a:基本类型 比較的是基本类型的值
    b:引用类型 比較的是引用类型的地址值
    B:equals()
    仅仅能比較引用类型。


    默认比較地址值。

  21. String、StringBuffer、StringBuilder的差别?(*面试题)
    String:字符长度是固定的。
    StringBuffer/StringBuilder:字符长度是可变的。
    StringBuffer:安全的,但效率较低一些。
    StringBuilder:不安全的。但效率较高一些。
    StringBuffer和StringBuilder兼容
  22. 什么是基本数据包装类?
    相应的类型
    byte Byte
    short Short
    int Integer
    long Long
    float Float
    double Double
    char Character
    boolean Boolean
  23. 集合和数组有什么差别?(*面试题)
    集合:
    长度能够发生改变。
    仅仅能存储对象类型。引用类型。
    能够存储随意类型的对象。
    数组:
    长度固定。
    能够存储基本类型,也能够存储引用数据类型。
    仅仅能存储同一种类型的元素。
  24. 泛型是什么?有什么用?在哪里用?泛型有什么优点和弊端?
    泛型是一种把明白数据类型的工作推迟到创建对象或者调用方法的时候才去明白的特殊的数据类型。


    能优化程序设计,攻克了黄色警告线问题。
    把运行时期的异常提前到了编译时间。


    避免了强制类型转换。
    弊端:让类型统一了,不能存储不同的数据类型了。

  25. HashSet怎样保证元素唯一性的呢?
    底层数据结构是哈希表(散列表)。

    详细的是由一个元素是单向链表的数组组成。
    它依赖于两个方法:hashCode()和equals()方法。
    运行顺序:
    先推断hashCode()是否同样。
    假设同样
    继承运行equals()方法,看其返回值:
    true:元素反复。不存储。
    false:元素不反复,存储。
    假设不同
    存储。


    记住:
    看到HashXxx结构的集合。就要知道,被该集合存储的元素要重写hashCode()和equals()方法。


    并且,是自己主动生成的。

  26. TreeSet底层数据结构是什么?怎样保证元素的唯一性的呢?
    底层数据结构是二叉树。
    依据比較的返回值是否是0来决定。


    怎样保证元素的排序的呢?


    A:自然排序 元素具备比較性
    让集合中被存储的元素所属的类实现Comparable接口。
    B:比較器排序 集合具备比較性
    在创建集合对象的时候。让构造方法接收一个Comparator接口的子类对象。
    自然排序和比較器排序的差别:
    TreeSet构造函数什么都不传, 默认依照Comparable(接口,compareTo(T))的顺序(没有实现Comparable就报错ClassCastException)
    TreeSet假设传入Comparator(接口compare(T1,T2)), 就优先依照Comparator

  27. LinkedHashSet底层数据结构是什么?怎样保证元素的唯一性的呢?


    底层由链表和哈希表组成。
    由链表保证有序。


    由哈希表保证唯一。

  28. 什么是可变參数?
    针对在写一个方法的时候。不知道详细要有多少个形式參数的时候。


    java提供了可变參数的使用方法。
    注意:
    A:变量事实上是该数据类型的一个数组。


    B:形式參数假设有多个的话,可变參数仅仅能是最后一个。
    C:数据类型要一致。

  29. Hashtable和HashMap的差别?(面试题)
    A:HashMap 线程不安全,效率高。同意null键和null值。
    B:Hashtable 线程安全,效率低。不同意null键和null值。
  30. throws和throw的差别?

    (*面试题)
    throws
    位置:在方法()后面。跟的是类名,后面能够跟多个异常类名,并且用逗号隔开
    表示抛出异常,交给调用者去处理
    假设后面依据的是RuntimeException及其子类,那么。该方法能够不用处理。


    假设后面依据的是Exception及其子类,那么,必需要编写代码进行处理,或者调用的时候抛出。


    throw
    位置:在方法中,跟的对象名称。后面仅仅能跟一个异常对象
    表示抛出异常,由方法体内语句处理
    假设方法中,有throw抛出RuntimeException及其子类,那么。声明上能够没有throws。


    假设方法中,有throw抛出Exception及其子类。那么,声明上必须有throws。

  31. final、finally、finalize的差别?(*面试题)
    final:是终于的意思。用于修饰类、变量、和方法。修饰类的时候。类是终于类,不能够被继承。
    修饰变量的时候,变量为常量。不能够被改变。修饰方法的时候。方法不能被重写。
    finally:是异常处理的一部分。它里面的代码永远会运行(前提:jvm没退出),一般用于释放资源。
    finalize:是object类的一个方法,用于垃圾处理。

  32. 什么是递归?使用递归需要注意哪些?
    递归就是方法定义中调用方法本身的现象。
    A:递归一定要有出口,否则就是死递归。
    B:递归的次数不能太多,否则内存溢出。
    C:构造方法不能递归使用。
  33. 主要的IO流有哪些?(*面试题)
    字节流:InputStream、OutputStream、FileInputStream、FileOutputStream、
    字符流:Writer、Reader、FileWriter、FileReader、
    高效字节流:BufferedInputStream、BufferedOutputStream
    高效字符流:BufferedWriter、BufferedReader
    最開始的时候。仅仅有字节流,可是后来由于中文字符或者其它字符的出现,用两个字节才干表示。


    假设用字节流也是能够读写字符文件的数据的,可是比較麻烦。

    为了简化这样的操作。就提供了字符流。

  34. flush()和close()的差别?(*面试题)
    flush():刷新缓冲区,流对象还能够继续使用。
    close():释放流资源,可是会先刷新一次缓冲区。操作完成后,流对象不能够再使用。
  35. 多线程有几种实现方案?各自是什么?怎样操作?(*面试题)
    多线程有两种实现。各自是:
    1。继承Thread类
    自己定义类继承Thread类,在类中重写run()方法,測试类中创建自己定义类对象,并调用start()方法
    2,实现Runnable接口
    自己定义类实现Runnable接口,重写run()方法。測试类中创建自己定义对象,
    创建Thread对象。把自己定义对象作为构造參数传递。调用Thread类的start()方法。
  36. 线程的生命周期? (*面试题)
    新建: 创建线程对象
    就绪: 具备cup运行资格,没有运行权。随时准备运行
    运行: 具备运行资格。运行权。运行run()中的代码
    阻塞: 是当线程运行到符合某个我们定义的条件时,它会停止下来等待唤醒
    死亡: run()结束了
  37. 多线程为什么会出现安全问题?怎么解决呢?(*面试题)
    假设满足下面条件,那么就会出现安全问题:
    A:是多线程程序。


    B:有共享的数据。
    C:针对共享数据有多条语句操作。
    仅仅要我们把多线程环境中,把操作共享数据的操作,变成单线程就没有问题了。


    Java针对这样的情况。就提供了同步技术:
    A:同步代码块
    B:同步方法
    C:JDK5以后的Lock锁

  38. 同步的锁对象各自是?(*面试题)
    代码块:随意对象
    方法:this
    静态方法:类名.class
  39. sleep()和wait()的差别?(*面试题)
    sleep():必须指定时间,不释放锁对象。
    wait():能够指定时间,也能够不指定。释放锁对象。
  40. 网络通信三要素是什么? (*面试题)
    A:IP地址
    计算机在网络中的唯一标识。
    如今使用的是:”点分十进制”
    B:port
    应用程序的的标记。
    C:协议
    通信的规则。

  41. 反射是什么?反射获取字节码文件的三种方式?反射的优点?(*面试题)
    在运行状态下。通过class文件对象(Class的对象),去使用构造方法,成员变量。成员方法。

    就是反射。


    3种方法:
    A.用Object类的getClass方法得到。


    B.用随意数据类型的静态class属性能够得到
    C.用Class类的静态方法forName(String className)方法得到
    优点:仅仅要有一个类或者一个类的对象。就能够得到这个类或对象的全部属性和方法。包含私有的。

原文地址:https://www.cnblogs.com/claireyuancy/p/7356292.html