Java面试知识学习(持续更新)

一.Java基础

1.java语言有什么特点

  • 面向对象(封装,继承,多态);

  • 平台无关性,平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。

  • 可靠性、安全性;

  • 支持多线程。C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持;

  • 支持 络编程并且很方便。Java 语言诞生本身就是为简化 络编程设计的,因此 Java 语言不仅支持 络编程而且很方便;

  • 编译与解释并存;

2.Java和C++有什么关系,它们有什么区别/h2>
  • 都是面向对象的语言,都支持封装、继承和多态;

  • 支持指针,而 Java 没有指针的概念;

  • C++ 支持多继承,而 Java 不支持多重继承,但允许一个类实现多个接口;

  • Java 自动进行无用内存回收操作,不再需要程序员进行手动删除,而 C++ 中必须由程序释放内存资源,这就增加了程序员的负担。

  • Java 不支持操作符重载,操作符重载则被认为是 C++ 的突出特征;

  • Java 是完全面向对象的语言,并且还取消了 C/C++ 中的结构和联合,使编译程序更加简洁;

  • C 和 C++ 不支持字符串变量,在 C 和 C++ 程序中使用“Null”终止符代表字符串的结束。在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的;

  • goto 语句是 C 和 C++ 的“遗物”,Java 不提供 goto 语句,虽然 Java 指定 goto 作为关键字,但不支

    持它的使用,这使程序更简洁易读;

3. JVMJREJDK的关系是什么/h2>

9. break ,continue ,return 的区别及作用/h2>
  • break 跳出总上一层循环,不再执行循环(结束当前的循环体)

  • continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)

  • return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)

10. finalfinallyfinalize的区别/h2>
  • final 用于修饰变量、方法和类。

    • final 变量:被修饰的变量不可变,不可变分为 引用不可变 和 对象不可变 ,final 指的是引用不可变 ,final 修饰的变量必须初始化,通常称被修饰的变量为 常量 。
    • final 方法:被修饰的方法不允许任何子类重写,子类可以使用该方法。
    • final 类:被修饰的类不能被继承,所有方法不能被重写。
  • finally 作为异常处理的一部分,它只能在 try/catch 语句中,并且附带一个语句块表示这段语句最终一定被执行(无论是否抛出异常),经常被用在需要释放资源的情况下, System.exit (0) 可以阻断finally 执行。

  • finalize 是在 java.lang.Object 里定义的方法,也就是说每一个对象都有这么个方法,这个方法在gc 启动,该对象被回收的时候被调用。

    一个对象的 finalize 方法只会被调用一次,finalize 被调用不一定会立即回收该对象,所以有可能调用finalize 后,该对象又不需要被回收了,然后到了真正要被回收的时候,因为前面调用过一次,所以不会再次调用 finalize 了,进而产生问题,因此不推荐使用 finalize 方法。

11. 为什么要用static关键字/h2>
  • 通常来说,用new创建类的对象时,数据存储空间才被分配,方法才供外界调用。但有时我们只想为特定域分配单一存储空间,不考虑要创建多少对象或者说根本就不创建任何对象,再就是我们想在没有创建对象的情况下也想调用方法。在这两种情况下,static关键字,满足了我们的需求。

12. ”static”关键字是什么意思strong>Java中是否可以覆盖(override)一个private或者是static的方法/h2>
  • “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

13. 是否可以在static环境中访问非static变量/h2>
  • static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会 错,因为这些变量还没有被创建出来,还没有跟任何实例关联上

14. static静态方法能不能引用非静态资源/h2>
  • 不能,new的时候才会产生的东西,对于初始化后就存在的静态资源来说,根本不认识它。

15. static静态方法里面能不能引用静态资源/h2>
  • 可以,因为都是类初始化的时候加载的,大家相互都认识

16. 非静态方法里面能不能引用静态资源/h2>
  • 可以,非静态方法就是实例方法,那是new之后才产生的,那么属于类的内容它都认识。

17. java静态变量、代码块、和静态方法的执行顺序是什么/h2>
  • 基本上代码块分为三种:Static静态代码块、构造代码块、普通代码块

  • 代码块执行顺序静态代码块——> 构造代码块 ——>构造函数——> 普通代码块

  • 继承中代码块执行顺序:父类静态块——>子类静态块——>父类代码块——>父类构造器——>子类代码块——>子类构造器

    代码块先于构造器,父类先于子类

18. 面向对象和面向过程的区别/h2>
  • 面向过程:
    优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
    缺点:没有面向对象易维护、易复用、易扩展。

  • 面向对象:
    优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
    缺点:性能比面向过程低

19. 讲讲面向对象三大特性

  • 封装。封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

  • 继承。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。

  • 多态性。它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义

20. Java语言是如何实现多态的/h2>
  • 本质上多态分两种:

    1、编译时多态(又称静态多态)

    2、运行时多态(又称动态多态)

  • 重载(overload)就是编译时多态的一个例子,编译时多态在编译时就已经确定,运行的时候调用的是确定的方法。

  • 我们通常所说的多态指的都是运行时多态,也就是编译时不确定究竟调用哪个具体方法,一直延迟到运行时才能确定。这也是为什么有时候多态方法又被称为延迟方法的原因。

  • Java实现多态有 3 个必要条件:继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。

  • 继承:在多态中必须存在有继承关系的子类和父类。

  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

  • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

21. 重载(Overload)和重写(Override)的区别是什么/h2>
  • 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行

时的多态性。

  • 重写发生在子类与父类之间, 重写方法返回值和形参都不能改变,与方法返回值和访问修饰符无

关,即重载的方法不能根据返回类型进行区分。即外壳不变,核心重写!

  • 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不

同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表最常用的地方就是

构造器的重载。

55. 为什么引入反射概念射机制的应用有哪些/h2>

反射让开发人员可以通过外部类的全路径名创建对象,并使用这些类,实现一些扩展的功能。

反射让开发人员可以枚举出类的全部成员,包括构造函数、属性、方法以帮助开发者写出正确的代码。

测试时可以利用反射 API 访问类的私有成员,以保证测试代码覆盖率

也就是说,Oracle 希望开发者将反射作为一个工具,用来帮助程序员实现本不可能实现的功能。

  1. JDBC 的数据库的连接

在JDBC 的操作中,如果要想进行数据库的连接,则必须按照以上的几步完成

? 通过Class.forName()加载数据库的驱动程序 (通过反射加载,前提是引入相关了Jar包);

? 通过 DriverManager 类进行数据库的连接,连接的时候要输入数据库的连接地址、用户名、密码;

? 通过Connection 接口接收连接。

  1. Spring 框架的使用,最经典的就是xml的配置模式。

Spring 中的 IOC 的底层实现原理就是反射机制,Spring 的容器会帮我们创建实例,该容器中使用的方法就是反射,通过解析xml文件,获取到id属性和class属性里面的内容,利用反射原理创建配置文件里类的实例对象,存入到Spring的bean容器中。

? Spring这样做的好处是:

? 不用每一次都要在代码里面去new或者做其他的事情

? 以后要改的话直接改配置文件,代码维护起来就很方便了

? 有时为了适应某些需求,Java类里面不一定能直接调用另外的方法,可以通过反射机制来实现。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月26日
下一篇 2022年4月26日

相关推荐