美文网首页
java面试1

java面试1

作者: Coding_Wolf | 来源:发表于2019-01-15 23:23 被阅读0次
    1.面向对象、面向过程
    • 面向对象
      复用、维护、拓展|| 类实例化开销大
    • 面向过程
      性能->单片机、嵌入式 性能优先考虑
    2.java特点
    • 相较于C C++简单易学
    • OOP
    • security
    • 多线程
    • 平台无关
    3.
    • jdk->java开发工具箱
    • jre->java运行环境 注:一般人只需要下jre->来运行Java程序,而开发人员需要jdk编译调试程序
    • jvm->java虚拟机 独立于OS实现一次编写到处运行-->字节码转机器代码 垃圾回收 内存管理等
    4.构造器不能重写 只能重载
    5.重写和重载
     重载->方法名相同,参数列表不同(类型、个数、顺序、返回值、访问修饰符)
     重写->方法名、参数列表相同(访问修饰符大于父类、private修饰的方法不能重写)
    
    6.封装、继承、多态
    1.封装->属性私有化,对外提供访问属性的方法
    2.继承->用以存在的类作为基础建立新的类的过程 extends
    3.多态->一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,
         必须在由程序运行期间才能决定。
    
    • 多态存在的三个必要条件
      1、要有继承;
      2、要有重写;
      3、父类引用指向子类对象。
    • 多态好处:可扩充性、灵活性、接口性、简化性
    7.用组合不用继承的理由
    继承:is-a  例如:水果是苹果香蕉的一般化
    组合:has-a 
    比如你继承一个父类,包含好多属性和方法你根本不回去用它,这就会使子类无限膨胀,并且同事在调用某些方法时
    会出现各种错误。而组合却可以比继承灵活得多,可以在运行期才决定某个对象,不会产生歧义和调用错误等状况。
    
    8.string stringbuild stringbuffer
    1.String不可变private final char value[],所以String对象是不可变的
    2.Stringbuffer加了同步锁线程安全,stringbuild不安全
    3.少量数据string 单线程大量数据stringbuild 多线程大量数据stringbuffer
    
    9.自动装箱、拆箱
    1.将基本类型用它们对应的引用类型包装起来(包装类:Double Integer Bool...);
    2.包装类转基本类型
    
    10.在一个静态方法内调用一个非静态成员为什么是非法的

    静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。

    11.默认构造函数的作用
    创建一个"子类"的对象实例的时候,必先调用父类的无参数的构造函数(默认构造函数),假如(父类有带参数的构造
    函数),那么系统将(不会给它创建无参数的构造函数),这时,子类在实例化的时候,因为"找不到父类的默认构造函数",编译器将会报错,但如果在子类的构造函数
    中'指定用父类的带参数的构造函数'的时候,或者在父类中加一个无参数的构造函数,就不会报错。
    

    解决方案 1. super(args...) 2.Constructor(){}

    12.接口和抽象类的区别是什么
    1.interface所有方法在接口中不能有实现,抽象类可以有非抽象的方法
    2.一个类可以实现多个接口,但最多只能实现一个抽象类
    3.一个类实现接口的话要实现接口的"所有方法",而抽象类不一定
    4.接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象
      是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
    

    抽象类:使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。

    13.创建对象的几种方式
    1.new,实例化后定死了。
    2.反射:Class类和Constructor类
        Class: Object ob = Object.class.newInstance()
        Constructor: Constructor<T> construct = T.class.getConstructor();
                    T t = constructor.newInstance();
    3.clone:
        A a = new A(); A aa = (A)a.clone();
    4.反序列化...
    

    纯个人总结,接受指正,欢迎探讨,转载请说明出处,谢谢🙃

    未完待续...

    相关文章

      网友评论

          本文标题:java面试1

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