JavaSE知识点总结_第1页
JavaSE知识点总结_第2页
JavaSE知识点总结_第3页
JavaSE知识点总结_第4页
JavaSE知识点总结_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2. 面向对象的理解 面向对象是 Java 的基本特征,是软件开发过程使用的基于面向过程一种思维方式,将 功能封装进对象,强调具备功能的对象和调用结果,不关注具体实现这个功能的过 程。面向对象特点:是一种更符合人们思考习惯的思想,可以将复杂的事情简单化,将程 序由执行者转换成为指挥者。面向对象特性:封装,继承,多态封装:封装是把数据和方法包装进类中,隐藏其具体实现细节,对外提供公共访问方 法。封装的结果是一个同时带有特征和行为的数据类型。(安全性,复用性)继承:当一个类的属性与行为均与现有类相似,属于现有类的一种时,这一个类可以定义为现有类的子类。或者,当多个类具有相同的属性和行为,我们可以抽

2、取出共性 的内容定义父类,再创建相似的”兄弟”类时只要继承父类即可。当子类继承父类 后,拥有了父类非私有的方法并可以直接调用。如果认为父类提供的方法不够强大, 子类可以按照子类自身的逻辑重写继承过来的父类方法。(复用性,可维护性,多态 前提)多态:继承是多态的前提,多态是指一种事物具有多种形态,比如猫具有猫类的形 态,也具有动物的形态,多态的具体表现是父类引用指向子类对象,父类的引用也可 以接收自己子类的对象。(可维护性,扩展性)面试 :跟我谈谈什么是面向对象1 面向对象是基于面向过程的 2 什么是面向过程什么是面向对象 3 面向对象的特点3. 面向对象和面向过程的区别面向过程强调的是功能行为

3、,分析解决问题所需的步骤,以函数为基础,完成各种步 骤的操作和实现。面向对象是基于面向过程的,将功能封装成对象,强调的是具备了这些功能的对象, 让对象去调用方法来解决问题。面向对象举例4. abstract 与哪些关键字不能共存为什么private :私有的方法是不可见的,无法被重写final :被 final 修饰的方法是最终方法,无法被重写static :被 static 修饰的方法,要随类加载到方法区,由于抽象方法没有方 法体所以不能加载5. static 的特点(1) 随着类的加载而加载;优先于对象存在;被所有对象所共享;可以直接被类名所调用。(2) 静态方法只能访问静态,非静态方法既

4、可以访问静态也可访问非静态(3) 静态方法中不可以定义 this 、 super 关键字,因为静态优先于对象存在, this 和 super 所代表的对象还不存在。6. 类与类、类与接口、接口与接口的关系继承(单继承,多层继承, object ),实现(多实现),继承(多继承)7. final 、finally 、 finalize 的区别final :可以修饰类、方法和变量,被 final 修饰的类无法被继承,方法无法 被重写,变量为常量只能赋值一次finally :异常处理,和 try 、 catch 结合使用,可以添加也可以不添加,用于 执行一些必须执行的代码,如释放资源等finaliz

5、e :Object 类中的方法,其中定义了对象要被垃圾收集器回收之前要做 的相关的清理工作8. 什么是多态,多态的好处和弊端多态可以理解为 事物存在的多种体现形态 。父类的引用指向了自己的子类对 象;父类的引用也可以接收自己子类的对象。提高了程序的可维护性和扩展性弊端:父类的引用只能访问父类中有的成员而无法调用子类中特有的方法10. wait() 和 sleep() 的区别(1) 所在的类不同: wait 是 Object 类中的方法, sleep 是 Thread 类中的方法(2)sleep 方法没有释放同步锁,而 wait 方法释放了同步锁,使得其他线程可 以使用。(3)sleep() 必

6、须指定时间, wait() 可以指定也可以不指定时间。(4)wait , notify 和 notifyAll 只能在同步方法或者同步代码块里面使用,而 sleep 可以在任何地方使用(5)sleep 必须捕获异常,而 wait , notify 和 notifyAll 不需要捕获异常16. 对匿名内部类的理解 匿名内部类就是没有名字的内部类,是内部类的简化形式。一般只使用一次的时候使 用匿名内部类, 匿名内部类本质上是一个匿名子类对象 。匿名内部类的使用前提: 内 部类继承一个类或实现接口。 匿名内部类包括两个步骤:创建一个类或者接口的子 类,即刻创建该子类的对象。简化书写。17. IO 体

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

