java面试基础篇之语法和Api(更新中...)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37014990/article/details/81635038
  • static方法可以访问非static方法或变量吗?java中为什么非静态方法可以访问静态变量。

    1. 调用层面:静态成员属于类,不需要生成对象就存在,而非静态需要生成对象才产生。所以静态方法不能直接访问非静态成员。简单说,即在调用的时候是否需要生成对象的区别。

      JVM层面:static成员实在类加载机制的-准备-阶段进行内存分配和初始化,而非Static成员实在加载机制中的-初始化阶段进行初始化的。所以,此时static成员已经分配内存和初始化,则必然可以访问。而非Static对象需要生产对象,所以静态成员不能直接访问非静态成员。 简单说,就是初始化顺序的问题。

    2. JVM层面解释可得,在非static方法初始化的时候,而satic方法已经初始化并分配完成,则可以访问。

Integer和int有啥区别,integer中有哪些特殊的函数?(包装类和基本数据类型的区别)

  1. 类型:Integer是包装类,而int是基本数据类型

    使用:Integer变量必须实例化后才能使用,而int可以直接使用 。

    存储:Integer实际是对象的引用,指向new出来的Integer对象的内存地址,而int直接存储的是数值

    默认值: Integer默认值为null, 而int为0

  2. 特殊函数:Integer.valeOf()

    Integer x = 100; 
    x = Integer.valueOf(100);

    Integer x = 100; java会翻译成x = Integer.valueOf(100);而该函数对于-128到127之间的数会进行缓存,下次再进行直接赋值的时候,直接从缓存中取而不是重新new一个对象。

重写equels需要重写hashcode吗,为什么? (需要完善)

如果两个对象equals是相等的,那么hashCode返回的值一定相同。假设重写了equals方法,而不重写hashCode,会造成一种现象,即对象是相等的(至少equals规则上定义的),两个的hashCode的值却是不一样的。

序列化,反序列化,什么时候用? 如何对一个对象序列化?

  1. 内存对象需要保存到数据库或者文件。Scoket网络传输。远程方法调用。

  2. 类实现Serializable。使用readObject()writeObject()方法读入和写出

    //写流
    out = new ObjectOutputStream(new FileOutputStream("C:/mm_video_workspace/180725BX1BH9A4BC/face/a.txt"));
    out.writeObject(obj);
    //读流
    ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:/mm_video_workspace/180725BX1BH9A4BC/face/a.txt"));
    Person p = (Person)in.readObject();

接口与抽象类之间的冷门知识。

异常机制,检查异常和非检查异常

  1. 异常的父类:Throwable类,该类分为两大派:Error(错误)、Exception(异常)

  2. Error:

    • 程序员无法处理的错误,表示运行应用程序出现严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行是JVM出现的问题。

    • 当出现该异常的时候,程序一般停止执行。

    • 常见异常:StackOverError、OutOfMemoryError

  3. Exception:

    • 检查型异常与非检查型异常:

      1. 检查型异常:又称编译时异常。

        • 除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可检查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

      2. 非检查型异常:又称运行时异常。

    • 运行时异常:RuntimeException及其子类,程序可以选择捕获处理,也可以不出来。一般是由程序逻辑错误引起的。

    • 编译时异常:除了RuntimeException及其子类之外的都是编译时异常。从语法角度来说,是必须处理的异常,如果不出来,则程序不能编译通过。

    • 常见异常:NullPointException、ArrayIndexOutOfBoundException。

 

猜你喜欢

转载自blog.csdn.net/qq_37014990/article/details/81635038