黑马点招面试问题

上传人:r****d 文档编号:101757738 上传时间:2022-06-05 格式:DOC 页数:41 大小:228KB
收藏 版权申诉 举报 下载
黑马点招面试问题_第1页
第1页 / 共41页
黑马点招面试问题_第2页
第2页 / 共41页
黑马点招面试问题_第3页
第3页 / 共41页
资源描述:

《黑马点招面试问题》由会员分享,可在线阅读,更多相关《黑马点招面试问题(41页珍藏版)》请在装配图网上搜索。

1、1. 静态变量和实例变量的区别局部变量不能用静态的,如果用了静态的,则不会从静态区消失* 静态变量也叫类变量 成员变量也叫对象变量* A:所属不同* 静态变量属于类,所以也称为为类变量* 成员变量属于对象,所以也称为实例变量(对象变量)* B:内存中位置不同* 静态变量存储于方法区的静态区* 成员变量存储于堆内存* C:内存出现时间不同* 静态变量随着类的加载而加载,随着类的消失而消失* 成员变量随着对象的创建而存在,随着对象的消失而消失* D:调用不同* 静态变量可以通过类名调用,也可以通过对象调用* 成员变量只能通过对 象名调用2. Interger和int的区别int是java提供的8种

2、原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况, 另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。3. 谈谈你对面向对象的理解如何大象装进冰箱?面向过程:为了把大象装进冰箱,需要3个过程。1) 把冰箱门打开(得到打开门的冰箱)2) 把大象装进去(打开门后,得到里面装着大象的冰箱)3) 把冰箱门关上(打开门、装好大象后,获

3、得关好门的冰箱)每个过程有一个阶段性的目标,依次完成这些过程,就能把大象装进冰箱。1:冰箱开门(冰箱)冰箱装进(冰箱, 大象)冰箱关门(冰箱)=换个写法(冰箱开门 冰箱)(冰箱装进 冰箱 大象)(冰箱关门 冰箱)2:冰箱关门(冰箱装进(冰箱开门(冰箱), 大象)=换个写法(冰箱关门 (冰箱装进 (冰箱开门 冰箱) 大象)面向对象:每个动作有一个执行者,它就是对象。1) 冰箱,你给我把门打开2) 冰箱,你给我把大象装进去(或者说,大象,你给我钻到冰箱里去)3) 冰箱,你给我把门关上依次做这些动作,就能把大象装进冰箱。1:冰箱.开门()冰箱.装进(大象)冰箱.关门()2:冰箱.开门().装进(大象

4、).关门()4. 谈谈面向对象的三个特征,分别是什么? 各特征有什么优缺点?(封装 继承 多态)封 装(:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。好处:将变化隔离;便于使用;提高重用性;安全性。继 承好处:1:提高了代码的复用性。2:让类与类之间产生了关系,提供了另一个特征多态的前提。多 态:函数本身就具备多态性,某一种事物有不同的具体的体现。体现:父类引用或者接口的引用指向了自己的子类对象。/Animal a = new Cat();多态的好处:提高了程序的扩展性。多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。

5、我理解的多态与继承体系有关,与方法覆盖有关,与方法重载无关。5. 重写和重载的区别?1、重写override概念(掌握) 子父类关系中,子类中存在与父类中方法声明完全一样的方法叫重写 一句话:除了方法体以外其他都相同,但是子类修饰符权限要大于等于父类2、重载overload概念(掌握) 一个类中或者子父类关系中存在多个同名方法,并且参数列表不同的方法 叫重载 子父类关系中:子类中的方法和父类中的方法构成了重载关系3、重写的作用应用(理解) 升级改造父类的方法4、注意(掌握) 只有方法才存在重写,变量不存在6. 构造方法的特点?* A:构造方法概述和作用* 给对象的数据(属性)进行初始化* B:

6、构造方法格式特点* a:方法名与类名相同(大小也要与类名一致)* b:没有返回值类型,连void都没有* c:没有具体的返回值return;(有return 语句 return;)当创建对象的时候,系统就调用了构造方法; 构造方法不能用对象调用7. Static关键字有什么特点,静态方法是否可以加this和super?为什么1、概述 1、static 可以修饰成员变量和成员方法 2、被static修饰的成员有一个最大的特点,就是可以被该类下所有的对象共享2、什么时候用 多个对象共享某一数据的时候,我们就把这个数据用static修饰.举例:小鸡吃食3、特点(掌握) 1、被static修饰的内容随

7、着类的加载而加载,优先于对象存在 2、可以直接通过类名调用 3、被该类下所有对象共享4、注意事项 1、在静态方法中是没有this关键字,因为静态是随着类的加载而加载。而this是对象创建才存在的 2、静态方法只能访问静态成员变量和静态成员方法 一句话 静态只 能访问静态 3、静态内容可以通过对象调用,也可以通过类名调用。推荐使用类名调用8. 多态的特点(包括多态中调用成员的特点)1、概念-什么是多态(掌握) 对象在不同时刻表现出来的不同状态。2、针对引用类型的理解 编译期间状态和运行期间状态不一样 比如 Person p = new Person();/第一行 p = new Man();/第

8、二行 p = new Woman();/第三行 p在第一行和第二行的状态是不一样的,在第一行表示人对象,在第二行表示学生对象3、举例 水(水,冰,水蒸气) 狗:狗是狗,狗是动物,狗是宠物,狗是食物/该处强调谁是谁的一种4、前提条件(掌握) A:要有继承关系或实现关系 B:要有方法重写或实现关系 C:要有父类引用指向子类对象,或父接口引用指向子类对象 1、成员变量 编译看左边,运行看左边。/就是因为变量不存在重写(掌握) Fu fu = new Zi(); System.out.println(fu.name);/调用的是父类的name属性 2、非静态成员方法 编译看左边,运行看右边。/因为方法

9、存在重写(掌握) Fu fu = new Zi(); fu.show();/调用的是子类的show() 3、产生以上现象的原因(掌握) 因为方法有重写,变量没有 总结一句话:方法运行看右边* 成员变量* 编译看左边(父类),运行看左边(父类)。* 成员方法* 编译看左边(父类),运行看右边(子类)。* 静态方法* 编译看左边(父类),运行看左边(父类)。* (静态和类相关,算不上重写,所以,访问还是左边的)* 只有非静态的成员方法,编译看左边,运行看右边 9. 抽象类和接口的区别?抽象类和接口的关系(掌握)抽象类: 成员变量:可以是变量,也可以是常量。 构造方法:有构造方法。 成员方法:可以是

10、抽象方法,也可以是非抽象方法。接口: 成员变量:只能是常量。 默认修饰符:public static final 成员方法:只能是抽象方法。 默认修饰符:public abstractA:抽象类只能被单继承;接口可以被多实现。B:抽象类中的成员:成员变量:可以是常量,也可以是变量。成员方法:可以是抽象的,也可以是非抽象的。构造方法:虽然不可以创建对象,但是可以给子类实例化用。接口中的成员:成员变量:只能是常量。默认修饰符 public static final成员方法:只能是抽象的。默认修饰符 public abstractC:抽象类中定义的是体系结构中的共性的内容。接口中定义的是对象的扩展功

11、能。D:抽象类被继承表示的是:is a的关系。xx是yy中的一种。接口被实现表示的是: like a的关系。xx像yy中的一种。10. 抽象类中能是否可以有构造方法?构造方法 有构造方法,但是不能通过构造方法创建对象问:既然不能被实例化,那么有构造方法有什么用?答:可以用于子类访问父类数据前,对父类数据进行初始化。11. 接口中是否可以有构造方法?没有构造方法因为接口中的成员变量都被final修饰,定义的时候必须做初始化任何类如果没有继承父类,那么这个类就继承自Object类。/所有类都直接或者间接的继承自Object类。Object类是所有类的超类12. 接口是否可继承接口? 类与类:继承关

12、系,只能单继承,可以多层继承。类与接口:实现关系,可以单实现,也可以多实现。并且还可以在继承一个类的同时实现多个接口。接口与接口:继承关系,可以单继承,也可以多继承。13. 抽象类是否可实现(implements)接口? 可以14. 抽象类是否可继承具体类(concrete class)? 可以class Toolabstract class List extends Tool 15. 抽象类中是否可以有静态的main方法?可以public static void main(Strirng args)只抽取了很多类的方法的声明,为了保证不出问题,方法声明用abstract修饰。(掌握)16.

13、抽象类的特点(掌握)(演讲内容)A:一个类如果有了抽象方法,那么这个类必须是抽象类。抽象类里边可以没有抽象方法。B:抽象类是不能够被实例化的。不能够创建对象的。C:如果一个类继承抽象类,那么,它要么实现抽象类中的所有抽象方法,要么本身也是抽象类。17. 抽象类的成员特点:(掌握)A:成员变量:子类可以直接继承抽象类中的成员变量。(抽象类中的成员变量可以和以前是一样的)B:成员方法:抽象类中分为两种方法,一种是抽象方法,这种方法在子类中必须要被实现。C:构造方法:抽象类不能被实例化,那么它有构造方法吗?抽象类是class,那么它就有构造方法。它的构造方法有用吗?有,为了让子类实例化的时候使用。1

14、8. 抽象类的相关问题:A:抽象类中是否有构造函数?B:抽象关键字abstract不可以和哪些关键字共存?private私有的,外部直接无法访问。static那么这个时候抽象方法就可以可以通过类名调用,但是这样是没有意义的。finalfinal修饰的方法不能被重写。所以它和abstract冲突。C:抽象类中可不可以没有抽象方法?可以。防止其他类创建该类对象。19. 接口特点:(掌握,演讲面试题)A:接口是对外暴露的规则B:接口是功能的扩展C:接口降低了程序的耦合性。*内聚(自己实现功能的能力) *高内聚,低耦合。举例:主板和CPU,USB接口,电源插座。D:扩展说了下接口的理解*狭义的理解就是

15、java中的接口。*广义的理解就是:任何定义的规范都是接口。20. 什么叫匿名对象* A:什么是匿名对象* 没有名字的对象 * B:匿名对象应用场景调用方法,仅仅只调用一次的时候。匿名对象可以作为实际参数传递那么,这种匿名调用有什么好处吗?* 节省代码;匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。21. 匿名内部类和匿名对象的区别(理解)不同点匿名内部类是一个继承了类或者实现了接口的子类对象匿名对象就是这个类的本类对象相同点都作为实际参数传递时使用,或者该对象的方法只调用 1次的时候使用.注意:一般情况匿名对象或者匿名内部类对象里面最多有3个方法无论是匿名内部类还是匿名对象,一般使用方式1

16、、只调用该类中的一个方法,这种情况一般该抽象类或者该接口只有一个抽象方法时使用2、作为实际参数传递(一般该匿名对象或匿名内部类中的方法不超过3个)22. 什么是内部类?B类如果要直接使用A类中的 所有(包括私有 ) 成员的时候就把B类定义到A类里面内部类访问特点* a:内部类可以直接访问外部类的成员,包括私有。* b:外部类要访问内部类的成员,必须创建对象。* 外部类名.内部类名 对象名 = 外部类对象.内部类对象;静态的:外部类名.内部类名 对象名 = 外部类对象.内部类;23. 介绍一下匿名内部类?概念:没有名字的局部内部类 (掌握)前提:必须存在一个类,抽象类或者接口(掌握) 格式: (

17、掌握) new 类名或接口名() /重写类或者接口中的方法 /也可自定义方法 ; 本质:其实就是继承了一个类或者实现了一个接口的匿名的子类对象(掌握) 24. 匿名内部类中的方法是否可以调用局部变量?为什么?局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用25. 介绍一下异常?异常就是Java

18、程序在运行过程中出现的错误Throwable |Error 严重的错误,比如硬件坏了 |Exception |RuntimeException 运行时异常,不需要处理,需要改代码 |非RuntimeException 编译时异常,需要处理26. Throw和throws的区别?有几种方式处理?A:throw用法:用在方法内部,后面跟的是异常对象。区别:用 throw抛出了编译时期异常,方法上面必须用 throws抛出。 用throw抛出了运行时期异常,方法上面可以不用 throws抛出。B:throws用法:用在方法声明上,后面跟的是异常类名。区别:用 throws在方法上声明了异常,内部可以

19、没有 throw* a:throws* 用在方法声明后面,跟的是异常类名* 可以跟多个异常类名,用逗号隔开* 表示抛出异常,由该方法的调用者来处理* b:throw* 用在方法体内,跟的是异常对象名* 只能抛出一个异常对象名* 表示抛出异常,由方法体内的语句处理27. 谈一下set和list的区别set集合元素存入取出有序,元素可以重复list集合元素存入取出无序,元素唯一28. String类的特点?与Stringbuffer有什么区别?特点及注意事项 字符串一旦被赋值,就不能改变。 注意:字符串的值不能改变,引用是可以改变的。String是一个不可变的字符序列StringBuffer,St

20、ringBuilder是可变的字符序列29. 说一说list得三个子类?以及list的遍历方式有几种?list ArrayList:底层是数组,线程不安全,不同步;查询快,增删慢LinkedList:底层是链表,线程不安全,不同步;增删快,查询慢Vector:底层是数组,线程安全;普通for循环迭代器遍历 Listiterator增强for循环30. 说一说set集合是怎么样保持唯一性的?* 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数* 当HashSet调用add()方法存

21、储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象* 如果没有哈希值相同的对象就直接存入集合* 如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存* 类中必须重写hashCode()和equals()方法* hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)* equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储31. 说一下Map?HashTable和HashMap的区别* HashM

