JavaSE知识点总结个人整理Word格式.docx
《JavaSE知识点总结个人整理Word格式.docx》由会员分享,可在线阅读,更多相关《JavaSE知识点总结个人整理Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
面试:
跟我谈谈什么是面向对象
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就可以了
第二部分知识点
26.说明Java中Stringstr=null与Stringstr="
"
的区别?
Stringstr=null表示声明了一个String对象的引用str,但是没有为其分配内存空间。
Stringstr="
表示创建了一个长度等于0的空字符串,并在内存中为其分配了内存空间。
Stringstr=newString("
tw"
);
str在内存中有两个对象,1.堆内存有一个newSting
2.常量池中有一个字符串。
27.使用运算符"
=="
和方法equals()进行比较对象的区别?
使用"
算符比较基本数据类型时,比较的是值相等;
=="
算符比较对象时,比较的是内存地址值
使用equals()方法比较对象时,比较的是对象的内容,与地址无关,如果没有重写equals()方法就直接调用的是Object的equals()方法。
28.接口和抽象类有何区别?
(1)成员特点:
构造方法:
接口没有构造方法;
抽象类有构造方法。
成员变量:
接口中只有常量;
抽象类中可以是常量,也可以是变量。
成员方法:
接口中只有抽象方法;
抽象类中既有抽象方法,也有非抽象方法。
(2)关系特点:
类与类:
类与类之间只有单继承,可以有多层继承。
类与接口:
类与接口之间是实现关系,可以单实现,也可以多实现。
接口与接口:
接口与接口之间是继承关系,可以单继承,也可以多继承。
(3)设计理念:
接口对应的设计模式是简单工厂设计模式,抽象类对象的设计模式是模板设计模式。
(5)必须实现抽象类或接口的所有抽象方法才可以实例化。
黑马程序员入学面试题
32.不借用第三方变量,互换两个变量。
n=n^m;
m=n^m;
//(n^m)^m一个数异或另一个数两次,还是得原来那个数n=n^m//n^(n^m)
33.传统for和增强for有什么区别呢?
1.增强for对集合进行遍历,集合不能为空。
只能获取集合元素,但是不能对集合进行操作。
增强for有一个局限性,必须要有被遍历的目标。
2.迭代器除了遍历,还可以进行remove集合中元素的动作。
如果是用ListIterator,还可以在遍历过程中进行增删改查的动作。
建议在遍历数组的时候,还是希望是用传统for。
因为传统for可以定义角标。
1.增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。
不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
34.Collection和Colections的区别是什么?
Collection是一个单列集合的顶层接口,它是List、Set、Queue等接口的父接口。
在这个接口中,定义了集合类中通用的方法。
Collections是针对集合操作的工具类,有对集合进行排序和二分查找等静态方法。
37.线程的状态:
线程的五种状态:
1)新建(new)用new语句创建的线程对处于新建状态,此时它和其它Java对象一样,仅仅在Heap中被分配了内存。
当一个线程处于新建状态时,它仅仅是一个空的线程对象,系统不为它分配资源。
Threadt=newThread(newRunner());
2)就绪(Runnable)程序通过线程对象调用启动方法start()后,系统会为这个线程分配它