Java知识点及常见问题汇总之一:面向对象编程和常见问题

面向对象编程(OOP)

java是一个支持并发、基于类和面向对象的计算机编程语言。其优点有:

    1)代码开发模块化,更易于维护和修改;

    2)代码复用性高;

    3)增强代码的可靠性和=-【灵活性;

    4)面向对象编程有很多重要的特性,比如:封装、继承、多态和抽象。

封装

    封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java 当中,有 4种修饰符:public、private、protected和缺省的(default)。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。关于修饰符的详细介绍请参考:java修饰符详解

封装的好处:

    1)通过隐藏对象的属性来保护对象内部的状态;

    2)提高代码的可用性和可维护性,因为对象的行为可以被单独的改变和扩展;

    3)禁止对象之间的不良交互提高代码的模块化;

多态

    多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型的操作可以应用到其他类型的值上面。所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

    多态的三个必要条件:继承、重写和向上转型。

继承

    继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。

抽象

   抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java 支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。

抽象和封装的不同点

    抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。


常见java问题

1.什么是 Java  虚拟机?为什么 Java  被称作是“ 平台无关的编程语言”?

    Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。

    Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

2.JDK 和 和 JRE  的区别是什么?

    Java 运行时环境(JRE)是将要执行 Java 程序的 Java 虚拟机。它同时也包含了执行 applet 需要的浏览器插件。Java 开发工具包(JDK)是完整的 Java 软件开发包,包含了 JRE,编译器和其他的工具(比如:JavaDoc,Java 调试器),可以让开发者开发、编译、执行 Java 应用程序。

3. static 关键字是什么意思?Java中是否可以覆盖(override) 一个 private或者是static的方法?

    static关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

4. 是否可以在static环境中访问非static变量?

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

5.Java  支持的数据类型有哪些?什么是自动拆装箱?

    java支持8中基本数据类型:byte、short、int、long、float、double、char、boolean。自动装箱是 Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把 int 转化成 Integer,double 转化成 double,等等。反之就是自动拆箱。

6.接口和抽象类的区别是什么?

    Java 提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:

    1)接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
    2)类可以实现很多个接口,但是只能继承一个抽象类
   3)类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
    4)抽象类可以在不提供接口方法实现的情况下实现接口。
    5)Java 接口中声明的变量默认都是 final 的。抽象类可以包含非 final 的变量。
    6)Java 接口中的成员函数默认是 public 的。抽象类的成员函数可以是 private,protected 或者是 public。

    7)接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含 main方法的话是可以被调用的。

7.什么是值传递和对象传递?

    详情请参考:java值传递和对象传递


猜你喜欢

转载自blog.csdn.net/XU906722/article/details/80213467