8、的桥梁18. 集合体系|-Vector :功能同 ArrayList 类似,底层也是数组,线程是同步的,所以是安全的, 效率较低,数据增长是 50%的增长。|-Set :元素是无序的,元素不允许重复,底层用到了 Map|-HashSet :底层 hash 表,存储的对象最好复写 hashCode 和 equals 方法,|-TreeSet :底层自平衡的二叉树,存储的对象具备比较性,有两种方法:自然排 序、比较器排序|-Collection |-List:元素是有序的,元素允许重复,因为该集合体系都具有索引|-ArrayList:底层数据结构是数组,查询速度快,增删操作较慢,线程不同步|-Li

9、nkedList:底层数据结构是链表,查询效率较低,增删操作快,线程不同步,数据增长是 100%的增长。 保证元素不会重复|-Map :数据是以键值对的形式存储的,有的元素存在映射关系就可以使用该集合,|-HashMap :允许有 null 键或值,线程不同步 ,键是唯一的|-TreeMap :元素可排序卜-HashTable :类似HashMap不允许有null键或值,线程同步,元素不允许重复21. 局部变量和成员变量区别成员变量定义位置:类中,整个类中均可以访问,通常用 private 修饰。 内存:成员变量随着对象的建立而建立,存在于对象所在的堆内存中。 默认值:成员变量有默认值。回收:

10、随着对象的回收而回收 局部变量定义位置:定义在局部范围,如方法内,语句内等。 内存:局部变量存在于栈内存中。默认值:没有默认值。 回收:随着作用域结束而回收,通常为语句或方法范围。22. 同步函数与同步代码块的区别同步代码块使用的锁可以是任意对象。 同步函数使用的锁是 this ,静态同步函数的锁是该类的字节码文件对象。 在一个类中只有一个同步的话,可以使用同步函数。如果有多同步,必须使用同步代 码块,来确定不同的锁。所以同步代码块相对灵活一些。23. 数组和集合的区别容器长度:集合长度可变,数组长度固定存储内容类型:集合存储引用数据类型,数组存储任意类型 是否可存储不同类型数据: 数组只能存

11、储同种数据类型的元素,集合可以存储不同类型( 键值)的元素。有序可重复:数组是有序可重复的集合中有些是有序可重复的如 list ,有些是无序不可重复的如 set , map24. StringBuffer 和 StringBuilder 的区别StringBuffer 是同步的,所以线程安全,但是效率低, StringBuilder 是不同步的, 所以线程不安全,但是效率高。 StringBuilder 要比 StringBuffer 快。单线程的程序 使用 StringBuilder 比较好,多线程的情况下可以自己加锁,也可以 直接使用 StringBuffer 。25. String 和

12、StringBuffer 区别String 对象一经创建就不会发生变化了,即便是赋新值也不是在原对象的基础上改 变,而是创建一个新的字符串对象,将引用指向这个新的对象,会造成空间的浪费, 效率较低。 StringBuffer 只创建一个对象,是在同一个实例的基础之上追加,效率更 高,当需要用到 String 的时候 toString 就可以了 第二部分 知识点26. 说明 Java 中 String str=null 与 String str= 的区别?String str = null表示声明了一个 String 对象的引用 str ,但是没有为其分配内存空间。 String str = 表

13、示创建了一个长度等于 0 的空字符串,并在内存中为其分 配了内存空间。String str = new String(tw); str在内存中有两个对象, 1. 堆内存有一个 newSting2. 常量池中有一个字符串。27. 使用运算符 = = 和方法 equals() 进行比较对象的区别?使用= = 算符比较基本数据类型时,比较的是值相等; 使用= 算符比较对象时,比 较的是内存地址值使用 equals() 方法 比较对象时,比较的是对象的内容,与地址无关,如果没有重写 equals() 方法就直接调用的是 Object 的 equals() 方法。28. 接口和抽象类有何区别?(1) 成

