Java高频面试总结-基础篇(1)

本文章为自己学习期间的总结笔记,如有不足,还请斧正o(*≧▽≦)ツ

1.重写与重载的区别

重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。

重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。

2.抽象类和接口的区别

  • 抽象类中可以没有抽象方法,也可以抽象方法和非抽象方法共存
  • 接口中的方法在JDK8之前只能是抽象的,JDK8版本开始提供了接口中方法的default实现
  • 抽象类和类一样是单继承的;
  • 接口可以实现多个父接口
  • 抽象类中可以存在普通的成员变量;
  • 接口中的变量必须是staticfinal类型的,必须被初始化,接口中只有常量,没有变量

3.Java中的Exception和Error有什么区别?

  • Exception是程序正常运行中预料到可能会出现的错误,并且应该被捕获并进行相应的处理,是一种异常现象
  • Error是正常情况下不可能发生的错误,Error会导致JVM处于一种不可恢复的状态,不需要捕获处理,比如说OutOfMemoryError

4.Java中的值传递和引用传递可以解释下吗

  • 值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象。
  • 引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象的改变会反映到所有的对象上。

5.关于 == 、equals方法和hashCode

  • ==作用是判断两个对象地址是否相等,即判断两个对象是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)
  • equals的作用也是比较两个对象是否相等。如果类没有覆盖equals方法,与==的作用等价;如果类覆盖了equals方法,比较的是两个对象的内容是否相等,若内容相等返回true;
  • hashCode() 返回哈希值,而 equals() 是用来判断两个对象是否等价。等价的两个对象散列值一定相同,但是散列值相同的两个对象不一定等价,这是因为计算哈希值具有随机性,两个值不同的对象可能计算出相同的哈希值。
  • 在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证等价的两个对象哈希值也相等。

6.static关键字和final关键字

  • 静态变量:

    又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它。静态变量在内存中只存在一份

  • 静态方法:
    声明为static的静态方法有以下几个特点:

    静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是说它不能是抽象方法。

    (1)静态方法只能调用静态方法;

    (2)静态方法只能访问静态数据;

    (3)静态方法不能以任何方式引用this或super(这两个关键字与具体对象关联) ;

  • 静态类:

    非静态内部类依赖于外部类的实例,也就是说需要先创建外部类实例,才能用这个实例去创建非静态内部类,而静态内部类不需要。静态内部类不能访问外部类的非静态的变量和方法。

  • 静态代码块:

    静态代码块定义在类中方法外,静态代码块在非静态代码块之前执行(静态代码块—非静态代码块—构造方法)。 该类不管创建多少对象,静态代码块只执行一次.

  • 静态倒包:
    格式为:import static

    这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法

    //如果只想导入单一某个静态方法,只需要将换成对应的方法名即可
    
    import static java.lang.Math.;//换成import static java.lang.Math.max;具有一样的效果
    
    public class Demo {
    public static void main(String[] args) {
    
    int max = max(1,2);
    System.out.println(max);
    }
    }
    
    
    
    

存在继承的情况下,初始化顺序为:

  • 父类(静态变量、静态语句块)
  • 子类(静态变量、静态语句块)
  • 父类(实例变量、普通语句块)
  • 父类(构造函数)
  • 子类(实例变量、普通语句块)
  • 子类(构造函数)

final的作用从变量、方法、类三个方面来理解、

  • final修饰的变量的值不能被修改,是一个常量;

  • final修饰的方法不能被重写;

  • final修饰的类不能被继承;

7.深拷贝与浅拷贝

浅拷贝:对基本的数据类型进行值传递,对引用数据类型进行引用传递般的拷贝。

深拷贝:对基本的数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容

你可能感兴趣的:(Java)