小孟的Java突击学习之旅(三)

面向对象二

  • 修饰符
    • 为什么在静态方法中调用非静态方法是非法的?
    • 静态方法和实例方法的区别
  • 接口和抽象类
    • 接口和抽象类的区别
    • String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
    • java序列化中有些实例变量不想进行序列化时怎么办?

修饰符

为什么在静态方法中调用非静态方法是非法的?

因为非静态方法可以不通过类来调用。因此当使用静态方法时,不能访问其他非静态变量,也不能访问非静态成员变量

静态方法和实例方法的区别

  1. 调用方法不同:
    静态方法可以通过类和对象来调用,而实例方法只能通过对象来调用。
  2. 静态方法只能调用静态变量和方法,实例方法无要求。

接口和抽象类

接口和抽象类的区别

  1. 接口默认方法是public。方法在接口中一般不能有实现。而抽象类可以有非抽象方法。
  2. 接口中除了static、final变量、不能有其他变量,而抽象类没有这类规定
  3. 一个类可以实现多个接口,只能实现一个抽象类。
  4. 接口默认public,抽象方法可以有public、protected、default等修饰符,但不能是pravite。
  5. 从设计角度来说,抽象是对类的抽象,是一种模板设计。而接口是对行为的抽象。

String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?

  • String类使用final修饰,所以不可变,其他无final修饰
  • StringBuffer 和 StringBuilder都是继承自同一个父类AbstractStringBuilder实现。
  • string中对象为常量,线程安全;StringBuffer加了同步锁,线程安全;StringBuilder线程不安全。
  • 从性能上看stringbuilder性能更好,不过有多线程不安全的风险。

java序列化中有些实例变量不想进行序列化时怎么办?

使用transient修饰。transient只能修饰变量,不能修饰类和方法。

你可能感兴趣的:(小孟的Java突击学习之旅(三))