14、员特点: 构造方法:接口没有构造方法;抽象类有构造方法。 成员变量:接口中只有常量;抽象类中可以是常量,也可以是变量。 成员方法:接口中只有抽象方法;抽象类中既有抽象方法,也有非抽象方法。(2) 关系特点: 类与类:类与类之间只有单继承,可以有多层继承。 类与接口:类与接口之间是实现关系,可以单实现,也可以多实现。 接口与接口:接口与接口之间是继承关系,可以单继承,也可以多继承。3) 设计理念: 接口对应的设计模式是 简单工厂设计模式 ,抽象类对象的设计模式是 模板设计模式。(5)必须实现抽象类或接口的所有抽象方法才可以实例化。 黑马程序员入学面试题32. 不借用第三方变量,互换两个变量。n=

15、n Am;m=nm传统for和增强for有什么区别呢?1增强for对集合进行遍历,集合不能为空。只能获取集合元素,但是不能对集合进 行操作。增强 for 有一个局限性,必须要有被遍历的目标。2. 迭代器除了遍历,还可以进行 remove 集合中元素的动作。如果是用 ListIterator ,还可以在遍历过程中进行增删改查的动作。建议在遍历数组的时候,还是希望是用传统 for 。因为传统 for 可以定义角标。1.增强 for 循环和 iterator 遍历的效果是一样的,也就说增强 for 循环的内部也就是 调用 iteratoer 实现的,但是增强 for 循环有些缺点,例如不能在增强循环

16、里动态的 删除集合内容。不能获取下标等。由于使用数组实现,因此下标明确,最好使用普通循环。34. Collection 和 Colections 的区别是什么?Collection是一个单列集合的顶层接口,它是List、Set、Queue等接口的父接口。在这个接口中,定义了集合类中通用的方法。Collections 是针对集合操作的工具类,有对集合进行排序和二分查找等静态方法。37. 线程的状态: 线程的五种状态:1) 新建(new)用new语句创建的线程对处于新建状态,此时它和其它 Java对象一 样,仅仅在Heap中被分配了内存。当一个线程处于新建状态时,它仅仅是一个空的线 程对象,系统不

17、为它分配资源。 Thread t = new Thread(new Runner();2) 就绪 (Runnable) 程序通过线程对象调用启动方法 start() 后,系统会为这个线程分配它运行时所需的除处理器之外的所有系统资源。这时,它处在随时可以运行的状 态,在随后的任意时刻,只要它获得处理器即会进入运行状态。()3) 运行(Running)处于这个状态的线程占用CPU执行程序代码。在并发环境中,如果计算机只有一个CPU那么任何时刻只会有一个线程处于这个状态。如果计算机中有 多个CPU那么同一时刻可以让几个线程占用不同的CPU使它们都处于运行状态,只有处于就绪状态的线程才有机会转到运行状

18、态。4) 阻塞(Blocked)阻塞状态是指线程因为某些原因放弃CPU暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配 CPU直到线程重新进入就绪状态,它 才有机会转到运行状态。阻塞状态可分为以下 3 种:位于对象等待池中的阻塞状态 (Blocked in objects wait pool):当线程处于运行状态时,如果执行了某个对象的 wait() 方法, Java 虚拟机就会把线程放到这个对象的等 待池中。位于对象锁池中的阻塞状态 (Blocked in objects lock pool):当线程处于运行状态,试图获得某个对象的同步锁时,如果该对象的同步锁已经被其他线程占

19、用,Java虚拟机就会把这个线程放到这个对象的锁池中。其他阻塞状态 (Otherwise Blocked) :当前线程执行了 sleep() 方法,或者调用了其他 线程的 join() 方法,或者发出了 I/O 请求时,就会进入这个状态。当一个线程执行或 者方法时是,就会发出一个 I/O请求,该线程放弃 CPU进入阻塞状态,直到I/O处理 完毕,该线程才会恢复执行。5) 死亡 (Dead) 当线程退出 run() 方法时,就进入死亡状态,该线程结束生命周期。线 程有可能是正常执行完 run() 方法而退出,也有可能是遇到异常而退出。不管线程是正 常结束还是异常结束,都不会对其他线程造成影响。4

