本帖最后由 小石姐姐 于 2018-4-27 10:41 编辑
阶段笔记整理 多线程(Thread) Ø 构造方法 1. 新建一个MyThread(名字随便起)类,并实现Thread类,再在主方法中创建MyTread类的对象,一个MyTread对象即为一个线程 2. 新建一个MyRunnable(名字随便起)类并实现Runnable类,再创建MyRunnable对象,再创建Thread类的对象并传入刚刚新建的MyRunnable对象,一个Thread对象即为一个线程 注意:为了更直观地分辨各个线程,一般在创建新线程后,使用setName()来设置其名称;;或者在创建对象时传入名称new Thread(Runnable对象,要创建的Threa的名字) Ø getName()为获取该线程名称的方法 Ø 每个线程都会有一个run()方法,相当于在创建新的线程的时候领取一份,所以,各个线程并非同时使用一个run()方法,而是每个线程都有一个相同的run()方法 Ø 在多线程中,多个线程往往会共享相同的数据。Cup在执行多线程的时候,是在不同线程之间高速切换来实现的,所以,多个线程在同时使用同一个数据时,往往出现问题,比如火车站卖票的例子中,有时候会出现卖出了负数张票,或者一张票多次卖出的情况 Ø 为了解决多线程操作共享数据时出现的问题,需要使用同步代码块来对程序进行约束,即synchronized(锁对象) 。 Ø 同步代码块的使用格式:Synchronized(锁对象) {//需要同步的代码块(会出现冲突的代码)}。锁对象需是一个这样的对象:多个线程同时拥有的对象 Ø 同步代码块:安全性高,效率低; 非同步代码块:安全性低,效率高 Ø 同步代码块的注意事项: 重点是要理清要同步的代码部分,在什么地方开始“锁起来” 所对象一定是所有冲突线程所共有的,通常使用其Class对象 面向网络编程 Ø 网络通讯的三要素 : 协议,IP地址,端口 Ø InetAddress类 : 静态方法:getByName(String host)根据主机名获得其IP getLocalHost()获取本主机的IP地址 非静态方法:getHostName()获取主机名 getHostAddress()获取IP地址 UDP协议 Ø UDP协议:占用的资源小,通信效率高,但是容易丢包,因为其相当于广播,只发送,不管对方能不能接收到 TCP协议:通信之前,首先判断通信双方是否能正常通信,建立一个可靠的连接之后才 进行数据的传输,因而效率比较低 Ø UDP协议传输数据,要创建DatagramPacket对象,数据包,用来装要发送的数据,(打包发送) 构造方法:DatagramPacket(byte[] buf, int length)接收端用于接收长度为length的数据包 DatagramPacket(byte[] buf, int length, InetAddress address, int port)发送端用 来将长度为length的数据包发送到地址address的port端口上 Ø DatagramPacket类的方法,用于从数据包中获取各项需要知道的信息 getAddress() getPort() getData()获取数据包中的byte数组 getLength()获取数据包的长度(int) Ø DatagramPacket数据包(要收发的东西) DatagramSocket发送或接收对象(用它收发东西,发的东西里本来就有地址和端口,接 收对象本来就指定了在哪个端口接收) TCP协议 Ø 客户端需要创建Socket对象,用于发送;服务端需要创建ServerSocket对象用于接收; Ø 服务器在接收数据时,使用accept()方法获取到的是服务端对象Socket; Ø 当客户端与服务端建立连接后,数据是以IO流的形式进行交互的 Ø 创建接收端ServerSocket对象,用accept()方法获取Socket对象,获取字符输入流对象,创建用于接收字节的数组byte[],解析数据,用Socket对对象来获取InetAddress Ø ##模拟用户登录的案例## 反射 Ø 得到某个类的字节码对象,进而得到这个类所有属性和方法,并调用 Ø 获得字节码对象的方式 1.对象.getClass() 2.类名.class 3.调用Class类的forName()方法:Class.forName(类的全名包名+类名) Ø 反射获取构造方法 Class对象调用getConstructors() 获取全部构造方法,返回数组形式 getConstructor()传入参数时获取对应的构造 Object obj = c.newInstance("lisi",30);用得到的构造方法创建对象,返回Object Ø 可以直接用Class.newInstance(),但是只能通过空参方法创建 Ø getFields() 获取所有public修饰的成员变量 getDeclaredFields() 获取包括私有权限在内的所有成员变量 Ø 反射操作私有成员时,用getDeclared....方法获取私有字段,再通过setAccessilbe让虚拟机不检查权限,达到操作私有成员的目的 Ø getMethod()获取成员方法,用成员方法对象调用invoke()来运行方法 Ø 若要获取特定的成员方法,可在方法后的小括号内传入字符串形式的方法名,如果这个方法需要传入参数,用“,”隔开,传入参数类型的.class Ø 私有方法同样使用setAccessible(true)来接触权限限制 BeanUtils Ø Static void setProperty(Object bean,String name,Object value) bean:要设置哪个对象的属性 name:要设置的属性名称 value需要修改成的具体元素,要改成什么就传入什么 Static String getProperty(Object bean,String name) Static void populate(Object bean,Map properties)使用此命令直接将Map对象中的属性 赋值给对象,如果有未找到的键,自动跳过,不会报错 Ø 自定义BeanUtils 注意:在定义方法过程中,使用setAccessible(true)来绕过权限,使方法能用于获取和修 改所有权限的属性,保证方法的可使用性更好 在编写populate()方法时,使用try...catch(){}语句捕获属性找不到的错误,使方法的适用 性更友好
页面信息的显示 <font>----字体 <color> <size> 排版标签 标题 <h1>----一级标题 <h2>----二级标题 ... <h6>----六级标题 段落 <p></p> 字体加粗倾斜下划线 <b></b> <i></i> <u></u> 同office软件 居中标签 <center></center> 分割线 <hr/> html导入图片 *标签 <img /> *属性 *src :图片的来源. *width :图片的宽度. *height:图片的高度. *alt :图片找不到显示的内容. *图片路径 * ../上一层目录 * 直接写,为当前目录 网站列表页面的显示 列表标签 有序列表 <ol> <li>要显示的东西</li> </ol> type属性 *disc :实心点. *circle :空心圆(点). *square :方块. 无序列表 <ul> <li></li> </ul> type属性: * 1 :数字类型 * a :英文类型 * i :罗马字符序号 *start属性:从哪里开始 超链接标签 <a></a> 属性: href :链接的路径 target :打开的方式 *_self :在自身页面打开 *_blank :在新窗口中打开 *_parent 表格标签 <table>----表格 <tr>----行 <td></td>----列 <td></td> </tr> </table> 表格的属性 width :表格的宽度(只要设置其中一行的宽度,其他行的宽度都变) height :表格的高度 border :表格的边框 align :表格的水平位置: *left *center *right cellspacing:设置表格行之间的行距 bgcolor:设置表格的底色 <td>的属性 *colspan="列数" *rowspan="行数" 表单标签 <form></form> 常用属性: *action属性:提交的路径,默认提交到当前页面 *method属性:请求的方式:GET 和 POST、默认是GET. ***** GET 和 POST 方式的区别: *GET :数据会显示到地址栏中.GET方式提交的是有大小限制 *POST :数据不会显示到地址栏中.POST方式提交的是没有大小限制. 表单元素 *<input type="text"> :文本框. *常用属性: *name :表单元素的名称,必须有name属性,然后后台才可以接收数据 *value :文本框的默认值 *size :文本框的长度 *maxlength:文本框输入的最大长度 *readonly:只读文本框 *<input password> :密码框 *常用属性: *name :表单元素的名称,必须有name属性,然后后台猜可以接收数据 *value :密码框的默认值 *size :密码框的长度 *maxlength:密码框的最大输入长度 *<input type="radio"> :单选按钮 *常用属性: *name :表单元素名称,必须有name属性,然后后台才可以接收数据 *value :单选按钮的默认值(传到后台的数据值) *checked:单选按钮默认被选中 *<input type="checkbox"> :复选按钮 *常用属性: *name :表单元素的名称,必须有name属性,然后后台才可以接收数据 *value :单选按钮的默认值 *checked:单选按钮默认被选中 *<input type="button" value="按钮上的字"> :普通按钮,没有任何功能的按钮 *<input type="submit" value="按钮上的字"> :提交按钮 *<input type="reset"> :重置按钮 *<input type="file"> :文件上传的表单项 *<input type="hidden"> :隐藏字段 *<input type="image"> :图片按钮 *<select name=""> <option value="提交到后台的数据的值"></option> </select>:下拉列表 *<textatea>:文本域 *<input type="email"> :限定输入的文本为邮箱 *<input type="date"> :表单项弹出小日历 *<input type="number"> :表单项为数字选择或输入数字 *<input type="color"> :表单项为颜色 框架标签 <frameset>,标签与body标签是冲突,有frameset就可以没有body *属性: *rows *cols 使用<frame>标签,frame代表切分的每个部分 特殊字符标签 *空格 : *< : < *> : >
|