四十一、面向对象的特征有哪些方面

四大特征大家都知道:抽象、继承、封装、多态。这是个理解性表述题,每个人的表述方式可能都不一样。下面仅选择一种作为参考:

1.抽象:

抽象——就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来一般叫做类或者接口) 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是数据抽象,二是过程抽象。

数据抽象——就是用代码的形式表示现时世界中一类事物的特性,就是针对对象的属性。比如建立一个鸟这样的类,鸟都有以下属性:一对翅膀、两只脚、羽毛等。抽象出来的类都是鸟的属性,或者成员变量。

过程抽象——就是用代码形式表示现实世界中事物的一系列行为,就是针对对象的行为特征。比如鸟会飞、会叫等。抽象出来的类一般都是鸟的方法。

2.继承:

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。因此可以说,继承是为了重用父类代码,同时为实现多态性作准备。

3.封装:

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下保护类的内部结构,同时保护了数据。

4. 多态性(相同的行为,不同的实现方式):

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。总的来说,方法的重写、重载与动态链接构成多态性。Java引入多态的概念原因之一就是弥补类的单继承带来的功能不足。(为规避C++中多继承造成的复杂继承问题,java采用单继承。)

动态链接——对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态链接。

四十二、&和&&的区别?

相同点:它们都可以作为逻辑与的运算符,当表达式两边的结果都为true时结果才为true,只要一方为false,结果就为false。

不同点:

①&&具有短路功能,即第一个表达式为false时,就不再计算第二个表达式了,所以更高效一些。

②&还可以作为位运算符,当表达式两边不是boolean类型时,&表示按位与操作。

四十三、heap 和stack有什么区别?

堆栈常常连起来说,其实它们的区别挺多的,下面列举一些主要的:

1.stack是栈,heap是堆。

2.stack的空间由操作系统自动分配和释放,地址是由高向低减少的;heap的空间是手动申请和释放的,地址是由低向高增长的,heap常用new关键字来分配。

3.stack空间有限,heap的空间是很大的自由区。

4.栈是一种线形集合,是一块连续的内存区域,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是向高地址扩展的数据结构,是不连续的内存区域,堆采用链表方式来存储空闲内存地址。所以堆获得的空间比较灵活。

5.效率比较:栈由系统自动分配,速度快,但程序员无法控制,灵活性差。

堆一般由new分配内存,速度比较慢,而且容易产生碎片,不过使用方便。

6.在Java中,若只是声明一个对象,则先在栈内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。

四十四、Static Nested Class 和Inner Class 的不同?

(1)Nested Class(嵌套类) 一般是C++的说法,Inner Class(内部类) 一般是JAVA的说法。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。

(2)一般情况下,Nested Class可分为Static Nested Class和Inner Class。

区别是:

Static Nested Class对象的创建不依赖于外部类的对象。静态内部类只能访问外部类的静态成员。

而Inner Class则不同,它的对象的创建依赖于外部类的对象。其既可以访问外部类的静态成员也可以访问非静态成员。

使用内部类优点:

⒈ 内部类对象可以访问创建它的对象的实现,包括私有数据;

⒉ 内部类不为同一包的其他类所见,具有很好的封装性;

⒊ 使用内部类可以很方便的编写事件驱动程序;

⒋ 匿名内部类可以方便的定义运行时回调;

四十五、什么时候用assert?

1.概念:assert (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支

持这种机制。所以assert 只在调试版本起作用,对发布版本失效。

2.机制:断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true,那么,如果出现了false,说明该程序处于不正确的状态,系统将会给出警告会退出。所以常作调试用。

3.形式:

assert Expression1 ;
      assert Expression1 : Expression2 ;
   Expression1 应该总是产生一个布尔值。
   Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。

Java面试题之八的更多相关文章

  1. java面试题及答案(转载)

    JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...

  2. 115个Java面试题和答案——终极列表(下)

    第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...

  3. Java面试题(全)

    JAVA部分 什么是反射机制?反射机制应用(Struts中反射机制的应用) 答:运行状态中,对于任意一个类,都可以知道它的所有属性和方法,对于任意一个对象都可以调用它的任意一个方法,这种动态获取信息以 ...

  4. Java面试题大全(四)

    JAVA代码查错 1. abstract class Name { private String name; public abstract boolean isStupidName(String n ...

  5. 大公司的Java面试题集

    找工作要面试,有面试就有对付面试的办法.以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, SUN, 以及其它大小公司. 面试 ...

  6. 收集了50道基础的java面试题

    下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...

  7. Java笔试题解答和部分面试题

    面试类  银行类的问题 问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你 ...

  8. 转:Java面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101

    Java面试题集(51-70) Java程序员面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101 摘要:这一部分主要 ...

  9. JAVA面试题集之基础知识

                           JAVA面试题集之基础知识 基础知识:  1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...

随机推荐

  1. Bring Your Charts to Life with HTML5 Canvas and JavaScript

    Bring Your Charts to Life with HTML5 Canvas and JavaScript Bring Your Charts to Life with HTML5 Canv ...

  2. eclipse中如何创建maven项目

    1.在eclipse中,file-->new-->maven project,勾选Create a simple project,点击next. 2.添加项目信息,点击finish.(pa ...

  3. 456. 132 Pattern

    456. 132 Pattern Given an array of integers a1, a2, a3-an, judge if there exists the 132 pattern. 13 ...

  4. 手动调整导航控制器中的viewcontroller

    NSMutableArray *array = [[NSMutableArray alloc]initWithArray: [self.navigationController viewControl ...

  5. 布局文件提示错误“No orientation specified, and the default is horizontal. This is a common so...”

    完整的错误提示信息为:No orientation specified, and the default is horizontal. This is a common source of bugs ...

  6. Java核心技术,让计算机"一芯多用"的多线程技术

    我们在使用计算的时候会感受到计算机好像在同时执行很多任务,这也是我最初接触计算机给我留下的印象,而我们普通人在同一时刻大脑只能思考一件事情(当然不排除一些异能者能够做到一心二用),而且我们在思考完一件 ...

  7. webpack构建具备版本管理能力的项目

    webpack是时下十分流行的编译和打包工具,它提供一种可扩展的loader的方式,简单的配置,便可以编译打包各类型的文件,包括js.css.image.font.html,以及各种预编译语言都不在话 ...

  8. EntityFramework1

    1.ORM都是Select * ,即使不需要某些字段,也要查询出来,效率是否很低. 可以使用视图来解决,比如对于列表页,可以定义一个视图,只查询列表中需要使用的字段,然后将列表映射为实体 2.ORM中 ...

  9. 导出Eclipse环境配置

    第一种方法: Eclipse的 File -> Export(导出), 在窗口中展开 General(常规) -> Perferences(首选项)-->Export all(全部导 ...

  10. Core Bluetooth【官方文档翻译】【02】

    1.中心设备和外围设备以及它们在蓝牙通讯中的角色. 在所有的BLE( Bluetooth low energy,下文简称蓝牙4.0 )通讯中都涉及2个主要的角色:中心设备和外围设备.它是基于传统的客户 ...