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

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

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. GridBagLayout占多行效果注意

    如果想要出现按钮2占两行的效果,必须按键3.按钮4同时存在且同时可见. 如果缺少按钮4,则按钮2不会占两行: 如果缺少按钮3.4,则按钮2也不会占两行. package com.wst.bj; imp ...

  2. Python 字符串相关操作

    # 1 * 重复输出字符串 print('hello'*2) # 2 [] ,[:] 通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表 print('helloworld'[2: ...

  3. C#静态构造函数和析构函数片段化认知

    一.静态构造函数 一个类可以有静态构造函数,实现如下源代码.静态构造函数有以下特性: 1).静态构造函数不能有修饰符(润饰符) 2).静态构造函数不能有参数 3).不能被调用——在实例化类的时候,静态 ...

  4. Java之可变参数

    Java中支持可变参数 意思就是:参数的个数可以根据需要写,你可以写1个.2个.3个....他们都被保存到一个参数的数组中. 但是这些参有一些约束:他们必须是同类型的,比如都是String字符串类型. ...

  5. Sublime+Emmet

    Sublime使用Package Control安装Emmet插件: 按Ctrl+Shift+P命令板 输入install然后选择install Package,然后输入emmet找到 Emmet C ...

  6. linux安装perl模块

    查询perl CPAN模块   shell>perl -MCPAN -e shell cpan>install module_name   手动安装perl CPAN模块 从 CPAN(h ...

  7. java之集合类框架的简要知识点:泛型的类型擦除

    这里想说一下在集合框架前需要理解的小知识点,也是个人的肤浅理解,不知道理解的正不正确,请大家多多指教.这里必须谈一下java的泛型,因为它们联系紧密,我们先看一下这几行代码: Class c1 = n ...

  8. python 学习之爬虫练习

    通过学习python,写两个简单的爬虫,没用线程,本地抓取速度还不错,有些瑕疵就是抓的图片有些显示不出来,代码做个笔记记录下: # -*- coding:utf-8 -*- import re imp ...

  9. JSP 实现 之 读取数据库显示图片

    用JSP从数据库中读取图片并显示在网页上 环境mysql+tomcat: <1>先在mysql下建立如下的table. 并insert图像. mysql.sql文件如下: ) unsign ...

  10. JMS & ActiveMQ小结

    JMS简介 JMS源于企业应用对于消息中间件的需求,使应用程序可以借助消息进行异步处理而互不影响.Sun公司和它的合作伙伴设计的JMS API定义了一组公共的应用程序接口和相应语法,使得Java程序能 ...