JAVA总结(仅供考试用)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2012-2013(1)JAVA高级编程一、泛型基本概念:泛型是指参数化类型的能力。即泛型是类型的参数,类比变量,变量并不是内存中的某一个值,而是值的指代,同样的在编译过程中使用泛型,是为了在编译环境下创造能够指代类的参数,使得所编译代码可以具有更强的重用性。在类/接口/方法头均可使用泛型,然后在对应类/方法中可以使用泛型参数。如下publicclassForThisE{EgenericClass;}publicinterfaceForThisE{EgenericClass;}publicEvoidforThis(EgenericClass){}这样在编译过程中就可以忽略E的具体类型进行编译,其他类进行编译时,可以通过指定泛型参数来进行错误检测,如一个ListDoublelist。对其的方法操作限定为double类型数据,若有其他类型数据作为方法操作对象就会产生编译错误。我们应该强调的是泛型参数只是某Class的指代。这个指代在类/接口/方法被在编译期使用的时候才会被具体指定。泛型参数还有一些特别的使用方法如:?;?extendsT;?superT;这里T是被指定的,?是真正的泛型参数。Extends是代表泛型参数被限制为T或T的子类。Super是代表泛型参数被限制为T或T的父类。通配泛型。另外T可以替换为具体类,具有相同的意义。这种泛型的声明方法通常出现在方法体的声明中,用来指定参数的具体类限制。即在声明指代环节使用。另外我们还需要强调一点。泛型的存活时期只有编译期,即在编译期我们才能够发现它的作用,而在程序被编译器编译的时候泛型参数会被转换为原始类型,这叫做泛型消除。通配泛型会被它的限制类型取代,如无则被Object类取代。也正因如此泛型具有一定的限制,不可以使用E作为new运算符的对象。同时,即使同一个类的不同的泛型参数的两个实例对象,但在运行时这两个对象还是同一类的实例。二、Java集合框架Java集合框架是对数据结构的一种抽象,是将数据存储与数据操作整合。集合(collection):存储元素的容器。图(map):存储键/值对的容器(Key-Value)Java集合框架下只要支出三种集合:规则集(Set)、线性表(List)、队列(Queue)Set用于存储不重复元素,即set保证元素的唯一性。List用于存储有序元素,在List中元素可重复。Queue用于以先进先出的方式处理对象。Collection接口是出来对象集合的根接口,是对象操作的规范AbstractCollection类是提供Collection接口部分实现的便利类。(除了size方法和iterator方法)Add方法、addAll方法、remove方法、removeAll方法、retainAll方法、clear方法。isEmpty方法。Contains方法。-Set在Set中使用对象的equal方法判定是否元素重复。Equal方法的默认实现是对比对象引用值是否相等。一个规则集的Hash码是这个规则集所有元素Hash码的和。-HashSet默认情况下HashSet的容量为16,客座率是75%,一旦到达客座率则容量翻番。存放与HashSet中的对象被要求有正确的hashCode方法。如果两个对象相等那么它们的Hash码相同。-LinkedHashSet使用链表扩展HashSet类,支持对Set内的元素排序(按照它们插入顺序)。-TreeSet保证Set中的元素是有序的。插入TreeSet中的对象是Comparable的实例,以对象的CompareTo为对比方法进行排序。另如果对象没有实现Comparable接口,可以在构造函数中加入Comparator接口的实现类进行排序,该接口拥有compare和equals方法。-List在List中增加了一个可以双向操作的iterator,同时支持下标索引。-ArrayList使用数组实现List,这个数组是动态创建的,当元素个数达到客座率,将会自动扩充数组。trimToSize方法可以将数组容量减少至当前size。-LinkedList使用链表实现List。在Collections中提供了对List进行操作的静态方法,如排序,复制,填充等Set比List更加高效。-Map(接口)Map中不能有重复的Key,每一个Key对应一个Value。一个Key与一个Value构成一个条目,真正在图中存储的是这个条目。HashMap、LinkedHashMap、TreeMap(对Key排序)与Set的实现类似。三、多线程多线程的基本功能是在一个程序内允许同时运行多个任务。线程(thread)是指一个任务从头到尾的执行流。线程提供了运行一个任务的机制。多线程的基本原理是对进程资源的再分配,在CPU上采用时分复用的方式处理任务。在Java中线程用于任务执行,而每个任务实现Runnable接口,这个接口含有一个Run方法,即任务执行流。Thread类含有控制线程的方法,所以,一个合理的编程思想是将Thread类看成执行任务的容器,每一个任务实现了Runnable方法,虽然Thread类实现了Runnable接口,可以extendsThread实现run方法达到同样的效果。-ThreadYield方法为其他线程临时让出CPU时间Sleep方法使线程休眠X毫米Join方法使一个线程等待另一个线程结束。setPriority设置当前线程优先级,进程中线程按优先级处理。-SwingUtilities.invokeLater(newRunnable(){...});使用GUI事件分发线程,该线程处理GUI事件以及绘图。若在同一线程内进行时间上冲突的两个需求,应考虑使用多线程处理。-线程池ExecutorService是Executor的子接口用于操作线程池中的任务。线程池是线程的集合,当有任务加入,便调用空闲线程处理加入的任务。Shutdown方法用于关闭线程池,即不允许加入新任务。静态方法创建线程池实例对象newFixedThreadPool线程数固定。线程重用。NewCachedThreadPool若线程在一定时间内没有使用就终止线程。-线程同步在使用线程时,所遇到的问题是当对同一变量/方法进行调用的时候,可能产生赋值混乱/方法调用进度冲突等问题,这种情况成为竞争状态,一个没有多线程竞争状态的进程(程序)是线程安全的。关键字synchronized声明所标注方法是线程同步的,即在同一时间内只有一个线程可以使用该方法。其原理是在调用时为对象(实例方法的所属对象)/类(静态方法的所属类)加锁,然后执行该方法,最后解锁。在解锁之前,另一个将要调用对象/类中方法的线程将被阻塞,知道解锁。Java提供Lock类,是对锁的抽象,提供lock方法进行加锁,以及unlock方法进行解锁。Lock类的实例对象可以创建condition(条件)对象,提供await方法(当前线程等待),signal方法(唤醒一个等待线程)。Condition的具体使用如下:如某方法的调用存在一定条件,应当使用Lock和Condition类,在调用时加锁,然后判断是否符合调用条件,如符合则继续调用,否者使用condition的await方法是线程等待,直到其他线程完成调用条件进行signal。NewReadyThreadcreatedFinishedRunningstart()run()Waitfortargettofinishjoin()run()returnsyield(),ortimeoutinterrupt()WaitfortimeoutWaittobenotifiedsleep()wait()Targetfinishednotify()ornotifyAll()TimeoutBlockedInterrupted()四、网络(SocketandServerSocket)基于TCP/IP协议族中运输层协议TCP与UDP,JAVA提供基于流(TCP)与基于包(UDP)的程序设计。Socket是在运输层协议对IP地址以及进程端口号(port)的抽象。是进程进行通信的端点。应当注意的是一个Socket和ServerSocket创建是需要保证所使用的端口是未使用状态,否者会抛出异常。Socketsocket=newSocket(serverName,port);ServerSocketserver=newServerSocket(port);其中serverName的表现形式是服务端的IP地址。如服务端不存在则会抛出异常Java对于socket的数据通信是基于其本身的I/O流的,我们可以通过socket.getInputStream();socket.getOutputStream();来获取socket的输入/输出流,用于数据通信操作。(常用的输入/输出流:DataInputStream/outputObjectInputStream/output)Socket交互基本流程:serverSocket.accept()等待客户接入(阻塞方法,等待时阻塞服务器线程);客户端socket接入;获取相应的输入输出流;进行数据交互;关闭输入输出流以及socket;InetAddress类对IP地址进行抽象,封装主机的IP地址信息。若想服务器与多个客户同时进行交互需要为每个客户创建新的交互线程。即每个客户在其独立的线程上与服务器交互,服务器在另一独立线程上等待其他客户接入。其核心是多线程编程。五、对象序列化序列化:将Java对象转换为二进制字节序列反序列化:将二进制字节序列转换为Java对象方法:实现Serializable接口或Externalizable接口原理:在Java流(stream)对象进行对象传输时,按照对象的writeObject与readObject将对象进行二进制字节序列转换。Serializable接口以默认方法进行转换Externalizable接口需要自己定义转换方法(readExternal()/writeExternal())特别注意:只有实现这两个接口的类才能够被序列化与反序列化。同时该类需要至少一个构造方法。transient声明变量是临时的,不被序列化的。六、反射技术(reflection)Java反射机制运用JDK所提供的java.lang.reflect完成。主要类包括serverSocketClientSocketClientSocketThreadOnePortOneThreadTwoPortTwoAccept();ThreadThreeClass类:对.class文件的抽象,也是对类的抽象,包含类信息。Field类:对类中数据字段的抽象,包含字段信息Method类:对实例方法的抽象,包含方法调用、方法结构等信息Constructor类:对构造函数的抽象,包含其调用、结构等信息通过以上方法我们就可以在不知道类具体结构的时候,按照一定规则(如既定接口)进行类的使用。换言之,类的加载、探知等动作是在运行时完成的,甚至类名称、方法调用等都是在运行时才探知到的。-Class实例对象的获取1.实例对象的getClass()方法2.Class.forName(StringclassName);3.类名.class-Constructor的使用1.通过Class实例对象的实例方法getConstructor(Class[]params)获取constructor实例对象。Params为参数类的Class实例对象2.使用constructor对象实例方法newInstance(Object[]params)创建实例对象。Params为参数类的实例对象。PS:getConstructors()方法获取全部构造方法的Constructor[]-Method的使用1.通过Class实例对象的实例方法getMethod(Stringname,Class[]params)获取名为name的方法的Method实例对象2.通过Method实例对

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功