JavaSE知识点总结(个人整理) 联系客服

发布时间 : 星期六 文章JavaSE知识点总结(个人整理)更新完毕开始阅读a5207134534de518964bcf84b9d528ea80c72f81

2. 面向对象的理解

面向对象是Java的基本特征,是软件开发过程使用的基于面向过程一种思维方式,将功能封装进对象,强调具备功能的对象和调用结果,不关注具体实现这个功能的过程。

面向对象特点:是一种更符合人们思考习惯的思想,可以将复杂的事情简单化,将程序由执行者转换成为指挥者。 面向对象特性:封装,继承,多态

封装:封装是把数据和方法包装进类中,隐藏其具体实现细节,对外提供公共访问方法。封装的结果是一个同时带有特征和行为的数据类型。(安全性,复用性) 继承:当一个类的属性与行为均与现有类相似,属于现有类的一种时,这一个类可以定义为现有类的子类。或者,当多个类具有相同的属性和行为,我们可以抽取出共性的内容定义父类,再创建相似的”兄弟”类时只要继承父类即可。当子类继承父类后,拥有了父类非私有的方法并可以直接调用。如果认为父类提供的方法不够强大,子类可以按照子类自身的逻辑重写继承过来的父类方法。(复用性,可维护性,多态前提)

多态:继承是多态的前提,多态是指一种事物具有多种形态,比如猫具有猫类的形态,也具有动物的形态,多态的具体表现是父类引用指向子类对象,父类的引用也可以接收自己子类的对象。(可维护性,扩展性) 面试:跟我谈谈什么是面向对象

1 面向对象是基于面向过程的2 什么是面向过程什么是面向对象3 面向对象的特点 3. 面向对象和面向过程的区别

面向过程强调的是功能行为,分析解决问题所需的步骤,以函数为基础,完成各种步骤的操作和实现。

面向对象是基于面向过程的,将功能封装成对象,强调的是具备了这些功能的对象,让对象去调用方法来解决问题。 面向对象举例

4. abstract与哪些关键字不能共存为什么

private:私有的方法是不可见的,无法被重写 final:被final修饰的方法是最终方法,无法被重写

static:被static修饰的方法,要随类加载到方法区,由于抽象方法没有方法体所以不能加载

5. static的特点

(1) 随着类的加载而加载;优先于对象存在; 被所有对象所共享;可以直接被类名所调用。

(2) 静态方法只能访问静态,非静态方法既可以访问静态也可访问非静态 (3) 静态方法中不可以定义this、super关键字,因为静态优先于对象存在,this和super所代表的对象还不存在。 6. 类与类、类与接口、接口与接口的关系

继承(单继承,多层继承,object),实现(多实现),继承(多继承)

7. final、finally、finalize的区别

final:可以修饰类、方法和变量,被final修饰的类无法被继承,方法无法被重写,变量为常量只能赋值一次

finally:异常处理,和try、catch结合使用,可以添加也可以不添加,用于执行一些必须执行的代码,如释放资源等

finalize:Object类中的方法,其中定义了对象要被垃圾收集器回收之前要做的相关的清理工作

8. 什么是多态,多态的好处和弊端

多态可以理解为事物存在的多种体现形态。父类的引用指向了自己的子类对象;父类的引用也可以接收自己子类的对象。 提高了程序的可维护性和扩展性

弊端:父类的引用只能访问父类中有的成员而无法调用子类中特有的方法

10. wait()和sleep()的区别

(1)所在的类不同:wait是Object类中的方法,sleep是Thread类中的方法 (2)sleep方法没有释放同步锁,而wait方法释放了同步锁,使得其他线程可以使用。

(3)sleep()必须指定时间,wait()可以指定也可以不指定时间。

(4)wait,notify和notifyAll只能在同步方法或者同步代码块里面使用,而sleep可以在任何地方使用

(5)sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

16. 对匿名内部类的理解

匿名内部类就是没有名字的内部类,是内部类的简化形式。一般只使用一次的时候使用匿名内部类,匿名内部类本质上是一个匿名子类对象。匿名内部类的使用前提:内部类继承一个类或实现接口。匿名内部类包括两个步骤:创建一个类或者接口的子类,即刻创建该子类的对象。简化书写。 17. IO体系

字节流InputStream/OutputStream |--FileInputStream/FileOutputStream:文件字节流,用于文件的读写操作 |--BufferedInputStream/BufferedOutputStream:加缓冲区的字节流,用于提高效率 字符流Reader/Writer |--FileReader/FileWriter:文件字符流,用于文本文件的读写操作 |--BufferedReader/BufferedWrite:加缓冲区的字符流,用于提高效率 转换流InputStreamReader/OutputStreamWriter:是字节流和字符流之间的桥梁 18. 集合体系

|--Vector:功能同ArrayList类似,底层也是数组,线程是同步的,所以是安全的,效率较低,数据增长是50%的增长。

|--Set:元素是无序的,元素不允许重复,底层用到了Map

|--HashSet:底层hash表,存储的对象最好复写hashCode和equals方法,

|--TreeSet:底层自平衡的二叉树,存储的对象具备比较性,有两种方法:自然排序、比较器排序

|--Collection |--List:元素是有序的,元素允许重复,因为该集合体系都具有索引 |--ArrayList:底层数据结构是数组,查询速度快,增删操作较慢,线程不同步 |--LinkedList:底层数据结构是链表,查询效率较低,增删操作快,线程不同步,数据增长是100%的增长。 保证元素不会重复

|--Map:数据是以键值对的形式存储的,有的元素存在映射关系就可以使用该集合, |--HashMap:允许有null键或值,线程不同步 ,键是唯一的 |--TreeMap:元素可排序

|--HashTable:类似HashMap,不允许有null键或值,线程同步,元素不允许重复

21. 局部变量和成员变量区别 成员变量

定义位置:类中,整个类中均可以访问,通常用private修饰。 内存:成员变量随着对象的建立而建立,存在于对象所在的堆内存中。 默认值:成员变量有默认值。 回收:随着对象的回收而回收。

局部变量

定义位置:定义在局部范围,如方法内,语句内等。 内存:局部变量存在于栈内存中。 默认值:没有默认值。

回收:随着作用域结束而回收,通常为语句或方法范围。

22. 同步函数与同步代码块的区别 同步代码块使用的锁可以是任意对象。

同步函数使用的锁是this,静态同步函数的锁是该类的字节码文件对象。

在一个类中只有一个同步的话,可以使用同步函数。如果有多同步,必须使用同步代码块,来确定不同的锁。所以同步代码块相对灵活一些。 23. 数组和集合的区别 容器长度:

集合长度可变,数组长度固定 存储内容类型:

集合存储引用数据类型,数组存储任意类型 是否可存储不同类型数据:

数组只能存储同种数据类型的元素,集合可以存储不同类型(键值)的元素。

有序可重复: 数组是有序可重复的

集合中有些是有序可重复的如list,有些是无序不可重复的如set,map 24. StringBuffer和StringBuilder的区别

StringBuffer是同步的,所以线程安全,但是效率低,StringBuilder是不同步的,所以线程不安全,但是效率高。StringBuilder要比StringBuffer快。单线程的程序使用

StringBuilder比较好,多线程的情况下可以自己加锁,也可以 直接使用StringBuffer。 25. String和StringBuffer区别

String对象一经创建就不会发生变化了,即便是赋新值也不是在原对象的基础上改变,而是创建一个新的字符串对象,将引用指向这个新的对象,会造成空间的浪费,效率较低。StringBuffer只创建一个对象,是在同一个实例的基础之上追加,效率更高,当需要用到String的时候toString就可以了