20、0. 集合集合名称阅读技巧:出现的集合框架中常用的子类对象前缀名是结构名,后缀名是体系名。ArrayList :数组结构,看到 Array 就知道查询速度快, 看到 List 就知道可以又重复 元素,可以增删改查LinkedList :链表结构,增删快HashSet:哈希结构,查询速度更快,不保证有序,不可以重复,必须覆盖hashCode和 equals 方法LinkedHashSet :链表加哈希结构,可以实现有序TreeSet :二叉树结构,可以排序。有两种方法:1自然排序compable, 2.比较器comparator Java 提供了只包含一个 compareTo() 方法的 Com

21、parable 接口。这个方法 可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。Java 提供了包含 compare() 和 equals() 两个方法的 Comparator 接口。 compare() 方法 用来给两个输入参数排序,返回负数, 0,正数表明第一个参数是小于,等于,大于第 二个参数。 equals() 方法需要一个对象作为参数,它用来决定输入参数是否和 comparator 相等。只有当输入参数也是一个 comparator 并且和当前 comparator 的排 序结果是相同的时候,这个方法才返回 true.ArrayLis

22、t 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据 以便增加和插入元素,允许直接按序号索引元素 . 但是 插入元素要涉及数组元素移动 等内存操作 ,所以索引数据快而插入数据慢,Vector 由于使用了 synchronized 方法(线程安全), 通常性能上较 ArrayList 差,Vector 属于遗留容器,现在已经不推荐使用,LinkedList 使用双向链表实现存储(将内存中零散的内存单元通过附加的引用关联起 来,形成一个可以按序号索引的线性结构,这种链式存储方式与数组的连续存储方式 相比,其实对内存的利用率更高),按序号索引数据需要进行前向或后向遍历,但是

23、 插入数据时只需要记录本项的前后项即可,所以插入速度较快。由于 ArrayList 和 LinkedListed 都是非线程安全的 ,如果需要多个线程操作同一个容 器,可以通过工具类 Collections 中的 synchronizedList 方法将其转换成线程安全的 容器后再使用(这其实是装潢模式最好的例子,将已有对象传入另一个类的构造器中 创建新的对象来增加新功能)。Map集合Map(k,v) k: 此映射所维护的键的类型 v :映射值的类型Map集合:双例集合,一次存一对,称为键值对。要保证键的唯一性。Map集合没有迭代器,必须先将 map集合转成set集合,在使用迭代器,就可以取出

24、结 合中的元素;或者使用 map集合特有的entrySet方法,也可以取出 map集合中虽有元 素。 Map 集合常见子类:底层数据结构是哈希表结构,线程同步的,不允许 null 键, null 值;:哈希表结构,不同步,允许 null 键, null 值:二叉树结构,不同步,可以对map集合众多键进行排序。41. 为什么需要配置 path ,什么时候需要答: path 路径:是操作系统的环境变量,目的是希望在任意目录下都能执行该命令操 作起来更加方便快捷;classpath 是给类提供路径:想在其他目录下执行 java 程序时需要配置 classpath 路 径。42. IO 流输入流: I

25、nputStream 输出流: OutputStream字节输入流: FileInputStream 字节输出流: FileOutoutStream字节输入流缓冲区: BufferedInputStream 字节输出流缓冲区:BufferedOutputStream转换流: InputStreamReader 字符输出流: OutputStreamWriter字符流: FileReader FileWriter 字符输入流缓冲区: BufferedReader 字符输出流缓冲区: BufferedWriter49. list, set, map 是否继承自 collection 接口 ? li

26、st , set 是 map 不是。50. arraylist 和 vector 的区别。一. 同步性 :vector 是线程安全的,也就是说是同步的,而 arraylist 是线程序不安全 的,不是同步的二. 数据增长 : 当需要增长时 ,vector 默认增长为原来一培,而 arraylist 却是原来的一 半51. hashmap 和 hashtable 的区别一. 历史原因:hashtable 是基于陈旧的 dictionary 类的,hashmap是 java 弓I进的 map 接口的一个实现二. 同步性:hashtable 是线程安全的,也就是说是同步的,而hashmap是线程序不

