Java面试葵花宝典

所需积分/C币:10 2015-07-17 14:19:30 1007KB PDF
42
收藏 收藏
举报

对于从毕业的应届生毕业还是从公司离职的java从业者,在面试都需要一定的基础知识是回顾,这个面试宝典讲解的很详细,可以很好帮助您顺利通过面试,取得一份工作。
有什么不同 分页语句 用一条语句査询出每门课都人于分的学生姓名 所有部门之间的比赛组合 每个月份的发生额都比科目多的科目 统计每年每月的信息 显示文章标题,发帖人、最后回复时间 删除除了号不同其他都相同的学牛几余信息 航空网的几个航班查询题 查出比经理薪水还的员工信息: 、求出小于岁的各个老师所带的大于岁的学生人数 求出发帖最多的人: 、一个用户表中有一个积分了段,假如数据库中有多厅个用户,若要在每年第一凌晨将积分清零,你将考虑什么,你将想什么办法解决 一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他用户 公司的面试 注册驱动程厅的三种方式 用如何调用存储过程 中的 相比 的好处 一个用连接并访问数据的程序代码 的作用为什么要用 人数据量下的分贞解决方法 用 查询学生成绩单把主要代码写出来(考试概牵极大) 这段代码有什么不足之处 说出数据连接池的工作机制是什么 、为什么要用 和 有何不一 六部分 有哪些解析技术区别是什 你在项日中用到了技术的哪些方面如何实现的 用解析文件时如何解决巾文问题如何解析 编用解析的方式 文档定义有几种形式?它们之间有何本质区别?解析文裆有哪几种方式? 七流行的柱架与新技术 谈诙你对的理解 谈谈你对 的理解 的作用。 你对 的理解。 谈谈 中的 优缺点优点:实见模式,结构淸晰使开发者只关注业务逻辑的实巩 的应用如 架构 说说 的区别。 的区别 的和的区别。 简述 和 的优缺点如何书 置文件 有什么不同 的一对多和多对一双向关联的配置 的 属性的作用 在中如何体现设计模式 中委托方案怎么配置 中委托方案怎么配置 进行多表査询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决: 介绍一下 的二级缓存 的依赖注入是什么意思给个 的 属性宇符串癸型注入值为 的 配置文件该怎么写 是什么 什么是的 的工作流程! 与的区别!! 八软件工程与设计模式 方向 用的设计模式?说明工厂模式。 、开发中都用到了那些设计模式用在什么场合 九部分 与的联系与区别 、应用服务器与 的区别? 、应用服务器有那些 是什么? 是技术还是平台还是框架?什么是 、请对以卜在中常用的名词进行解释或简单描述 如何给 指定大小的内存 、如何没定的 的热启动模式廾发模式与产品发布模式 、如何启动时不需输入用广名与密码 管制台中对一个应用域或者说是一个网站 进行及或连接池等相关信思进行置后实际保存在什么文件中 说说 中·个 的缺省日录结构比如要将·个简单的 放入何日录下然的在浏览器上就可打入主机端冂号 就可 以看到运行结果了又比如这其中用到了一个自山写的 该如何办 中发布需涉及到哪些配置文件 如何在 中进行配置与客户端的认证配置或说说标准进行的配置 、如何查看在 中已经发布的 十部分 是基于哪些技术实现的?并说出 和 的区别, 和 的区别 、简要讲一卜的个 的区别? 包括 )说出他们的生命周期,及如何管理事务的? 容器提供的服务 的激活机制 的几种类型 客服端调用对象的几个基本步骤 部分 名词解释。 开发包的介纠 的解释 解释。 是什么用途是什么 下线程,类的解释 问得稀里糊涂的题 、四种公话跟琮技术 简述逻辑操作与条件操作的区别 十二其他 请用英文简单介绍下自己 、请把 首页的这一段话用中文翻译一下 、关资软件公司工程师电话面试题目 这奁面试題主目的是帮助那些还没自软件开发实际作经验,而正在努力寻找软件开发「作的朋友在笔试村更好地赢得笮试和面试、由于这套面试题涉及的范围很泛,很广,很条,大 家不可能一天两天看完和学完这套面试宝典,即使你已绎学讨了有关的技术,那么至少也需要一个冂的时间才能消化和掌据这套面试宝共,所以,大家应该早作准备,从拿到这套面试宝虫之日起 就要坚持在每天闲瑕之余学习其屮几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游少有余了 答趣时,先答是什么,冉答有什么作用和宴注意什么(这部分最重妥,展现自己的心得 答案的段落分别,层次分明,条理清所都≡常重要,从这些面的东西也可以看出一个人的习惯、办事凤格、条理等 讲你做出答案的思路过程,或者说你记仁答窠的思想都与下米、把答越想着是辫论赛。答题就是给別人讲道理、事实。答题不同限J什么格式和形式,就是荽将自己的学识展觋出来! 别因为人家题日木来就模梭两可,你就心王胆怯和没底气了,不改回答了:你要大胆地指出对方题目很模糊和你的观点,不要把面试官想得有多高,其实他和你就是差不多的,你想想,如果他把 你招进去了,你们以后是同丰了,可不是差不多的吗? 关于貮业新水,如果你是应届生,那不能要高工资,好比大饼的掖事,没有文凭还想拿高工资,舭去屮关村缺什么补忄么吧!心数人基础确实很好,在校期冋确实又做过一些项目,那仍然是叮以 要到相对高的工资的 基础部分 基础部分的顺序:基本溍法,类相关的语法,内部类的语法,銖承相关的话法,异常的话法,线軒的语法,集合的语法,的语沄,虚拟札方面的语法。 源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个的类,并且的类名必须与文什名柑一纹 有没有 中的保留字,现在没有在中使用。 说说和的区别。 都可以用作逻辑与的运算符,茭示逻与(),当运算符两边的表达式的结果都为时,整个运算结果才为,膂则,只有一方为,则结果为 还具有短路的功能,即如果笫一个表达式为,则不再计算第二个表达式,例如,对于 表达式,当为时,后面的表达式不会执行,所以不会出现 如果将改为,则会抛出 异常 会增长 不会增长 运可以用作运算符,当操作符两边的表达式不是类型时,表灬按位与j操作,我们通常使用来与j一个整数进行运算,来获取该整的最低个位,例如, 结 为 各注:这道题先说两者的共同点,再说出和的特殊之处,并列翠一些经典的例子来衣明自己理解透彻深入、实际经验丰富 在 中如何跳出当前的多重嵌套循环? 在屮,要想跳出多重循坏,可以在外面的循坏峾句前定义一个标号,然后在里凨循坏体的代砢屮使用带冇标号的语句,即可跳出外只循坏。例如, 外,我个人迂常并不使用标号这种方式,而是让外层的循环条件表达式的结耒可以受到里层循环体代码的控剴,例如,要二维数红中查找到某个数字 语句能否作用在,能否作用在上,能否作用在 只能是一个整数表达式或者枚举常量(夏大字体),整数表达式可以是基本类型吸 包装獎型,由于 都可以隐含转换为,所以,这些类型以 及这些类型的包裝关型也是可以的。显然,和类型都不符合的法规定,并且不能被隐式转换成类型,所以,它们不能作用于 语句中 有什么错 有什么错 对于 由于运算村会自动提升表达式的类型,所以结果恳型,再赋值给类型时,編译器将报告需要彊制转换类型的错误。 对于 由于是溍言妖定的运算筲,编译器会对它进行特殊处理,因此可以正确編译 型变量中能不能存贮一个中文汉字为什么 型变量是来存储 编码的字符的 编砢字符焦中包含了汉字,所以,型变昼中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 编码字符集中,那 么,这个型变量屮就不能存储这个特姝汉字。补充说明: 编码占用两个宇节,所以,类型的变氧也是占用两个字节 各汁:后亩一部分回答虽然不是在正亩回答题日,但是,为了展现自二的学识和表现自对问题解的透彻深入:可以回答一些相关的知识,做到知无个言,言无不尽。 用最有效率的方法算出乘以等於几 因为将一个数左移位,就相当于乘以」的次方,那么,一个数等以只要将其左移位即可,而位运算直接支持的,效率最高,所以,乘以等於几的最效率的方法是 请设计一个一百亿的计算器 首先要明白这道题日的考査点是們么,一是大家首先要对计算杋原理的底层细节要清楚、要知道加减法的位运算原理和知道计算札屮的算术运算会发生越界的情况,是要具备一定的面向对象的 设计思想 首先,计算机中用凹定量的几个字节来仨储的数值,所以计算杋中能黟表示的数值是有一定的范围的,为了便于讲解和理解,我们先E 类型的数为例,它用个字节进行存储,表示的最 大数值范围为到内存中对应的二进制数据为 如果两个相加,不考虑运算时的类型提升,运算斤会产生进位,二过制结果为 由丁进位后超过 类型的 存储空间,所以逃位部分被舍弁,即最终的结果为 ,也就是,这正妤利用溢位的方式实现了负数的运算。在内存屮对应的二进数撫为 如果两个相加,不考虑运算 时的类型提升,算后会产生过位,二进制结果为 由于进位后超过了类型的存储空间,所以进位部分被舍弃,即最终的结果 电$是,这样的结果显然不是我们期望的 这说明计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。由于屮涉及表达式运算时的类型自动提升,我们无法用类型来做演示这种问题 和现象的实验,大家可以用下面一个使用整数做实验的例子科序体验一下 Systen out. p 先不考虑类型,由丁的正数范围为的次方,衣示的最大数倌约等于 巾就是亿的大小,所以,要实现一个一百亿的计算器,我们得自己设计一个类可以用丁表 示很大的整数,并且提供了与另外一个鍪薮进行加叆乘除的功能,大概功能如下 ()这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数 )有一个构造方法,把一个包含有多位数值的宁符串转换到内部的符号和宁节数组 )提供加减乘除的功能 各汴:要想写出这个类的完整代码,是非常复杂的,如果有兴趣的话,可以参看中自带的 类的源。面试的人也知道谌都八可能在短时间内写出这个类的完整代妈的,他要 的是你是否有这方面的概念和意识,他最重要的还是考查你的能力,所以,你不要因为自己无法写出完整的最终结果就放介答这道题,你要做的就是你比别人写得多,证明你比别人强,你有这方面的 思想意识貮可以了,毕竟别人可能连題日的意思郜看不,什么都没写,你要敢于这道题,即使只答了一部分,那也与那些什么都不懂的人区别出来,拉开了离,算是矮子屮的高个,机会当然就 属于你了。另外,答案屮的框架代码也很重要,现了一些面向对象设计的功底,特别是其屮的方法命名很专业,用的英文咩词很精准,这也忌能力、经验、专业性、买语水平等多个方面的体现,会 给人下很好的印象,在編程能力和其他方面条件差不多的情况下,英语好除了可以使你获得更多机会外,新水可以高出一千元 、使用关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 使用关键字修饰一个变量时,是指引用变量不能变,引用变宝所指向的对象中的内容还是可以改变的。例如,对于如下语句: 执行如下语句将报告編译期错诶 但是,执行如下语句则可以遥过编译: 冇人在定义方法的参数时,可能想釆用如下形式米阻止方法内部修改传进未的参数对象: 实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修以参数对象: 和 方法究竟有什么区别? 单独把一个东西说清楚,然后再說清楚另一个,这样,它们的区別自然出来了,混在一起说,则很难说清楚) 操作符专门用来比较个变量的值是香札等,乜就是用于比较变量所对应的內存屮所存储的数值是否札同,要比较两个基本型的数据或两个引用变是否札等,只能用操作符。 如果一个变量指间的数捱是对象类犁的,那么,这时候涉及∫两块内存,对象本身占用一块内存(堆内存).变量也占川一块内存,例如 变量是一个内存, 是另一个内存,此时,变量所对应的内存中存储的爱值就是对象占用的那块内存的首地址。刈于指向刈象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所刈应的内存 中的繳值是合相等,这时恢就禱荽用榤作符进行比较 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独言的。例如,对于下面的代码 两条语句创建了两个对象,然后用这两个变量分别指向∫其中一个对象,这是两个不同的对象,它们的首地川是不同的,即和中存储的数值是不相同的,所以,表达式将返回 而这两个对象中的内容是相同的,所以,表达式 将返回 在实际开发中,我们经常要比较传递进行米的字符皋内容是否等 ,许多人稍不江意就使用进行比较了,这是错误的,随便从网上找几个项目实战的教 学视颂昋看,里面就有大量这样的锆误。记住,字符中的比较基木上都是使用方法 如果一个类没有自己定义 方法,那么它将承 类的 方法 类的 方法的实坝代码如下 这说,如果一个类没有自己定义方法,它默认的法(从类承的)就是使用操作符,也是作比较两个变量指向的对象足霄是同一对象,这时侯使用和使用会 得到冋样的结果,如果比較的是两个独立的对象则总返回如果你編写的关希望能够比较该类创建的两个实例对象的內容是否相冋,那么你必须盖方法,由你自己写代码来决定在什么情 况时可认为两个对象的内容是相同的 静态变量和实例变量的区别? 在语法定义上的区:蔚态变量前要加关键字,而实例变量前则不加 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其屮的实例变氧才会被分配空间,才能便用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为 类变量,以要科序加载了类的字节码,不用创建仟何实例对象,静念变量就会被分配空间,静态变量就可以被使用了。总之,实例变呈必狐创建对象后才可以通过这个对象米使用,静忐变量则可以直 接使用类名来引用 例如,对于下面的程序,无论仓建多少个实例对象,永远都只分配了一个 变量,并且每创建一个实例对象,这个 就会加:但是,每仓建一个实例对象,就会分配一个 即可能分配多个 值都只自加了 各汴:这个解箦除了说清楚两者的区別外,最后还用一个具体的应用例子東说切两者的差异,体现了日冇很好的解说问题和设计案例的能力,思维敏捷,超过一殷和序员,有写作能力! 是否可以从一个方法内部发出对非方法的调用? 不可以。因为非方法是要与对象关联在一起的,必狈创建一个对象后,才可以在该对象上进行方法调用,而方法调用时不髂要创建对象,可以直接调用。也就是说 被调用时,可能还没有创建任何实例对象,如果从一个方法中发出对非方法的调用,那个非方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个方法内部发出刺≡ 方法的调用 与的区别 是提供的种原始数挺类型之 为每个原始类型提供了封装类, 是为提供的封装秀。的欺认值为,而默认值为,即 可以区分出未底值和值 为的区别,则无法表达出未賦偵的情况,例如,要恕表达出没有参加考试和考试成为的区别,则只能佞用 在开发屮, 的默认为,所以用表达式在文本框屮显示时, 值为空白字符中,而认的默认值为,所以用衣达式在文本框中显示时,结果为,所以,不适合作为层的長单数据的类型 屮,如果将定义为类型,那 就可以恨据其倌是否为而判郡一个对象是否是临时的,如果将定义为了类型,还需要在映射文件中没置其 属性为 马外, 提供了多个与整數相关的操作方法,例如,将一个字符帛转换成整数 中还定义了表示整数的最大值和最小值的常量。 等於多少 等於多少 类屮提供了三个与j取整有关的方法 这些方法的作用与j它们的英文名称的含义相对应,例如,的莫文意义是大花板,该方法就表示向上取整, 的结果为 的结果是 的荧文意义是地板,该方法就表示向下取整, 的结果 的结果是;最难掌握的是方法,它衣示“四舍五入”,算法为 ,即将原来的数宁加上后再向卜取,所以 的结果为 的结果为 下面的代码有什么不妥之处 请说出作用域 ,以及不写时的区别 这四个作用域的可见范围如下表所示。 说明:如果在修饰的元素上没有写仁何访问修饰符,则表示 作用域当前类同一 子孙类其他 √ 各注:只要汜住了有种汸问杈限,个访问范围,然后将全选和范囯冇水平和酝直方向上分别按排从小到大或从人到小的顺厅排列,就很容易出上面的图了 和 的区别。 的方法是否可以改变返回值的类型 是重线的意思 是衔盖的意思,也就是重写 重载 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不杜同(即参数个数或类型不同) 車写 表示子类中的方沄可以与父类中的某个方法的名称和参数完仝相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于担父类中定义的形个完全相同的 方法给了,这是面问对象缩程的多态性的一种表现。子类芷父类的方法时,只能比父类抛出更少的异常,改者是抛出父类出的异常的子异常,因为子类可以解决父类的一些问题.不能比」 类有更多的问题,子类方法访问权限只能比父类的人,个能更小,如耒父类的方法是 长型,那么,子关则不存在獲盖的限制,相当丁」类中增加了 新的方法 至于 的方法是否可以改变返回值的关型这个问题,要看你倒底想闩什么呢?这个题日很模制。如果几个 的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但 我估计你想问的问题是:如果两个方法的参数列完全一样,是否可以让它们的返同值不同来实现重载 这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也 可以不定义返回结果变量,不妥关心其返回结果,例如,我们调用 方法时,虽然 方法冇返回值,但是我们诋常都不会定义接收返回结果的变量,这时候假设该类中有两个名 称和参数列衣完仝相冋饷方法,仅仅足返叫类型不同,就无法确定編程者倒底是想调用哪个方法了,因为它无法通过返冋结堪类型来判断 可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般股 只是对方法进行了声明,而我们在实现时,就甯要实现接∏声明的所有方法。除∫这个典型的用法以外,我们在继求中也可能会在」类爱盖父类中的方法。在獲盖要注意以 下的儿点 、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果: 、覆盖的方法的返回值必须和被覆盖的方法的返回致; 覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类: 被覆盖的方法不能为 否则在其子类中只是新定义了一个方法,并没有对其进行覆盖 对我们米说可能比较熱悉,可以翻译为重载,亡是措我们可以定义一些名称相冋的方法,通过定义不同的输入参数κ区分这些方法,然后再词用时,就会根据 不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点: 、在使用亘载时只能通过不同的参数样式。例如,不可的参数类型,不同的参数个戣,不冋的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是 但是不能为 、不能通过访问杈限、返回类型、拋出的异常进行重载 方法的异常类型和数日不会对重找造成影响 4、对于继来说,如果某一方法在父类中是访问权限是 prawle,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不 会达到重载的效果。 、构造器 是否可被 构造器 不能被銖承,因此不能重写 但可以被亘或 、接口是否可继承接口抽象类是否可实现 接口抽象类是否可继承具体类 抽象 类中是否可以有静态的方法? 按口可以继承接口。油象类可以实现 接口,油象类是合可继具体类。抽象类中可以有静态的方法 各汴:只要眀白」接口和抽象类的本质和作用,这些问题都很好回答,你想想,如你是语言的设计者,你是合会提洪这样的攴持,如果不提供釣证,有什么理由吗?如耒你没有道理不提供, 那答案就是肯定的了 只有记仨抽象类通类的唯一区别就是不能创建实例对象和允许有 写 方法时,通常都有一行代码,是什么? 有缺省行为, 因为自先要把父类中的成员复制到位,然后才是复制自己的成员 、面向对象的特征有哪些方面 计算机软件系统是觐头生活中的务在计算机中的叭射,而现实生活中的业务其实就是一个个对象协作的过。面向对象编秆就是按现实ν务一样的方式将稈序代码按一个个对象进行组织和编写 让计算机系统能够识别和理解用刈象方式俎织缃写的程序代码,这栟就可以把现灾生汘中的业务对象映射到计算机系统中 对象的编程话言有封裝、笙承、抽象、多奁等个主奖的特征。 封装 封装是保证钦件部件具有伉良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”防止程序相互依爔性而带来的变动影晌。在面向对象的编程语言中,对象是封装 的最基本单位,面向对象的封装比传统语言的封裝更为清晰、更为有力。面向对象的封装就是把描运一个对象的属性和行为的代码封装在一个“模块”中,乜就是一个类屮,属性用变量定义 为用方法进行定义,方法可以百核访问同一个对象中的屈性。道常情下,只要记住让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己的方法才可以 访问到这些成员变量,这就基本上实现对象的封装,就很容易找出要分配到这个类上的方法了,就基本上算是会面向对象的编程了。把握一个原则:把对同一事物进行操作的方法和相关的方法放在同 一个类中,把方法和它操作的数据放在同一个类中。 例妇,人要在黑板上画圆,这一其涉及三个对象:人、黑板、圆,匪圆的方法要分配治哪个对象呢?由于画圆需要使用到圆心和半径,圆心和半径显然是的属性,如果将它们在类屮定义成了私 有的成员变量,那么,画圆的方法必须分配给圆,它才能访问到圆心和半径这两个属性,人以后只是调用陨的画同方法、表示给同发给消息而已,画圆这个方法不应该分配在人这个对象上,这就是面 向对象的封装性,即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。一个史便于埋解的例子就是,可机将火车剽住∫,刹的作是 配给司机,还是分配给火车,显然,应该分配给火车,因为可机自身是不可能有那么大的力气将一个火车给停下米的,只有火车自己才能完成这一动作,火车箭奖调用内部的离合器和刹车片等多个 器件协作才能完成刹车这个动作,可机刹车的过程只是给火车发了一个消思,通知火车要执行刹车动作而已 抽象 抽象是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在 前日标冇关的方面。例如,看到一只蚂蚁和大象,你能够想象岀它们的相同之处,那就是抽象。拙象包拈行为抽象和状态抽象两个方面。例如,定义 人木米烂很复杂的事物,有很多方面,但因为当前系统只耑要了解人的姓名和年龄,所以上面定义的类中只包含姓名和年龄这两个属性,这就是一种抽像,使用抽象可以避免考虑一些与 日标无关钓细节。我对抽象的堽解貮是不要用昰微镋去看一个事物的所冇方面,这咩涉及的内窣就太多了,而是要声于划分问题的边界,当前系统需要什么,就只考虑什么。 继承 在定义和实现·个类的时侠,可以在·个已经存在的类的基础之上米进行,把这个已经存件的类所定义的内容作为白己的内容,并可以加入若干新的内容,或修改原米的方法使之更适合 特殊的需要,这就是埊承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高」软件的可重用性和可扩展性。 多态 多态是指程序中定义的引用变量所指向的具体型和通过该引用变量发山的方法调用在编程时并不确定,而是在程序运行期间才确定,即个川用变量倒底会指向哪个类的实例对象,该 小用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代吗,就可以让引用变量绑定到各种 不同的类实现上,从而导孜该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行吋所绑定的兵体代码,让程序可以选择多个运行状态,这就是多态性。多态 性增强∫软件的灵活性和扩展性。例如,下面代码中的 是一个接口,它定义引用变量 指向的实例对象由 在执行的时候返回,有时候指向的是 这个实现,有时候指向的是 这个实现,这样,不用修改源代码,就可以改变 指向的具体类实现,从而导致 方法调 用的只体代码也随之改变,即有时候调用的是 方法,有时候调用的是 的 方法 比喻:人吃饭,你看到的是左于,还是右于? 中实现多态的机制是什么? 霏臼是父类或接口定义的引用变可以指向了或具体实现类的实例对象,而桿序凋用的方法在运行則才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里止在运 的那个对象的方法,而不是引用变量的类型中定义的方法 和 有什么区别 含有 修饰符的即为批象类, 类小能创建的实例对象。含有 方法的类必须定义为 类中的方法不必是扯象的。 类中定义柚象方法 必须在具体 子类中实现,所以,不能有袖象枃造方法或抽象諍态方法、如果的子类没勹实现象父类中所有抽象方法,那么子羹也必须定义为 类型 接 )可以说成是油象类的一种特例,接口中的所有方法都必演是扯象的。接口中的方法定义默认为 类型,接口中的成员变量类型默认为 下面比较一下两者的语法区别: 抽象类可以冇构造方法,接口中不能冇构造方法 抽象类屮叮以有誓通成员变景,接口屮没有普通成员变量 柚象类中可以包含非扣象的普道 接口中的所有方法必狈都是扯象的,不能有非抽象的普通方法 类屮的抽象方法的访问类型可以是 和(默认类型虽然 下不报错,但应该也个行),但接山中的抽象方法只能是类型的,并且默认即为 抽象类中可以包含静态方法,接口中不能包含静态方法 扯象类和接口中都可以包含静态成员变量,抽象类中的静念成员变量的访问类犁可以任意,但接口中定义的变量只能是 类犁,并且认即为 个类可以实现多个接,但只能继承个抽象类 下面接着冉说说两者在应用上的区别 按凵更多的是在系統架构设计方法发挥作用,主用于定义模块之间的通信奚约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应 假设某个项目的所有 祁要用相同的方式进行权限判析、记录访问凵志和处皿异常,那么就可以定义一个抽象的基类,让所有的 承这个抽象基类,在抽象基类门 法中完成 杈限判斷、记录访问日和处理异常的代码,在各个子类屮只是完成各自的业逻辑代码,伪代码如下: 记求访问凵志 行权限判断 具有权限 记录异常信息 注意访问权限定义成 显得既专业,又严谨,因为它是专门给子类用的 只处理的具体业务思代码 父类方法中的某段代码不确定,留给子类T,龇用模板方法设计模式。 各注:这道題的思路是先从总体解释袖象类秈茡凵的基木柷念,然后冉比较两者的珸法细节,最后说两者的应用区屴。比較两者语法细节区別的条理是:艽从一个类中釣枃造方法、普通成员变 量和方法(包拒抽由象方法),静态变量和方法,继承性等个方面一去比较回答,着从第三者继承的度的回答,特别是最后用了一个典型的例子來展现自己深厚的抆术功底。 的 是否可同时是是否可同时是是否可同时是 不可以是的,因为抽象的方法是宴被子类实现的,而与子类不上关系 方沄々示该方法要用弜夕一种恢赖平台的编程语吉实现的,不存在蓍被子莢灾现的问题,所以,它也不能是抽象的,不与 混用。如 米要硬件打交道,底层的实 现用的是燥作系统札关的实坝,例如,在用语言实现的,所以,查看的源代码,可以发现 的方法的定义如下 如果我们要用调用別人写的语言函数,我们是无法直接调用的,我们需要按照的要求写一个语言的数,又我们的这个语言函数去调用别人的语言函数。由于我们的语言函数 是按^娈求来写的,我们这个语言函数就可以与对接 那边的对接方式就是定义出与我们这个函数相刈应的方法,中对应的方法个要写具体的代码,但要在前面声明 关于 合用的问题,我觉得也不行,因为在我几年的学习和开发中,从米没见到过这种情况,并且我觉得 应该是作用在一个具体的方法上才有意义。而且,方法 上的 同步所使用的同步锁刈象是,而抽象方法上无法确定是什么 什么是内部类? 和 的不同。 内部类就是在一个类的内部定义的类,内部类中不能定义普态成员(静态成员个是对象的特性,只是为了找一个容身之处,所以需要放到一个类中而已,这么一点小事,你运要把它放到类内部的 个类屮,过分了啊!提供內部类,不是为让你这种事情,无聊,不让你「。我想叮能是既然静态成员癸似语言的全局变量,而內部类通常是用于创建內部对歙用的,所以,把“全局变量”放在 内部类屮就是毫无意义的事情,既然是亳无意义的事情,就应该被禁止),内部类可以直接访间外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中,如下所示 在方法体内部定义的内部类 在方法体外面定义的内部类 在方法体外而定义的内部类的访问类型可以是 默认的,等种癸犁,这就好像类中定义的成员变量有种访问类型一样,它们决定这个內部类的定义对其他类是否可见:对于 这和情况,我们也可以在外面创寔內部类的实例对象,创建內部类的实例对象时,一定要先创寔外部类的实例对象,然后用这个外部类的实例对象去创内部类的实例对象,代码如下 冇方法内部定义的内部类前百不能有访问类型修饰符,就好像方法中定义的局部变量一样,但这种内部类的前面可以使用或 修饰符,这种内部类刈其他类是不可见的其他类无法引用 这和部类,但是这种内部类创建的实例对象可以传递给其他类访向。这种内部类必须是先定义,后使用,即内部类的定义代码必须出现在使用该之前,这与方法中的局部变量必须先定义后使用的 道理也是一样的。这种內部类可以访问方法休屮的局部变量,但是,该局部交量前必须加修饰符。 丁这些细节,只要在写代码试 写代码试试,根捱开发工只提示的各类错误信息就可以马上了解 在方法俸内部还可以湫用如下话法来创建一和楉名内部类,即定义某一接口类的子类的同时,还食建了该子类的实例对象,无術为该子类定义名称: 最后,在方法外部定义的内部类前面可以加上关键字,从而成为 它不再具有内部关的特性,所有,从狭义上讲,它不是内部关 与通类在运行时的行 为和功能上没有汁么区別,只是在编程引用时的语法上有一世差别,它可以定义成 默认的、等多种类型,ⅲ普通类只能定义成和默认的这两种类犁。在外面引用 类的名称为“外部类名内部类名”。在外面不需要创建外部类的实例对象,就可以直接创 例如,假设是定义在类屮 那么可以使用如卜语句 创建 由于 不依赖于夕部类的实例对象,所以, 能访问外部类的非成员变量。当在外部类中访问 时,可以直接使用 的名字, 而不需要加上外部类的名宁了,在 屮也可以直接引用外部类的的成变量,不需要加上夕部类的名宁。 在静念方法中定义的内部类也是 这时候不能在类面加关键字,静念方法中的 与普道方法中的内部类的应用方式很相似,它除了可以直接访问外部类 屮的的成员变量,还可以访间静态方法屮的局部变量,但是,该局部变量前必须加修饰符 各注:首先根据你的印象说出你对內邹类的总体方面的特点:例如,在两个地方可以定义,可以访问外部关的成员变量,不能定义态成员,这是大的特点。然后再说一些细节方面的知识,例如, 几和定义方式的语法区别,蔚态内部类,以及匿名内部类 内部类可以引用它的包含类的成员吗?有没有什么限制? 亢仝可以。如果个是静念内部类,那没有什么限制 如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类屮的静态成员,例如,下面的代码 答题时,也要能察言观色,指摩提问者的心思,显然人家希望你说的是静态内部类不能访问外部关的成员,仁你一上来就顶牛,这不好,要先順着人家,让人家满意 然后再说特殊情况,让人家吃惊

...展开详情
试读 74P Java面试葵花宝典
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 分享达人

关注 私信
上传资源赚钱or赚积分
最新推荐
Java面试葵花宝典 10积分/C币 立即下载
1/74
Java面试葵花宝典第1页
Java面试葵花宝典第2页
Java面试葵花宝典第3页
Java面试葵花宝典第4页
Java面试葵花宝典第5页
Java面试葵花宝典第6页
Java面试葵花宝典第7页
Java面试葵花宝典第8页
Java面试葵花宝典第9页
Java面试葵花宝典第10页
Java面试葵花宝典第11页
Java面试葵花宝典第12页
Java面试葵花宝典第13页
Java面试葵花宝典第14页
Java面试葵花宝典第15页

试读结束, 可继续读5页

10积分/C币 立即下载 >