《高级java培训》PPT课件_第1页
《高级java培训》PPT课件_第2页
《高级java培训》PPT课件_第3页
《高级java培训》PPT课件_第4页
《高级java培训》PPT课件_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

高级java程序设计 1 异常处理2 反射3 泛型4 多线程5 注释与反射6 网络编程 1 异常处理 本章主要了解java异常的类型 发生和控制 熟悉在java程序中如何灵活运行异常处理 使程序更加人性化 课程内容 1 1异常介绍1 2异常类型1 3异常管理1 4异常控制1 5异常处理案例 1 1异常介绍 程序为什么需要异常处理 异常是程序中的一些错误 但并不是所有的错误都是异常 并且错误有时候是可以避免的 比如说 你的代码少了一个分号 那么运行出来结果是提示是错误java lang Error 如果你用System out println 11 0 那么你是因为你用0做了除数 会抛出java lang ArithmeticException的异常 有些异常需要做处理 有些则不需要捕获处理 异常有两个来源 一个是Java运行时环境自动抛出系统生成的异常 比如在代码中执行3 0 这样就会抛出异常 二是程序员自己抛出的异常 1 2异常类型 异常结构图RuntimeException Error以及它们的子类都称为免检异常 其他异常都为比检异常 意思编译器会强制要求程序员检查并处理它们 1 3异常管理 遇到异常应该怎么办 什么时候我们自己会抛出异常 异常是针对方法来说的 抛出 声明抛出 捕获和处理异常都是在方法中进行的 Java异常处理通过5个关键字try catch throw throws finally进行管理try 程序代码 catch 异常类型异常的变量名 程序代码 finally 程序代码 1 4异常控制 抛出异常检测一个错误的程序可以创建一个正确的异常类型的实例并抛出它 示例 thrownewIllegalArgumentException wrongArgument 1 4异常控制 捕获异常当有一个异常被抛出 如何捕获 可以使用try catch捕获并处理 示例 try 这里为抛出异常的语句 catch Exception1e1 这里处理异常 catch Exception2e2 这里处理异常 catch Exception3e3 这里处理异常 注意 当一个语句抛出异常 会强制立刻执行捕获异常的语句 并往下执行 不会执行抛出异常的语句下面的语句 1 4异常控制 声明异常在java中 当前执行的语句必定属于某一个方法 java调用main 方法开始一个程序 每个方法都必须声明它可能抛出的比检异常类型 给方法声明异常publicvoidmyMethod throwsIOException声明多个异常publicvoidmyMethod throwsException1 Exception2 Exception3 ExceptionN 1 4异常控制 获取异常的信息异常的信息全部都保存在异常的那个实例中 所有可以通过调用异常实例的方法来获取信息 获取信息的方法 printStackTrace getMessage toString 和getStackTrace 1 5异常处理案例 如下面这串代码 2 反射 本章主要介绍java反射对类操作 了解java反射对类型的属性的获取和方法获取及其调用 课程内容 2 1反射介绍2 2反射 属性 2 3反射 方法 2 1反射介绍 java反射是用来获取一个类信息的技术 反射可以获取类的属性 构造方法 方法 并包括获取其值或者调用其方法 其使用的class为java自带包java lang reflect中 Classcls Class forName className 2 2反射 属性 反射获取属性使用到的class为FiledFiled getName 获取属性对象名Filed getType 获取属性类型 2 3反射 方法 反射获取方法使用到的class为MethodModifier toString Method getModifiers 获取方法修饰符Method invoke 实例 参数 Objett 获取属性类型Method getReturnType 获取方法的返回值 Constructorctorlist cls getDeclaredConstructors 获取构造方法 其他类似反射 方法 的使用 3 泛型 了解泛型的优点 并掌握java原生部分泛型的使用及建立自己的泛型类 课程内容 3 1泛型优点3 2泛型类的使用3 3建立泛型类 3 1泛型优点 在以前的java中是没有泛型的 那为什么会引入泛型呢 泛型的好处 1 类型安全 Mapm newHashMap m put key blarg Strings String m get key 2 消除强制类型转换 泛型的一个附带好处是 消除源代码中的许多强制类型转换 这使得代码更加可读 并且减少了出错机会 3 泛型的好处是在编译的时候检查类型安全 并且所有的强制转换都是自动和隐式的 提高代码的重用率 3 2泛型的使用 java预置的泛型使用Map以键值对储存类型的对象Mapmap newMap List以数组储存类型的对象Listlist newArrayList Listlist newArrayList 3 3建立泛型类 建立泛型类Genericsgenerics newGenerics booleanflag generics getT 当你这样使用的时候就会报错 4线程及线程应用 本章是了解线程的概念 掌握线程的控制 可以灵活运用线程课程内容 4 1线程的概念4 2线程的使用4 3线程同步和通信 4 1线程 4 1 1线程的概念4 1 2线程的生命周期 4 1 1线程的概念 进程 在多任务系统中 每个独立执行的程序称为进程线程 一个进程中可以包含一个或多个线程 一个线程就是一个程序内部的一条执行线索当程序启动时 就自动产生一个线程 主函数main就是在这个线程上运行的 创建多线程有两种方法 继承Thread类和实现Runnable接口 4 1 2线程的生命周期 新建就绪运行阻塞死亡 4 2线程的使用 4 2 1创建线程的方法4 2 2使用runnable接口的好处4 2 3启动线程4 2 4前台线程和后台线程4 2 5联合进程与join方法 4 2 1创建线程的方法 用Thread类创建线程要实现多线程 必须编写一个继承了Thread类的子类 子类要重写Thread的run方法 在run方法中调用想在线程上运行的程序代码 4 2 1创建线程的方法 使用Runnable接口创建多线程定义一个实现Runnable接口的类并生成实例生成一个Thread的实例将生成的Runnable接口的实例作为参数传递给Thread的构造方法 4 2 2使用runnable接口的好处 可以实现多个线程处理同一资源的情况避免Java单继承性带来的局限代码可以被多个线程共享 即run中的代码 4 2 3启动线程 线程启动 start 方法线程启动后 将执行线程实例中的run方法 4 2 4前台线程和后台线程 对于Java程序 只要有一个前台线程在运行 进程就不会结束 如果一个进程中只有后台线程运行 这个进程就会结束前台线程和后台线程是相对而言的 按前面的方式产生的都是前台进程 如果在调用start方法前设置IsBackground true 这个线程就变成了后台线程 4 2 4前台和后台线程的区别 publicstaticvoidmyStaticThreadMethod Thread Sleep 3000 Threadthread newThread myStaticThreadMethod thread IsBackground true thread Start 如果运行上面的代码 程序会等待3秒后退出 如果将注释去掉 将thread设成后台线程 则程序会立即退出要注意的是 必须在调用Start方法之前设置线程的类型 否则一但线程运行 将无法改变其类型通过BeginXXX方法运行的线程都是后台线程 4 2 5联合进程与join方法 voidjoin longmillis voidjoin longmillis intnanos 这两个方法的作用是指定合并的时间 前者精确到毫秒 后者精确到纳秒 即两个线程合并指定的时间后 又开始分离 回到以前的状态转化理解 join方法的功能就是使异步执行的线程变成同步执行 也就是说 当调用线程实例的start方法后 这个方法会立即返回 如果在调用start方法后后需要使用一个由这个线程计算得到的值 就必须使用join方法 如果不使用join方法 就不能保证当执行到start方法后面的某条语句时 这个线程一定会执行完 而使用join方法后 直到这个线程退出 程序才会往下执行 4 3线程同步和通信 5 3 1线程同步5 3 2线程通信5 3 3线程死锁5 3 4线程的生命控制 4 3 1线程同步 破坏线程安全的案例同步代码块的格式 synchronized object 代码块 object可以是任意一个对象 4 3 1线程同步 同步通过改变object的锁旗标实现同步会降低程序的性能同步代码块不仅指同一个代码块在多个线程间实现同步 也可以是不同的代码块之间相互同步 只要各synchronized object 代码 语句中的object是同一个对象 4 3 1线程同步 同步方法 函数 除了可以对代码块进行同步外 也可以对方法实现同步 只需在要同步的方法定义前加上synchronized关键字即可 4 3 1线程同步 synchronized关键字的使用1 是某个对象实例内 synchronizedaMethod 可以防止多个线程同时访问这个对象的synchronized方法 如果一个对象有多个synchronized方法 只要一个线程访问了其中的一个synchronized方法 其它线程不能同时访问这个对象中任何一个synchronized方法 这时 不同的对象实例的synchronized方法是不相干扰的 也就是说 其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法 2 是某个类的范围 synchronizedstaticaStaticMethod 防止多个线程同时访问这个类中的synchronizedstatic方法 它可以对类的所有对象实例起作用 synchronized关键字是不能继承的 也就是说 父类的方法synchronizedf 在继承类中并不自动是synchronizedf 而是变成了f 继承类需要你显式的指定它的某个方法为synchronized方法 4 3 2线程通信 线程间的交替调用 wait 使当前线程放弃监视器进入睡眠状态 直到其他线程进入同一监视器并调用notifynotify 唤醒同一监视器对象中调用wait的第一个线程notifyAll 唤醒同一监视器对象中调用wait的所有线程 具有最高级的线程首先被唤醒并执行 4 3 3线程死锁 Java线程死锁是一个经典的多线程问题 因为不同的线程都在等待那些根本不可能被释放的锁 从而导致所有的工作都无法完成 假设有两个线程 分别代表两个饥饿的人 他们必须共享刀叉并轮流吃饭 他们都需要获得两个锁 共享刀和共享叉的锁 在这种就需要在程序设计时考虑到这种情况 当出现这种情况 只有先牺牲其中一个先让他所持有的刀或叉 4 3 4线程的生命控制 不推荐使用的终止线程生命的方法 1 suspend和resume 会导致死锁 2 stop 导致数据不完整正确终止线程生命 interrupt 4 3 5正确终止线程生命interrupt publicvoidrun try 检查程序是否发生中断while Thread interrupted System out println Iamrunning point1beforesleepThread sleep 20 point2aftersleepSystem out println Calculating for inti 0 i 900000 i d d Math PI Math E d catch InterruptedExceptione System out println ExitingbyException System out println ATask run interrupted 5 注释与反射 本章主要介绍 5 注释与反射 在java的学习中我们会经常看到 override 我们也就都知道它是一个注释 但是一般注释都仅仅只是一段说明的语句并不是功能性的代码 理论上是没有功能的 但是 override的确是有功能的 这是因为在java有一部分的注释是能够实现功能的 我们可以自己定义注释类 比如 public interfacemyA String value default value1 Stringid default id1 我们把注释在方法的前面 放在属性的前面 放在类名的前面 并通过反射中的getAnnotation 函数获取注释 这个函数在Class Method Constructor Field中都有提供 注释如下 myA value aaaa id 1111 5 注释与反射 续 通过一段代码获取注释的对象 如下myAmA field getAnnotation myA class 我们就可以通过注释提供的方法获取定义注释时的值 同时也就可以根据属性值经行一些必要的操作 6网络编程 本章是介绍通过类连接到www 然后讨论如何通过TCP IP或UDP协议在网络上的两个程序间建立连接并交换数据课程内容 6 1网络概述6 2InetAddress类6 3UDP网络程序6 4TCP网络程序 6 1网络概述 6 1 1Ip地址6 1 2端口号6 1 3TCP和UDP6 1 4TCP UDP数据包基本格式6 1 5Socket6 1 6J包 6 1 1Ip地址 IP地址用4个字节 32位二进制数来表示 称为Ipv4正在试验和定制Ipv6 即16个字节表示 6 1 2端口号 一台计算机上可同时运行多个网络程序 IP地址只能保证把数据送到计算机 无法得知把数据交给哪个网络程序 所以每个被发送的数据包的头部都包含一个称为 端口 的部分 表示数据应交给哪个应用程序端口是0 65535间的一个整数 每个网络程序都有一个端口 0 1023端口是一些知名网络程序使用的 用户的普通网络程序应使用1024以上的端口数端口不能被两个或以上的网络程序重用 6 1 3TCP和UDP TCP TransmissionControlProtocol 传输控制协议UDP UserDatagramProtocol 用户数据报协议 6 1 3TCP和UDPTCP TCPTCP是面向连接的通信协议 提供两台计算机之间的可靠无差错的数据传输应用程序使用TCP通信时 源和目标之间会建立一个虚拟连接 6 1 3TCP和UDP UDPUDP是无连接通信协议 不保证数据的可靠传输 但能够向若干目标发送数据 接受发自若干个源的数据 6 1 4TCP UDP数据包基本格式 6 1 5Socket Socket是网络驱动层提供给应用程序的接口和一种机制 通过一种绑定机制与驱动程序建立关系 包含IP和Port信息发送数据时 应用程序将数据交给Socket 由Socket交给驱动程序向网络上发送接收数据时 计算机从网络上收到与该Socket绑定的IP Prot相关的数据后 由驱动程序交给Socket 应用程序可从Socket中提取数据 6 1 6J包 Java分别为UDP和TCP提供了相应的编程类 这些类放在包中 与UDP对应的是DatagramSocket 与TCP对应的是ServerSocket 用于服务器端 和Socket 用于客户端 InetAddress InetAddress是用于表示计算机地址的一个类InetAddress的getByName Stringhost 方法可根据条件返回一个InetAddress的实例InetAddress的getHostAddress 可返回IP地址字符串 6 3UDP网络程序 6 3 1数据报通信的概述6 3 2DatagramSocket的构造方法6 3 3关闭Socket6 3 4DatagramPacket的构造方法6 3 5数据的发送和接收6 3 6数据报通信的注意点 6 3 1数据报通信的概述 DatagramSocket和DatagramPacketDatagramSocket好比一个港口 应用程序只要把装着数据的 集装箱 放到港口上就算完成了数据的发送 剩下的工作由驱动程序完成DatagramPacket就是存放数据的集装箱 6 3 2DatagramSocket的构造方法 DatagramSocket的构造方法 publicDatagramSocket throwsSocketException使用该构造方法创建DatagramSocket对象时未指定端口号 系统会自动分配一个还没有被使用的端口号 用于编写发送程序 6 3 2DatagramSocket的构造方法 PublicDatagramSocket intport throwsSocketException使用该构造方法创建DatagramSocket对象时指定一个端口号 用于编写接受程序PublicDatagramSocket intport InetAddressladdr throwsSocketException使用该构造方法创建DatagramSocket对象时除了指定一个端口号外 还指定了IP地址 适用于由多块网卡的情况 用于编写接受程序 6 3 3关闭Socket 但不再使用某个Socket时 应该调用DatagramSocket close 方法关闭这个Socket 释放端口号和其他资源 6 3 4DatagramPacket的构造方法 publicDatagramPacket byte buf intlength 使用该构造方法创建DatagramPacket对象时指定了数据包的内存空间和大小 接收数据时用publicDatagramPacket byte buf intlength InetAddressaddress intport 使用该构造方法创建DatagramPacket对象时指定了数据包的内存空间和大小 以及数据包的目标地址和端口 发送数据时用 6 3 5数据的发送和接收 发送数据 publicvoidsend DatagramPacketp throwsIOException接收数据publicvoidreceive DatagramPacketp throwsIOException 6 3 5数据的发送和接收 DatagramPacket的getInetAddress 方法返回一个InetAddress实例对象DatagramPacket的getPort 返回端口号 6 3 6注意 UDP数据发送时不可靠的 数据可能在传输过程中丢失必须先运行UDP接收程序 再运行发送程序UDP接收程序运行到receive方法时将阻塞 直到网络上有数据到来 如果网络上没有数据发送过来 receive方法也没有阻塞 那么通常情况是使用了一个被其他程序占用的端口号 6 4TCP网络程序 6 4 1TCP概述6 4 2ServerSocket的构造方法6 4 3Socket的构造方法6 4 5TCP服务器和客户端的连接6 4 6完善TCP程序 6 4 1TCP概述 使用UDP通信的两个程序没有主次之分使用TCP进行通信的两个程序有主次之分 一个是服务器程序 一个是客户端程序 6 4 1TCP概述 服务器端与客户端的交互过程服务器程序创建一个ServerSocket 然后调用accept方法等待客户来连接客户端程序创建一个Socket 并请求与服务器建立连接服务器接受客户的连接请求 并创建一个薪的Socket与该客户建立专线连接刚才建立了连接的两个Socket在一个单独的线程 由服务器程序创建 上对话服务器开始等待新的连接请求 6 4 2ServerSocket的构造方法 publicServerSocket throwsIOException未与任何端口号绑定 不能被直接使用 需要继续调用bind方法才能完成和其他构造方法一样的功能publicServerSocket intport throwsIOException创建对象时就将ServerSocket和端口号绑定 如果port为0 则系统会自动分配一个未被使用的端口号 但由于作为服务器程序 端口号必须事先指定 其他的客户端程序才能与之连接 所以prot指定为0的情况一般不被使用 6 4 2ServerSocket的构造方法 publicServerSocket intport intbacklog throwsIOException在第二个构造方法的基础上 根据backlog参数指定 在服务器忙时 可以与之保持连接请求的等待客户数据量publicServerSocket intport intbacklog InetAddressbindAddr throwsIOException在第三个构造方法的基础上 根据bindAddr指定IP地址 适用于多个网卡的情况 6 4 2ServerSocket的构造方法 publicSocket 创建的Socket对象不与任何服务器建立连接 不能被直接使用 需调用connect方法才能完成和其他构造方法一样的功能 6 4 3Socket的构造方法 pub

温馨提示

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

评论

0/150

提交评论