27、安全 的,不是同步的三. 值:只有hashmap可以让你将空值作为一个表的条目的key或value7:给成员变量赋值的方式有几种?分别怎么实现 ?答:A:给静态的成员变量赋值(1) 可以通过类中的方法给成员变量赋值(私有成员变量的也可以 ) public void setXXX().(2) 可以通过构造方法给成员变量赋值(私有成员变量的也可以 )public XXX().(3) 可以通过代码块完成成员变量的初始化值(私有成员变量的也可以 )xxx = .;(4)可以通过类名 . 成员变量赋值B :给非静态的成员变量赋值(1) 可以通过类的方法赋值public void setXXX().(2)

28、可以通过对象调用(3) 可以通过代码块完成成员变量的初始化值xxx = .; 如何理解字符串一旦初始化就不可以被改变。不可以被改变说的是常量池中的值 , 并不是弓用 s(s 是可以重新被赋值的 )2、String s1 = new String(abc);和 String s2 = abc;两者的区别第一种方式:第一种方式在内存中存在两个abc字符串,一个是在常量池中,一个是在堆内存当中第二种方式:在内存中只存在一个 abc在常量池中异常:异常是在程序运行过程中,发生的各种不正常状况。Java中引入异常,以异常类 Exception对这些不正常状况进行封装,通过异常处理机 制对程序运行时可能发

29、生的各种问题进行处理。Throwable顶层类,包括error错误,Exception异常,异常分为运行时异常和编译时异常处理方式:throws声明抛出,try catch 捕捉处理,fin ally 定会被执行(释放资 源)运行时异常,运行时可能会报错,可以不处理。编译时异常,编译时无法编译通过,必须处理。throw 禾口 throws :throws表示抛出异常类,由方法调用者使用;throws用在方法声明后面,跟的是异常类名;throws后可以跟多个异常类名,用逗号隔开。throw用在方法体内,跟的是异常对象名;表示抛出异常,由方法体内的语句处理。只 能抛出一个异常对象名;异常注意事项:

30、子类抛出的异常 比父类抛出的异常小。如果父类抛出了多个异常,子类覆盖父类方 法时,只能抛出相同的异常或者是他的子集父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出泛型:(提前使用未知数据类型)什么是泛型:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一 个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、 泛型接口、泛型方法。泛型替代了 Object来代表任意类型,在编译时会擦除。泛型类:定义:类名后 变量 使用:创建对象时确定类型泛型方法:定义:方法返回值前 变量_使用:调用方法时确定类型 泛型接口:定义:接口

31、名后 变量 使用: 1、定义类时确定类型, 2、始终不确定类型,直到创建对象时确定类型泛型优点:提高程序的安全性,将运行期问题转移到了编译期,省去了类型强转的麻 烦,优化了程序设计线程:每个运行的程序都是一个进程,在一个进程中还可以有多个执行单元同时运 行,这些执行单元均是程序执行的一条条执行路径,这些执行路径就是线程,如果希 望程序中实现多段程序代码同时运行,则需要多线程技术。是由 cpu 高速切换执行, java 使用的是抢占式调度模型。1.直接继承 Thread 类重写 run 方法, 2. 线程与线程执行目标分离方式, 实现 runnable 接口,重写 run 方法,相比较而言, 2

32、 避免了 1 方法单继承的局限性,且能 够用多个线程操作同一份共享数据,把线程和线程数据有效的分离开,也体现 java 面 向对象思想。此外,还有线程池技术,提交任务,开启线程。五种状态:新建状态: new,可运行状态: start 方法启动, 运行状态:获得 cpu死亡状态: run 方法执行完, Exception , error等待或阻塞状态: wait-notify ,join- 调用 jion 的线程终止, sleep- 时间到, io 阻塞方法如 read- 阻塞方法返回,等 待同步锁 - 获得同步锁线程安全问题:当多个线程共同操作一份数据时,当线程 1 操作数据到一半时,线程 2

