博客
关于我
Java面试基础知识整理-1
阅读量:353 次
发布时间:2019-03-04

本文共 1932 字,大约阅读时间需要 6 分钟。

  1. Static存在的意义,static主要意义是在于创建独立的具体对象的域变量或者方法,以至于即使没有创建对象,也能使用属性和调用方法,static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序的性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个statci块,并且只会执行一次。为什么说static块可以用来优化程序性能,是因为它的特性,只会在类加载的时候执行一次。因此,很多时候可以将一些只需要进行一次的初始化操作放在static代码块中进行,被static修饰的变量或者方法是独立于当前类的任何对象,也就是说这些静态的变量或者方法不属于任何一个实例化对象,而是被类直接的所共享。static变量值在类加载的时候分配空间,以后创建类对象的时候不会重新分配。赋值的话,是可以任意赋值的。被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。
  2. 面向对象与面向过程的区别?面向过程优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机,嵌入式开发、Linux、Unix等等一般都是采用面向过程的开发,性能是最重要的因素。缺点:没有面向对象便于维护、容易复用、容易扩展。面向对象优点:易复用、易扩展、易维护,由于是面向对象有封装、继承、多态性的特点,可以设计出低耦合的系统,使得系统更加灵活、更加易于扩展。缺点:性能比面向过程低。面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。面向对象是模块化的,你只需要抽象出来一个类对象,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法,需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,不需要了解。最后,面向对象的底层还是面向过程,把面向过程抽象出类,然后封装,方便我们使用就是面向对象了。
  3. 面向对象的三大特性:抽象,抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两个方面,抽象只关心对象的有哪些属性和行为,并不关心这些行为的细节是什么。封装,封装是把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法。继承,继承是使用已有的类的定义作为基础建立的新的技术,新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但是不能选择性的继承父类。有一下三个方面,一、子类拥有父类非private的属性和方法。二、子类可以拥有自己属性和方法,即子类可以对父类进行扩展。三、子类可以用自己的方法实现父类的方法。多态,所谓的多态就是程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用编程时并不确定,而是在程序运行的时候才确定,即一个引用变量到底会指向那个类的实例对象,该引用变量发出的方法调用到底是那个类中的实现方法,必须由程序运行期间才能决定。
  4. 什么是多态机制?Java语言是如何实现多态的?所谓的多态是程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。多态分为编译时多态和运行时多态,其中编辑时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,在运行时谈不上多态。而是运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。
  5. 多态的实现,Java中实现多态有三个必要条件:继承、重写、向上转型。继承:在多态中必须存在有继承关系的子类和父类。重写:子类对父类中的某些方法进行重新定义,在调用这些方法时候就会调用子类的方法。向上转型:在多态中需要将子类的引用赋值给父类,只有这样该引用才能具备技能调用父类的方法和子类的方法。只有满足上述三个条件,才能在同一个继承结构中国使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为,对于Java而言,它的多态实现截至遵循一个原则,当超类的对象引用变量引用子类的对象时候,被引用的对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖了的方法。
  6. 面向对象的五大基本原则?单一职责:类的功能单一,不能包罗万象。开发封闭原则:一个模块对于扩展是开放的,对于修改是关闭的,想要增加功能热烈欢迎,想要修改功能不行。里氏替换原则:子类可以替换父类出现在父类能够出现的地方。依赖倒置原则:高层模块不应该依赖于底层模块,他们都应该依赖于抽象,抽象不应该依赖细节实现。细节实现依赖于抽象。接口分离原则:设计时采用多个于特定客户有关的接口。

转载地址:http://fdmr.baihongyu.com/

你可能感兴趣的文章
习惯养成记打卡-第7章 项目成本管理
查看>>
习惯养成记打卡-第9章 项目资源管理
查看>>
LeetCode - 98. 验证二叉搜索树(迭代、递归)2
查看>>
【△重点△】LeetCode - 4. 寻找两个正序数组的中位数——二分查找
查看>>
LeetCode - 5. 最长回文子串——字符串、动态规划
查看>>
【数据结构系列】链表合并问题——链表的奇偶重排
查看>>
【Redis】Redis客户端实现的基本原理
查看>>
全局锁和表锁 :给表加个字段怎么有这么多阻碍?
查看>>
事务到底是隔离的还是不隔离的?
查看>>
SpringMVC的Model对象的使用
查看>>
文本读取和csv文件生成工具类的编写
查看>>
@Import注解---导入资源
查看>>
重读&笔记系列-《Linux多线程服务端编程》第一章
查看>>
解决ubuntu在虚拟机(VMware)环境下不能联网的问题
查看>>
LeetCode - 字符串相乘
查看>>
C# 适配器模式
查看>>
二分查找与插入排序的结合使用
查看>>
892 三维形体的表面积(分析)
查看>>
40. 组合总和 II(dfs、set去重)
查看>>
16 最接近的三数之和(排序、双指针)
查看>>