22、ap和Hashtable的区别 都是双列集合 都是Hash算法实现的* Hashtable是JDK1.0版本出现的,是线程安全的,效率低, HashMap是JDK1.2版本出现的,是线程不安全的,效率高* Hashtable不可以存储null键和null值, HashMap可以存储null键和null值32. 说一说集合体系?只有Vector和HashTable是线程安全的,效率低Collection(单列集合)|-Collection(单列) |-List(有序,可重复) |-ArrayList 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高。 |-Vector 底层数据结构是数组

23、,查询快,增删慢。 线程安全,效率低。 |-LinkedList 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高。 |-Set(可能无序,肯定唯一) |-HashSet 底层数据结构是哈希表。 线程不安全,效率高。怎么保证唯一性的呢? 它依赖两个方法:hashCode()和equals() 顺序:首先判断hashCode()值是否相同。同:继续走equals(),看返回值;如果true:就不添加到集合。如果false:就添加到集合。不同:就添加到集合。 |-TreeSet 底层数据结构是二叉树。 线程不安全,效率高。 怎么保证唯一性的呢?是根据返回是否是0。 怎么保证排序的呢?两种方

24、式 自然排序(元素具备比较性) 实现Comparable接口 比较器排序(集合具备比较性) 实现Comparator接口Map(双列集合)|-Map(双列 底层结构是针对键有效,跟值无关) |-HashMap 底层数据结构是哈希表。 线程不安全,效率高。允许null键和值 怎么保证唯一性的呢? 它依赖两个方法:hashCode()和equals() 顺序: 首先判断hashCode()值是否相同。 同:继续走equals(),看返回值 如果true:就不添加到集合。 如果false:就添加到集合。 不同:就添加到集合。 |-Hashtable 底层数据结构是哈希表。 线程安全,效率低。不允许n