33、 抢走 CPU, 会导致” 1 使用的数据已经被其他数据修改为 1 不想要的数据了”。Java 中使用 synchronized 关键字来解决,将一个完整动作使用 synchronized 包裹。 即线程 A 中操作数据的代码与线程 B 中操作数据的代码均使用 synchronized 包裹,并 使用相同的锁对象。这时线程B会等待线程A中synchronized包裹的代码执行完毕后 再执行,此时线程 A已经操作完了代码,反之线程 A也会等待线程B。线程执行目标类 成员位置 定义多个线程要 共享的同一份数据。线程执行目标类 成员位置 定义多个线程要 共享的同一把锁对象。 锁可以是任意类型的对象,

34、只要多个线程使用同一把锁就可以使多个线程操作相同数 据时同步。死锁:两个线程在运行时都在等待对方的锁,造成了程序的停滞,称为死锁。基本数据类型包装类:基本类型是内置的数据类型,为了使基本数据类型代表的数据使用起来更方便,统一 面向对象的思想, Java 设计了基本类型包装类,即每一种基本类型都对应一种引用类 型的包装数据类型。除去整型与字符型,其他基本数据类型将首字母大写即为包装数 据类型。自动装箱拆箱:之后 装箱就是把基础类型封装成一个类。比如把 int 封装成 Integer ,这时你就不能把他当 成一个数了,而是一个类了,对他的操作就需要用它的方法了。拆箱就是把类转换成 基础类型。比如你

35、算个加法什么的是不能用类的,就得把它转换成基本类型迭代器:使用迭代器完成集合遍历的过程是反复获得集合中元素的过程,通常我们将 这个反复获取的过程叫做迭代。增强 for 循环底层也是通过迭代器实现的。迭代过程中不能对集合元素进行增删动作,否则会发生并发修改异常(运行时)递归:递归就是“在一个方法内可以再次调用自身”递归调用必须要在某个条件下结束,否则就是死递归。递归调用的层次不能太多,否则会堆栈溢出。构造方法不能递归调用。四种访问权限:Private: 类访问级别默认:包访问级别Protected :子类访问级别Public :公共访问级别IO:IO 是 output 和 input ,是 Ja

36、va 中实现程序与设备之间数据交互动作的途径, java 中 将这种数据传输抽象为流。字节流:顶层父类: outputstream , inputstreamFileoutputstream ,Fileinputstream , bufferedoutputstream , bufferedinputstream字符流:顶层父类: Writer , readerFileWriter , FileReader , BufferedWriter , BufferedReader转换流: OutputStreamWriter,InputStreamReader字节流和字符流区别: 字节流以字节为单位

37、传输数据,传输的是 0101 数据,所以可以处理任何数据,字符流 是为了方便处理文本数据,通过字符码表实现字符与二进制数的转换。常见的字符码表:ASCII, Uni code , UTF-8, GBK(兼容 GB2312 并提供更多中文), GB2312匿名内部类:匿名内部类是创建某个类型子类对象的快捷方式。匿名内部类有两个步骤:临时定义一个类型的子类定义后即刻创建刚刚定义的这个类的对象匿名内部类就是没有名字的内部类,是内部类的简化形式。一般只使用一次的时候使 用匿名内部类, 匿名内部类本质上是一个匿名子类对象 。匿名内部类的使用前提: 内 部类继承一个类或实现接口。 匿名内部类包括两个步骤:

38、创建一个类或者接口的子 类,即刻创建该子类的对象。简化书写。网络通信协议:在计算机网络中进行连接和通信的规则。对数据的传输格式,传输速 率,传输步骤等有统一的规定,通信双方需要同时遵守才能完成数据交换。IP 地址:网络通信中计算机设备的唯一标识 端口:用于标识计算机设备中接收数据的网络应用程序具体是哪一个,有效端口 065535, 01024 为系统端口及保留端口TCP与 UDPUDP面向无连接,是不可靠协议,不能保证数据完整性,不安全。每个数据报限制在 64k 以内,发送数据较少,速度快,视频。TCP面向连接的通信协议,通过三次握手建立连接通路,是可靠协议,保证数据安 全,可进行大量的数据传

