建设化妆品网站服务,网站的建设包括,微信如何建网站,好看的影视大全下载异常处理
finally#xff1a;try或catch有return语句时#xff0c;finally也会在执行return之前执行异常是对象#xff0c;具有多态性#xff0c;可只声明或catch父类来处理多个异常#xff1b;为每类异常单独写多个catch块时#xff0c;要从子类到父类(从小到大)排catc…异常处理
finallytry或catch有return语句时finally也会在执行return之前执行异常是对象具有多态性可只声明或catch父类来处理多个异常为每类异常单独写多个catch块时要从子类到父类(从小到大)排catch块有风险方法的调用方式try/catchduckduck踢皮球式处理异常自己也声明要抛出相同异常将捕获到的异常从自己抛出main()抛出的异常由java虚拟机处理。异常处理规则不能没有trytry,catch之间不能有程序try一定要有catch或finally只有finally的try必须声明异常
GUI
垃圾中文版丢了关键的一句变得误解这段本意是要说指向子类的父类引用只能调用二者都有的方法(子类重写)而不能调用自己没有只有子类有的方法(重载、新定义)就是子类能做的事情比父类多。对比可以看到中文版少了第二个画线句子这让我一开始以为书写错了而且中文版第一句标题还把graphics拼写错了书上面也是错的。。。 保存对象
存储状态 实现过Serializable接口的类其对象才能序列化。
将序列化对象写入文件
创建FileOutputStreamFileOutputStream fileStreamnew FileOutputStream(“myfile.ser”);创建ObjectOutputStreamObjectOutputStream osnew ObjectOutputStream(fileStream);写对象os.writeObject( myobject );关闭ObjectOutputStreamos.close(); 读取对象解序列化
创建FileInputStreamFileInputStream fileStreamnew FileInputStream(“myfile.ser”);创建ObjectInputStreamObjectInputStream osnew ObjectInputStream(fileStream);读取对象Object oneos.readObject(); //readObject()返回值是Object类型转换对象类型MyClass myone(MyClass) one;关闭ObjectInputStreamos.close(); 写文本文件FileWriter (打开/建立文件、写入、关闭文件)
FileWriter writernew FileWriter(“myfile.txt”);writer.write(“hello”);writer.close();
读文本文件FileReader (关联文件、读、关闭文件)
File myFilenew File(“MyText.txt”);FileReader fileReadernew FileReader(myFile);BufferedReader readernew BufferedReader(fileReader);String linenull;while((line reader.readLine())!null){ //通常是循环读入 System.out.println(line);}reader.close();
PS输入输出相关操作都有包含在try/catch块中
缓冲区BufferedWriter, BufferedReader
BufferedWriterBufferedWriter writernew BufferedWriter(new FileWriter(aFile));BufferedReaderBufferedReader readernew BufferedReader (new File (aFile)); File类代表磁盘上的文件这个概念类似于文件路径而非具体文件的内容。File可用于创建文件对象、新目录(列出目录内容)、取得文件或目录绝对路径、删除文件
socket连接
socket是代表两台及其支架网络连接的对象连接就是两台机器之间的一种关系客户端通过建立Socket来连接服务器建立socket连接需要IP地址(或网域名称)和TCP端口号连接的建立代表双方存有对方的信息(IP,TCP端口号)TCP端口号(16bits)识别服务器上的特定程序InputStreamReader是转换字节成字符的桥梁注意用来连接BufferedReader与底层的Socket输入串流。
使用串流通过socket连接进行沟通读服务器数据
Socket chatnew Socket (“127.0.0.1”, 5000);InputStreamReader streamnew InputStreamReader (chat.getInputStream());BufferedReader readernew BufferedReader (stream);String messagereader.readLine (); PrintWriter连接Socket输出串流写数据给服务器
Socket chatnew Socket (“127.0.0.1”,5000);PrintWriter writernew PrintWriter(chat.getOutputStream());writer.println (“message1”); 编写服务器程序需要一对Socket等待用户请求的ServerSocket、与用户通信用的Socket
服务器应用程序对特定端口创建ServerSocket让应用程序开始监听来自4242端口的客户端请求ServerSocket serverSocknew ServerSocket(4242);客户端对服务器应用程序建立Socket连接Socket socknew Socket(“127.0.0.1”,4242);服务器创建于客户端通信的新SocketSocket sockseverSock.accept(); accept()方法只等待用户的Socket连接时处于闲置状态当用户连上来时此方法返回一个Socket与客户端通信。Socket与ServerSocket的端口不同因此ServerSocket可以空出来等待其他用户。 线程
线程代表独立的执行空间记录目前线程空间执行到哪里
启动新线程
建立Runnable对象(线程的任务)Runnable threadJobnew myRunnable();建立Thread对象(执行者)并赋予RunnableThread myThreadnew Thread(threadJob);启动ThreadmyThread.statr();
synchronized关键字修饰的方法具有原子性一次只能被单一线程存取
死锁出现了循环等待资源
数据结构 TreeSet 有序、不重复 HashMap 用成对的name/value来保存取出 LinkedList 用于经常删除、插入元素的集合 HashSet 防止重复的集合可快速找到相符的元素 LinkedHashMap 类似HashMap但可记住元素插入顺序可按元素上次存取顺序排序 a.equals(b)为true是a,b对象相等的充要条件hashcode相等是两个对象相等的必要条件a,b对象相等 a.equals(b)b.equals(a)true a.hashCode()b.hashCode。
HashSet检查重复
把对象加入HashSet时用hashcode判断对象加入的位置同时将其与已经加入的对象比较hashcode相同则表示重复。所以hashCode()必须被覆盖过因为hashCode()的默认行为是对堆上的对象产生独特的值如果没有覆盖则值相同的两个对象无法产生相同的hashcodeequals()也必须被覆盖过因为equals()的默认行为是执行比较即测试两个引用是否指向堆上同一个对象如果没有覆盖则两个对象永远不会被视为相等。
public T extends Animal void takeThing1 (ArrayList T list1)
takeThing1() 方法的参数list1可以是元素为任意Animal及其子类对象的ArrayList
public void takeThing2 (ArrayList Animal list2)
takeThing2() 方法的参数list2只能是元素为Animal对象的ArrayList。此时不能用Animal数组的多态思想来考虑Animal的ArrayList即list2因为ArrayList还有其他类似于add()的方法如果给list2赋予的是 Dog的ArrayList则当takeThing()里面有类似list2.add(new Cat) 的操作时编译不通过。
通配符?在方法参数中使用通配符时编译器会阻止任何可能破环引用参数所指集合的行为即不能加入元素。
另一种等效的类型参数声明方式在返回类型前声明类型参数
public T extends Animal void takeThing(ArrayListT list) //与下一句效果一样public void takeThing(ArrayList? extends Animal list)
发布程序JAR、JWS、RMI、Servlet -d指定存储编译过的文件的路径
JAR文件把一组类文件包装成pkzip格式。创建带有JAR信息的manifest文件后程序就可以在类文件保存在JAR的情况下执行
创建可执行的JAR
确定所有类文件都在classes目录下创建manifest.txt来描述那个类带有main()执行jar工具来创建带有所有类和manifest的JAR文件
用包创建可执行的JAR
确定所有类文件都放在class目录下正对相对应的包结构中创建manifest.txt文件来描述那个类带有main()以及确认有使用完整的类名称执行jar工具创建带有目录结构与manifest的JAR文件
把类包进包中在源程序最前面加上包指令package
Java Web Start(JWS)工作方式
客户端点击某网页上JWS应用程序的链接( .jnlp文件:描述应用程序可执行JAR文件的XML文件)Web服务器收到请求发送.jnlp文件给客户端浏览器浏览器启动Java Web StartJWS的helper app读取.jnlp文件向服务器请求JAR文件Web服务器发送.jar文件JWS取得JAR并调用指定main()启动应用程序 远程程序调用Remote Method Invocation,RMI——业界用的不多
客户端和服务器都是与各自的辅助设施打交道辅助设施之间通过Socket连接传输信息。
客户端调用服务端方法的过程
客户端对象对辅助设施对象调用方法客服段辅助设施把调用信息打包通过网络送到服务器辅助设施服务端的辅助设施解开来自客户端辅助设施的信息以此调用真正的服务 Java RMI提供客户端辅助设施对象 (stub) 和服务器端的辅助设施对象 (skeleton)提供执行期所需的全部基础设施(感觉像是调用远程对象的方法但其实不是)。因为辅助设施通过网络发出调用网络输入/输出有风险因此使用RMI是必须决定协议JRMP或IIOP
创建远程服务
1、创建Remote接口。接口定义了客户端可以调用的方法stub和服务器都会实现此接口
继承java.rmi.Remotepublic interface MyRemote extends Remote所有声明的方法都要抛出异常RemoteException确定参数和返回值都是primitive类或Serializable因为需要打包通过网络序列化传输
2、实现Remote接口。实现出定义在该接口的方法是真正执行的类是客户端会调用的对象
实现Remotepublic class MyRemoteImpl extends UnicastRemoteObject implements MyRemote继承UnicastRemoteObject使对象具有与远程相关的功能编写声明RemoteExpection的无参构造函数。因为UnicastRemoteObject的构造函数会抛出RemoteExpection因此在接口实现中也要声明一个构造函数抛出RemoteExpectionpublic MyRemoteImpl() throw RemoteException{ }用java.rmi.Naming的rebind()向RMI registry注册服务RMI系统吧stub加到registry中让远程用户可以存取远程服务
3、用rmic产生stub、skeleton。
JDK的rmic工具利用服务的实现产生stub和skeleton两个类
4、启动RMI registry。rmiregistry就像电话簿用户从此取得代理(客户端的stub helper)
5、启动远程服务。实现服务的类实例化对象并向RMI registry注册注册后才能对用户提供服务
code (创建远程服务后) 客户端如何取得stub对象
客户端查询RMIregistryNaming.lookup(“rmi://127.0.0.1/Remote Hello”);RMI registry返回解序列化的stub对象。(客户端必须要有由rmic产生的stub类否则stub类不会在客户端解序列化)客户端就像调用真正服务一样调用stub上的方法 Servlet——多多关注
servlet是放在HTTP Web服务器上运行的Java程序用户通过浏览器与网页进行交互式request会发送给网页服务器若request需要servlet服务器会执行或调用servlet得到用户所请求的结果
创建并执行servlet
找出可以存放servlet的地方。方便服务器存取servlet文件。取得servlets.jar并添加到classpath上。servlet不是Java标准库的一部分需要servlets.jar文件中的servlet相关包才能编译出servlet通过extend类HeepServlet来编写servlet类。servlet是个extend过HttpServlet的类编写HTML调用servlet。当用户点击引用到servlet的网页链接时服务器会找到servlet并根据HTTP的GET、POST等命令调用适当方法给服务器设定HTML网页和servlet。