JavaSE知识材料点学习总结(个人情况整编汇总).doc
《JavaSE知识材料点学习总结(个人情况整编汇总).doc》由会员分享,可在线阅读,更多相关《JavaSE知识材料点学习总结(个人情况整编汇总).doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、*2. 面向对象的理解面向对象是Java的基本特征,是软件开发过程使用的基于面向过程一种思维方式,将功能封装进对象,强调具备功能的对象和调用结果,不关注具体实现这个功能的过程。面向对象特点:是一种更符合人们思考习惯的思想,可以将复杂的事情简单化,将程序由执行者转换成为指挥者。面向对象特性:封装,继承,多态封装:封装是把数据和方法包装进类中,隐藏其具体实现细节,对外提供公共访问方法。封装的结果是一个同时带有特征和行为的数据类型。(安全性,复用性)继承:当一个类的属性与行为均与现有类相似,属于现有类的一种时,这一个类可以定义为现有类的子类。或者,当多个类具有相同的属性和行为,我们可以抽取出共性的内
2、容定义父类,再创建相似的”兄弟”类时只要继承父类即可。当子类继承父类后,拥有了父类非私有的方法并可以直接调用。如果认为父类提供的方法不够强大,子类可以按照子类自身的逻辑重写继承过来的父类方法。(复用性,可维护性,多态前提)多态:继承是多态的前提,多态是指一种事物具有多种形态,比如猫具有猫类的形态,也具有动物的形态,多态的具体表现是父类引用指向子类对象,父类的引用也可以接收自己子类的对象。(可维护性,扩展性)面试:跟我谈谈什么是面向对象1 面向对象是基于面向过程的2 什么是面向过程什么是面向对象3 面向对象的特点3. 面向对象和面向过程的区别面向过程强调的是功能行为,分析解决问题所需的步骤,以函
3、数为基础,完成各种步骤的操作和实现。面向对象是基于面向过程的,将功能封装成对象,强调的是具备了这些功能的对象,让对象去调用方法来解决问题。面向对象举例4. abstract与哪些关键字不能共存为什么private:私有的方法是不可见的,无法被重写 final:被final修饰的方法是最终方法,无法被重写 static:被static修饰的方法,要随类加载到方法区,由于抽象方法没有方法体所以不能加载5. static的特点(1) 随着类的加载而加载;优先于对象存在;被所有对象所共享;可以直接被类名所调用。(2) 静态方法只能访问静态,非静态方法既可以访问静态也可访问非静态(3) 静态方法中不可以
4、定义this、super关键字,因为静态优先于对象存在,this和super所代表的对象还不存在。6. 类与类、类与接口、接口与接口的关系继承(单继承,多层继承,object),实现(多实现),继承(多继承)7. final、finally、finalize的区别final:可以修饰类、方法和变量,被final修饰的类无法被继承,方法无法被重写,变量为常量只能赋值一次finally:异常处理,和try、catch结合使用,可以添加也可以不添加,用于执行一些必须执行的代码,如释放资源等finalize:Object类中的方法,其中定义了对象要被垃圾收集器回收之前要做的相关的清理工作8. 什么是多
5、态,多态的好处和弊端多态可以理解为事物存在的多种体现形态。父类的引用指向了自己的子类对象;父类的引用也可以接收自己子类的对象。提高了程序的可维护性和扩展性弊端:父类的引用只能访问父类中有的成员而无法调用子类中特有的方法10. wait()和sleep()的区别(1)所在的类不同:wait是Object类中的方法,sleep是Thread类中的方法 (2)sleep方法没有释放同步锁,而wait方法释放了同步锁,使得其他线程可以使用。(3)sleep()必须指定时间,wait()可以指定也可以不指定时间。(4)wait,notify和notifyAll只能在同步方法或者同步代码块里面使用,而sl
6、eep可以在任何地方使用(5)sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常16. 对匿名内部类的理解匿名内部类就是没有名字的内部类,是内部类的简化形式。一般只使用一次的时候使用匿名内部类,匿名内部类本质上是一个匿名子类对象。匿名内部类的使用前提:内部类继承一个类或实现接口。匿名内部类包括两个步骤:创建一个类或者接口的子类,即刻创建该子类的对象。简化书写。17. IO体系字节流InputStream/OutputStream |-FileInputStream/FileOutputStream:文件字节流,用于文件的读写操作 |-BufferedInputS
7、tream/BufferedOutputStream:加缓冲区的字节流,用于提高效率 字符流Reader/Writer |-FileReader/FileWriter:文件字符流,用于文本文件的读写操作 |-BufferedReader/BufferedWrite:加缓冲区的字符流,用于提高效率 转换流InputStreamReader/OutputStreamWriter:是字节流和字符流之间的桥梁18. 集合体系|-Vector:功能同ArrayList类似,底层也是数组,线程是同步的,所以是安全的,效率较低,数据增长是50%的增长。|-Set:元素是无序的,元素不允许重复,底层用到了Ma
8、p |-HashSet:底层hash表,存储的对象最好复写hashCode和equals方法,|-TreeSet:底层自平衡的二叉树,存储的对象具备比较性,有两种方法:自然排序、比较器排序|-Collection |-List:元素是有序的,元素允许重复,因为该集合体系都具有索引 |-ArrayList:底层数据结构是数组,查询速度快,增删操作较慢,线程不同步|-LinkedList:底层数据结构是链表,查询效率较低,增删操作快,线程不同步,数据增长是100%的增长。 保证元素不会重复 |-Map:数据是以键值对的形式存储的,有的元素存在映射关系就可以使用该集合,|-HashMap:允许有nu
9、ll键或值,线程不同步 ,键是唯一的|-TreeMap:元素可排序|-HashTable:类似HashMap,不允许有null键或值,线程同步,元素不允许重复21. 局部变量和成员变量区别成员变量定义位置:类中,整个类中均可以访问,通常用private修饰。内存:成员变量随着对象的建立而建立,存在于对象所在的堆内存中。默认值:成员变量有默认值。回收:随着对象的回收而回收。局部变量定义位置:定义在局部范围,如方法内,语句内等。内存:局部变量存在于栈内存中。默认值:没有默认值。回收:随着作用域结束而回收,通常为语句或方法范围。22. 同步函数与同步代码块的区别 同步代码块使用的锁可以是任意对象。同
10、步函数使用的锁是this,静态同步函数的锁是该类的字节码文件对象。在一个类中只有一个同步的话,可以使用同步函数。如果有多同步,必须使用同步代码块,来确定不同的锁。所以同步代码块相对灵活一些。23. 数组和集合的区别容器长度:集合长度可变,数组长度固定存储内容类型:集合存储引用数据类型,数组存储任意类型是否可存储不同类型数据:数组只能存储同种数据类型的元素,集合可以存储不同类型(键值)的元素。有序可重复:数组是有序可重复的集合中有些是有序可重复的如list,有些是无序不可重复的如set,map24. StringBuffer和StringBuilder的区别StringBuffer是同步的,所以
11、线程安全,但是效率低,StringBuilder是不同步的,所以线程不安全,但是效率高。StringBuilder要比StringBuffer快。单线程的程序使用StringBuilder比较好,多线程的情况下可以自己加锁,也可以 直接使用StringBuffer。25. String和StringBuffer区别String对象一经创建就不会发生变化了,即便是赋新值也不是在原对象的基础上改变,而是创建一个新的字符串对象,将引用指向这个新的对象,会造成空间的浪费,效率较低。StringBuffer只创建一个对象,是在同一个实例的基础之上追加,效率更高,当需要用到String的时候toStrin
12、g就可以了第二部分 知识点26. 说明Java中String str=null与String str=的区别?String str = null 表示声明了一个String对象的引用str,但是没有为其分配内存空间。 String str = 表示创建了一个长度等于0的空字符串,并在内存中为其分配了内存空间。String str = new String(tw); str在内存中有两个对象,1.堆内存有一个 new Sting2.常量池中有一个字符串。27. 使用运算符= =和方法equals() 进行比较对象的区别?使用= =算符比较基本数据类型时,比较的是值相等;使用=算符比较对象时,比较
13、的是内存地址值使用equals()方法 比较对象时,比较的是对象的内容,与地址无关,如果没有重写equals()方法就直接调用的是Object的equals()方法。28. 接口和抽象类有何区别?(1)成员特点:构造方法:接口没有构造方法;抽象类有构造方法。成员变量:接口中只有常量;抽象类中可以是常量,也可以是变量。成员方法:接口中只有抽象方法;抽象类中既有抽象方法,也有非抽象方法。(2)关系特点:类与类:类与类之间只有单继承,可以有多层继承。类与接口:类与接口之间是实现关系,可以单实现,也可以多实现。 接口与接口:接口与接口之间是继承关系,可以单继承,也可以多继承。(3)设计理念:接口对应的
14、设计模式是简单工厂设计模式,抽象类对象的设计模式是模板设计模式。(5)必须实现抽象类或接口的所有抽象方法才可以实例化。黑马程序员入学面试题32. 不借用第三方变量,互换两个变量。n=nm;m=nm;/(nm)m一个数异或另一个数两次,还是得原来那个数 n=nm/n(nm)33. 传统for和增强for有什么区别呢?1. 增强for对集合进行遍历,集合不能为空。只能获取集合元素,但是不能对集合进行操作。增强for有一个局限性,必须要有被遍历的目标。2. 迭代器除了遍历,还可以进行remove集合中元素的动作。如果是用ListIterator,还可以在遍历过程中进行增删改查的动作。建议在遍历数组的
15、时候,还是希望是用传统for。因为传统for可以定义角标。1.增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。34. Collection和Colections的区别是什么?Collection是一个单列集合的顶层接口,它是List、Set、Queue等接口的父接口。在这个接口中,定义了集合类中通用的方法。Collections是针对集合操作的工具类,有对集合进行排序和二分查
16、找等静态方法。37. 线程的状态:线程的五种状态:1)新建(new) 用new语句创建的线程对处于新建状态,此时它和其它Java对象一样,仅仅在Heap中被分配了内存。当一个线程处于新建状态时,它仅仅是一个空的线程对象,系统不为它分配资源。 Thread t = new Thread(new Runner();2)就绪(Runnable) 程序通过线程对象调用启动方法start()后,系统会为这个线程分配它运行时所需的除处理器之外的所有系统资源。这时,它处在随时可以运行的状态,在随后的任意时刻,只要它获得处理器即会进入运行状态。 t.start()3)运行(Running) 处于这个状态的线程
17、占用CPU,执行程序代码。在并发环境中,如果计算机只有一个CPU,那么任何时刻只会有一个线程处于这个状态。如果计算机中有多个CPU,那么同一时刻可以让几个线程占用不同的CPU,使它们都处于运行状态,只有处于就绪状态的线程才有机会转到运行状态。4)阻塞(Blocked) 阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才有机会转到运行状态。阻塞状态可分为以下3种:位于对象等待池中的阻塞状态(Blocked in objects wait pool):当线程处于运行状态时,如果执行了某个对象的wait()方
18、法,Java虚拟机就会把线程放到这个对象的等待池中。位于对象锁池中的阻塞状态(Blocked in objects lock pool):当线程处于运行状态,试图获得某个对象的同步锁时,如果该对象的同步锁已经被其他线程占用,Java虚拟机就会把这个线程放到这个对象的锁池中。其他阻塞状态(Otherwise Blocked):当前线程执行了sleep()方法,或者调用了其他线程的join()方法,或者发出了I/O请求时,就会进入这个状态。当一个线程执行System.out.println()或者System.in.read()方法时是,就会发出一个I/O请求,该线程放弃CPU,进入阻塞状态,直到
19、I/O处理完毕,该线程才会恢复执行。5)死亡(Dead) 当线程退出run()方法时,就进入死亡状态,该线程结束生命周期。线程有可能是正常执行完run()方法而退出,也有可能是遇到异常而退出。不管线程是正常结束还是异常结束,都不会对其他线程造成影响。40. 集合集合名称阅读技巧:JDK1.2出现的集合框架中常用的子类对象前缀名是结构名,后缀名是体系名。ArrayList:数组结构,看到Array就知道查询速度快,看到List就知道可以又重复元素,可以增删改查LinkedList:链表结构,增删快HashSet:哈希结构,查询速度更快,不保证有序,不可以重复,必须覆盖hashCode和equal
20、s方法LinkedHashSet:链表加哈希结构,可以实现有序TreeSet:二叉树结构,可以排序。有两种方法:1.自然排序compable,2.比较器 comparator Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,
21、它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且和当前comparator的排序结果是相同的时候,这个方法才返回true.ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,允许直接按序号索引元素. 但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,Vector属于遗留容器,现在已经不推荐使用,LinkedList 使用双向链表实现存储(将内存中零散的内存单元通过附加的
22、引用关联起来,形成一个可以按序号索引的线性结构,这种链式存储方式与数组的连续存储方式相比,其实对内存的利用率更高),按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。由于ArrayList和LinkedListed都是非线程安全的,如果需要多个线程操作同一个容器,可以通过工具类Collections中的synchronizedList方法将其转换成线程安全的容器后再使用(这其实是装潢模式最好的例子,将已有对象传入另一个类的构造器中创建新的对象来增加新功能)。Map集合Map(k,v) k:此映射所维护的键的类型 v:映射值的类型Map集合:双例集
23、合,一次存一对,称为键值对。要保证键的唯一性。Map集合没有迭代器,必须先将map集合转成set集合,在使用迭代器,就可以取出结合中的元素;或者使用map集合特有的entrySet方法,也可以取出map集合中虽有元素。 Map集合常见子类:1.HashTable:底层数据结构是哈希表结构,线程同步的,不允许null键,null值;2.HashMap:哈希表结构,不同步,允许null键,null值3.TreeMap:二叉树结构,不同步,可以对map集合众多键进行排序。41. 为什么需要配置path,什么时候需要答:path路径:是操作系统的环境变量,目的是希望在任意目录下都能执行该命令操作起来更
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javase 知识 材料 学习 总结 个人 情况 整编 汇总
限制150内