39、输,速度慢,效率较低。OSI 和 TCP/IP 模型传输层,网络层,传输层,网际层,数据链路层,物理层主机至网络层OSI 应用层,表示层,会话层,TCP/IP 应用层网络编程: 在 Internet 上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个 Socket ,并绑定到一个端口上,不同的端口对应于不同的服务。Socket 就是为网络编程提供的一种机制,又叫套接字编程。特点:网络编程三要素: IP (网络通信中计算机设备的唯一标识),端口(用于表示计算机 中接收网络数据的应用程序是哪一个),通信协议(客户端和服务器之间连接和通信 的规则,通常使用 TCP/IP ,三次握手

40、建立连接)通信的两端都有 Socket 。网络通信其实就是 Socket 间的通信。数据在两个 Socket 间通过 IO 传输。Socket编程一般使用TCP与UDF两种协议,我们主要使用 TCP TCP协议通过三次握手 协议将客户端与服务器端连接,两端使用各自的 Socket 对象。 Socket 对象中包含了 IO 流,供数据传输。数据库:1. 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据 存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。比如MySQL Oracle , SQLServer, DB2等等。2. 数据库是真正存储数据的地方。数据

41、库中以表为组织单位存储数据,类似于 java 中的类。根据表字段锁规定的数据类型,可以向其中添加数据,表中的每条数据类似于对象。SQL语句是用于我们和数据库进行交互的命令,完成增删改查等等。数据定义语言:DDL,用来定义数据库对象:数据库,表,列等,例如创建、删除、 修改:数据库、表结构等;数据操作语言:DML,用来对数据库中表的记录进行更新,例如:增、删、改表记录;数据控制语言:DCL用来定义数据库的访问权限和安全级别,及创建用户; 数据查询语言:简称DQL用来查询数据库中表的记录。具体命令查文档JDBC用于完成在Java代码中操作数据库。作用:连接数据库;向数据库发送SQL语句;操作SQL

42、语句的返回结果JDBC连接数据库过程:导入 mysql 的驱动程序 jar 包通过 DriverManager 注册驱动 通过 DriverManager 获取连接对象 Connection通过 Connection 获取一个可以向数据库发送 sql 语句的对象 Statement 通过 Statement 对象执行 sql 语句 (select) 得到一个结果集 ResultSet 遍历结果集 ResultSet ,得到数据表中的数据 释放资源JDBC优点:Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一 遍程序就可以让它在任何平台上运行。接口和抽象类: 抽

43、象类即不能创建实例的类,仅用来描述一种类型应该具备的基本特征与功能。 抽象方法即只有功能声明,没有功能主体实现的方法。包含抽象方法的类一定是抽象类。 接口是功能的集合,是比抽象类更为抽象的类,同样是一种数据类型,定义的是一种规则。必须实现抽象类或接口的所有抽象方法才可以实例化。区别:(1)成员特点: 构造方法:接口没有构造方法;抽象类有构造方法。 成员变量:接口中只有常量;抽象类中可以是常量,也可以是变量。 成员方法:接口中只有抽象方法;抽象类中既有抽象方法,也有非抽象方法。(2)关系特点: 类与类:类与类之间只有单继承,可以有多层继承。类与接口:类与接口之间是实现关系,可以单实现,也可以多实

44、现。 接口与接口:接 口与接口之间是继承关系,可以单继承,也可以多继承。抽象类被继承体现的是所属关系 is a 关系,抽象类中定义的是继承体系中的共性功 能;接口被实现体现的是 like a 关系,接口中定义的是继承体系中的扩展功能。 接口特点:Java 支持继承一个类同时实现多个接口。 接口可以继承接口。类可以在继承一个类的同时,实现多个接口 接口与父类的功能可以重复,均代表要具备某种功能。 接口中的成员是固定的:变量修饰符为: public static final(static与 final 明天讲解 )方法修饰符为: public abstract( 所以重写接口方法时,必须使用 pu

45、blic) 方法重写与方法重载: 所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不 同指的是参数个数、参数类型或者参数的顺序不同。构造方法就是重载形式存在的。 重载注意事项:方法名相同,参数列表不同( 参数个数、参数类型或者参数的顺序不同 ),与返回值无 关。当子类继承父类后,拥有了父类非私有的方法并可以直接调用。如果认为父类提供的 方法不够强大,子类可以按照子类自身的逻辑重新定义继承过来的父类方法,这个重 新定义一个方法的过程叫做方法重写。重写的结果是子类的方法便将父类的方法覆盖。一般情况下,继承就是为了方法重 写,不重写子类和父类一样就没有意义了。Java 中