25、ull键和值 怎么保证唯一性的呢? 它依赖两个方法:hashCode()和equals() 顺序: 首先判断hashCode()值是否相同。 同:继续走equals(),看返回值 如果true:就不添加到集合。 如果false:就添加到集合。 不同:就添加到集合。 |-TreeMap 底层数据结构是二叉树。 线程不安全,效率高。 怎么保证唯一性的呢?是根据返回是否是0。 怎么保证排序的呢?两种方式 自然排序(元素具备比较性) 实现Comparable接口 比较器排序(集合具备比较性) 实现Comparator接口33. Map集合的遍历方式?创建Map集合/ 创建集合对象 Map map =

26、new HashMap(); / 创建并添加元素 map.put(杨过, 小龙女); map.put(郭靖, 黄蓉); map.put(梁山伯, 祝英台); map.put(牛郎, 织女);第一种遍历方式(通过keySet() Set keySet = map.keySet(); for(String key : keySet) System.out.println(key:+key+ value+map.get(key); 第二种遍历方式(通过entrySet() SetEntry entrySet = map.entrySet(); for(Map.Entry entry : entryS

27、et) System.out.println(key+entry.getKey()+ value+entry.getValue(); 34. 集合怎么添加一个元素和一个集合?Collection集合:add() 添加一个元素addAll();添加一个集合中的所有元素Map集合:put(key,value):当存储的键相同时,新的值会替换老的值,并将老值返回。如果键没有重复,返回nullvoid putAll(Map)35. Io流体系?36. 新建BufferedWriter InputStream对象的时候, 参数列表传递什么内容?37. 什么情况下用flush()? flush只刷新缓冲区

28、,不释放流资源,流对象还可以继续使用 close刷新并且释放流资源,流对象不可以继续使用38. mp3文件的复制用的是什么流?复制文件的步骤?39. 哪个流有readLine()newLine()40. 什么是序列化流以及特点?41. 高效流是怎么实现高效的?42. 与流关系密切的集合?43. 谈谈Properties集合?property集合是用来做什么的?44. 多线程有哪几种方式?具体?45. 什么是进程?什么是线程?46. 说一说线程的生命周期?47. 说一说线程通信?为什么会出现线程不安全?48. Sleep()和wait()的区别?Start()和run()的区别?49. 介绍一下

29、同步?* 当多线程并发, 有多段代码同时执行时, 我们希望某一段代码执行的过程中CPU不要切换到其他线程工作. 这时就需要同步.* 如果两段代码是同步的, 那么同一时间只能执行一段, 在一段代码没执行结束之前, 不会执行另外一段代码. 多个线程必须使用同一个锁对象,要不然锁无效* 使用synchronized关键字加上一个锁对象来定义一段代码, 这就叫同步代码块* 多个同步代码块如果使用相同的锁对象, 那么他们就是同步的 /非静态的同步方法的锁对象是神马? /答:非静态的同步方法的锁对象是this /静态的同步方法的锁对象是什么? /是该类的字节码对象 50. TCP和UDP的特点UDP 1.

30、不需要建立连接; 2.有数据大小限制,每个数据报的大小在限制在64k; 3.无连接,是不可靠协议; 4.速度快。TCP 1.在连接中进行大数据量传输(数据无限制); 2.通过三次握手完成连接; 3.是可靠协议; 4.必须建立连接,效率会稍低。51. 网络通讯三要素?端口:每个程序分配一个端口号ip:给每一个设备分配地址协议:定义的规则52. 理解JDK,JRE,JVM都是做什么的?JDK是Java Develop Kit,Java的开发工具包 (JRE+JAVA开发工具)JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM

31、标准实现及Java核心类库。JVM是Java虚拟机JDKJREJVM53. & 和&逻辑与:a&b是把a和b都转换成二进制数然后再进行与的运算;&对每一个都判断;有false则false短路与:a&b就是当且仅当两个操作数均为true时,其结果才为true;只要有一个为零,a&b就为零。&具有短路效果,左边是false,右边不执行54. | 和 | 逻辑或:有true则true短路或:|:如果左边为true,右边不执行55. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?基本数据类型可以接收byte,short,char,int引用数据类型可以接收枚举(

32、JDK1.5),String字符串(JDK1.7)56. continue和break两个关键字的区别?break:结束当前循环,循环不再继续continue:结束本次循环,循环进入下一次开发过程中如果要使用break或者continue,一般在前面我们都要加一个判断break 和continue后面不能写语句,一般配合if语句使用57. 函数的重载(overload)是什么?如何判断两个函数重载?在同一个类中,函数名相同,参数列表不同(参数类型和个数),与返回值类型无关58. char型变量中能不能存贮一个中文汉字?为什么? 一个字符占几个字节?(面试题)可以。因为Java语言采用的是Uni

33、code编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节所以,Java中的字符可以存储一个中文汉字中文在gbk编码中占2个字节;中文在utf-8编码中占3个字节;59. 面向对象思想?(理解)A、什么是面向对象(3点)1、面向过程是以函数为基础,完成各种操作,强调的是过程,比如C语言2、面向对象以对象为基础,完成各种操作,强调的是对象和结果3、面向对象是基于面向过程的B、面向对象的思想特点1、是一种更符合人们思考习惯的思想2、复杂的事情简单化3、把我们从执行者变成了指挥者C、举例1、买电脑2、洗衣做饭3、旅游4、把大象装进冰箱(伪代码体现)5、买蛋糕60. 思考下面的问题

34、Person p = new Person(); (掌握,面试题)它在内存中做了哪些事情?(演讲内容)A:将Person.class文件加载到内存中。B:在堆内存中创建一个对象Person。C:把Person中的属性进行默认初始化。D:把Person中的属性进行显示初始化。E:调用构造代码块(如果没有,不执行这个操作)。F:调用构造函数进行初始化。G:在栈内存中声明Person类型的变量P。H:把堆内存的地址(引用)赋给了栈内存中P。61. 描述一下JVM加载class文件的原理机制?(面试题) 答案: JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoad

35、er 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。62. static关键字、静态的含义?(理解)1、static 可以修饰成员变量和成员方法2、被static修饰的成员有一个最大的特点,就是可以被该类下所有的对象共享3、随着类的加载而加载4、优先于对象存在5、可以通过类名调用63. 静态的用法和特点?(掌握)* a:随着类的加载而加载* b:优先于对象存在* c:被类的所有对象共享* 举例:咱们班级的学生应该共用同一个班级编号。* 其实这个特点也是在告诉我们什么时候使用静态?* 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。* d:可以通过类名调用

36、* 其实它本身也可以通过对象名调用。* 推荐使用类名调用。* 静态修饰的内容一般我们称其为:与类相关的,类成员64. 16.举例:教师举例,学生举例,员工举例65. 学生:StudentA:属性:学号,姓名,年龄 B:方法:学习(study),吃饭(抽象eat),抽烟或者不抽烟?(合适吗)发现:在学生中定义抽烟的方法不合适。所以呢,我们另外用一个类来定义抽烟的方法。 但是发现,如果用一个类描述抽烟的功能后,SmokeStudent是不能继承多个类的。 这个时候,我们又得重写思考了。发现,抽烟的学生像一个抽烟的机器,所以, 我们定义一个接口来放抽烟这个功能。 interface Smoking

37、public abstract void smoking(); 描述的是抽烟的学生:SmokeStudent extends Student implements SmokingSmokeStudent ss = new SmokeStudent();ss.eat();ss.study();ss.smoking(); 老师:TeacherA:属性 教师编号,姓名,年龄B:方法 教书(teach),吃饭(吃饭eat),抽烟或者不抽烟?(合适吗)发现:在老师中定义抽烟的方法不合适。所以呢,我们另外用一个类来定义抽烟的方法。 但是发现,如果用一个类描述抽烟的功能后,SmokeTeacher是不能继承

38、多个类的。 这个时候,我们又得重写思考了。发现,抽烟的老师像一个抽烟的机器,所以, 我们定义一个接口来放抽烟这个功能。 interface Smoking public abstract void smoking(); 描述的是抽烟的老师:SmokeTeacher extends Teacher implements SmokingSmokeTeacher st = new SmokeTeacher();st.eat();st.teach();st.smoking(); 最后,我们发现,这个代码还是存在着重复,比如说学生类和教师类中的属性姓名,年龄及方法吃饭。 所以,我们进一步向上抽取。来了一

39、个Person类 Person:属性:姓名,年龄 行为:吃饭(抽象eat)66. 构造器Constructor是否可被override? (演讲内容,面试题)构造方法的重载重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的67. 是否可以从一个static方法内部发出对非static方法的调用?(面试题)答案:不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说

40、,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。68. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 答案:override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用

41、法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,jVM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:

42、1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));2、不能通过访问权限、返回类型、抛出的异常进行重载;3、方法的异常类型和数目不会对重载造成影响;4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。69. wait和sleep的区别(面试题)wait:是Object类的方法,可以不用传递参数,释放锁对象sleep:是Thread类

43、的静态方法,需要传递参数,不释放所对象70. String是最基本的数据类型吗? (面试题)基本数据类型:整数类型,浮点类型,字符型,布尔型引用数据类型:类,接口,数组,枚举String类虽然是引用数据类型,但是它作为参数传递时和基本数据类型是一样的71. 是否可以继承String类?(面试题)String类是final类故不可以继承。72. StringBuffer与StringBuilder的区别?(面试题)StringBuffer和StringBuilder的区别StringBuffer是jdk1.0版本的,是线程安全的,同步的,效率低StringBuilder是jdk1.5版本的,是线

44、程不安全的,不同步的,效率高String和StringBuffer,StringBuilder的区别String是一个不可变的字符序列StringBuffer,StringBuilder是可变的字符序列73. =和equals方法究竟有什么区别?(面试题)= 比较地址值,equals()比较对象的属性值,或者说具体内容74. 35.ArrayList和Vector的区别?(面试题)ArrayList:底层数据结构是数组,查询快,增删慢。线程不安全,效率高。Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低。Vector相对ArrayList查询慢(线程安全的)75. 说出Arr

45、ayList,Vector, LinkedList的存储性能和特性?(面试题)Vector和ArrayList的区别Vector是线程安全的,效率低ArrayList是线程不安全的,效率高共同点:都是数组实现的ArrayList和LinkedList的区别ArrayList底层是数组结果,查询和修改快LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢共同点:都是线程不安全的76. 说说 is a 和 has a 的区别?(面试题)体现:is a抽象类被继承,这个类中定义的是整个继承体现的共性内容。体现:like a接口被实现,这个接口中定义的是整个体现的扩展内容。77. jd

46、k中哪些类是不能继承的?(面试题) 不能继承的是类是那些用final关键字修饰的类。一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的,在jdk中System,String,StringBuffer等都是基本类型。78. 39.HashMap和Hashtable的区别?(面试题)HashTable: 线程安全,效率低,不允许null键和值HashMap: 线程不安全,效率高,允许null键和值如果要从Hashtable或者ConcurrentHashMap中选择,我们用ConcurrentHashMap79. List 和 Map 区别?(面试题)80. java

47、中实现多态的机制是什么?(面试题) 靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。81. 静态变量和实例变量的区别?(面试题) * 静态变量也叫类变量 成员变量也叫对象变量* A:所属不同* 静态变量属于类,所以也称为为类变量* 成员变量属于对象,所以也称为实例变量(对象变量)* B:内存中位置不同* 静态变量存储于方法区的静态区* 成员变量存储于堆内存* C:内存出现时间不同* 静态变量随着类的加载而加载,随着类的消失而消失*

48、 成员变量随着对象的创建而存在,随着对象的消失而消失* D:调用不同* 静态变量可以通过类名调用,也可以通过对象调用* 成员变量只能通过对象名调用82. IO操作中为什么要释放资源?(面试题)83. flush()和close()有什么区别?(面试题)* flush()方法* 用来刷新缓冲区的,刷新后可以再次写出 * close()方法* 用来关闭流释放资源的的; 如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出 flush只刷新缓冲区,不释放流资源,流对象还可以继续使用 close刷新并且释放流资源,流对象不可以继续使用 84. List

49、、Map、Set三个接口,存取元素时,各有什么特点?(面试题) 首先,List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个功共同的父接口,叫Collection。Set里面不允许有重复的元素,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。List表示有先后顺序的集合一个对象可以被反复存储进List中,每调用一次a

50、dd方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象,如图x所示。List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。Map与List和Set不同,它是双列的集合,其中有put方法,每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。取则可以根据key获得相应的value,即get(Object key)返回值为key 所对应的v

51、alue。另外,也可以获得所有的key的结合,还可以获得所有的value的结合,还可以获得key和value组合成的Map.Entry对象的集合。List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。HashSet按照hashcode值的某种运算方式进行存储,而不是直接按hashCode值的大小进行存储。LinkedHashSet按插入的顺序存储,那被存储对象的hashcode方法还有什么作用呢?hashset集合比较两个对象是否相等,首先看hashcode方法是否相等,然后看equals方法是否相等。new 两个

52、Student插入到HashSet中,看HashSet的size,实现hashcode和equals方法后再看size。同一个对象可以在Vector中加入多次。往集合里面加元素,相当于集合里用一根绳子连接到了目标对象。往HashSet中却加不了多次的。 85. 你所知道的集合类都有哪些?主要方法?(面试题)最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。 Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对

53、(称作键和值),其中每个键映射到一个值。 CollectionListArrayListVectorSetHashSetTreeSetPropetiesHashTableMapTreemapHashMap86. Collection 和 Collections的区别。Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。87. 字节流与字符流的区别1、到底使用谁 如果在写数据的时候需要另起一行或者读数据的时候一行一行读就用字符缓冲流:BufferedReader & BufferedWriter 如果操作的是文本就用字符流,因为操作比较方便。否则就用字节流 如果根本不知道用哪个,就用字节流,因为字节流很强大2、复制文本文件 (1)复制文本文件的几种

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!