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

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

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. IP、路由配置

    IP地址组成: 网络地址主机地址32位二进制 A类: 255.0.0.0, 8:    0 000 0001 - 0 111 1111     127个A类,127用于回环,1-126    2^7- ...

  2. Spring定时任务的几种实现(转自iteye网gong1208)

    原文地址: http://gong1208.iteye.com/blog/1773177 以下为正文: 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整 ...

  3. Java程序员面试题集(51-70)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17403101 Java程序员面试题集(51-70) 摘要:这一部分主要讲解了异常.多线程.容器和I ...

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

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

  5. 基于纹理边缘抑制的轮廓和边界检测(Contour and Boundary Detection)

    基于纹理边缘抑制的轮廓和边界检测(Contour and Boundary Detection) kezunhai@gmail.com http://blog.csdn.net/kezunhai 一幅 ...

  6. Web页面布局方式小结

    Web页面是由块元素组成的,正常情况下块元素一个个按垂直方向排布,构成了页面.可是这样的主要的布局方式绝大多时候不能满足我们的需求,所以各种布局方式应运而生,本文就对这些布局方式做个小结. 1.元素漂 ...

  7. LINQ 基本子句之二 join

    Join子句据说可以实现3中连接关系. 1.内部连接——元素的连接关系必须同时满足被连接的两个数据源 2.分组连接 3.左外连接 1.最基本的,内部连接,类似于sql中inner join. 由于st ...

  8. ASP.NET和PHP全面对比

    谁是速度之王? 刚刚在9月编程语言排行榜上取得历史性突破的PHP在Web开发领域最到的对手可能就是基于微软.NET技术的ASP.NET.近日,微软的 Joe Stagner在博客上发表了一系列文章比较 ...

  9. 【转】关于C++程序的编码问题

    引用自:http://blog.chinaunix.net/uid-26790551-id-3190813.html 我们传统的程序基本都只在Windows或只在Linux下运行,Windows程序使 ...

  10. silverlight中鼠标放在对象的提示事件

    1.xaml 中实现 <Rectangle x:Name="toolTip" Grid.Column="0" Grid.Row="1" ...