46、方法重写规则: 访问权限相同或子类方法权限更大 方法名称和参数列表必须相同 返回值为基本类型时必须相同 返回值为引用类型时相同或子类小构造方法的特点 ?构造方法的注意事项 ?构造方法的特点: 1. 方法名与类名相同 2. 没有返回值类型,连 void 都没有 构造方法注意事项: 如果我们没有给出构造方法,系统将自动提供一个无参构造方法 如果我们给出了构造方法,系统将不再提供默认的无参构造方法。注意:这个时候,如果我们还想使用无参数构造方法,就必须自己给出。建议永远自 己给出无参数构造方法。This 和 super:this访问本类对象成员变量调用本类普通方法本类构造方法调用本类其他构造supe

47、r:访问本类对象当中的父类成员变量调用本类对象当中的父类普通方法本类构造方法调用父类构造this与super在调用构造方法时,均必须在第一行,只能调用其中的一个3. 对象内存图栈内存堆内存0x2254Chi nese c = 0x2254new Chi nese()For ,while ,do while :循环变量作用域 for 循环的循环变量其作用域仅限于循环体内,而 while 循环 的循环变量作用域不局限在循环体内。 2. 循环条件 for 循环的循环条件为空 是是死循环,而 while 循环的循环条件不能为空。无论条件是否满足,循环体 至少执行一次。Break ,continue ,

48、 return:break : (1). 结束当前整个循环,执行当前循环下边的语句。忽略循环体中任 何其它语句和循环条件测试。 (2). 只能跳出一层循环,如果你的循环是嵌套循 环,那么你需要按照你嵌套的层次,逐步使用 break 来跳出。 逐层判断,逐步 跳出 (3).break 在循环体内,强行结束循环的执行,也就是结束整个循环过 程,不再判断执行循环的条件是否成立,直接转向循环语句下面的语句。 (4). 当 break 出现在循环体中的 switch 语句体内时,其作用只是跳出该 switch 语 句体。 总的来说:就近原则,结束当前的整个循环。 2. continue : 终止本 次循

49、环的执行,即跳过当前这次循环中 continue 语句后尚未执行的语句,接着 进行下一次循环条件的判断。:结束方法,带参返回一个值给调用者。类与对象的关系:具有相同特征(属性)和行为 (功能) 的一类事物的抽象。,体现的是现实事物的映射 关系,对象是类的具体实例。类的使用是创建对象,一个类可以有多个对象,可以说创建对象是类最主要的使用方 式。String , StringBuffer , StringBuilder :String 是不可变的字符序列, String 对象一经创建就不会发生变化了,即便是赋新值 也不是在原对象的基础上改变,而是创建一个新的字符串对象,将引用指向这个新的 对象,会

50、造成空间的浪费,效率较低。 StringBuffer 只创建一个对象,是在同一个实 例的基础之上追加,效率更高,当需要用到 String 的时候 toString 就可以了StringBuffer 和 StringBuilder 的区别StringBuffer 是同步的,所以线程安全,但是效率低, StringBuilder 是不同步的, 所以线程不安全,但是效率高。 StringBuilder 要比 StringBuffer 快。单线程的程序 使用 StringBuilder 比较好,多线程的情况下可以自己加锁,也可以 直接使用 StringBuffer 。什么时候使用字符串缓冲区: 数据多,个数无所谓确定,类型无所谓确定,只要最后 都转变成字符串,就用字符串缓冲区。对于三者使用的总结:效率: StringBuilder StringBuffer

温馨提示

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

评论

0/150

提交评论