本帖最后由 小石姐姐 于 2018-4-24 17:19 编辑
学习笔记
多线程 【让程序在同一时间执行多个程序】 进程:当前正在运行的程序 , 一个应用程序在内存中的执行区域;;--关闭进程后 该进程所在内存区域被释放 线程 : 【线程依赖进程;】---【 程序通过进程中的线程来运行,】 进程中的一个执行控制单元 执行路径 【一个进程可以有一个线程 也可以有多个】 单线程:安全性高 效率低 多线程:安全性低 【会产生线程安全问题】 效率高 多线程案例:360 迅雷 搜狐 雅 Google ; 多线程的实现方式1: 继承 Thread类】-- 实现 Runnable 接口】 Thread : [ jvm 允许应用程序并发运行多个执行线程] 【CPU执行程序的随机性】-----CPU高速切换每次执行一个 {多线程提高被CPU执行几率}】】】 两种创建新执行线程方法: 1 将类声明为 Thread 的子类;,该子类重写Thread的 run 方法; 方法: void run----- 用于让子类重写 表示该线程要执行的任务 ; 不能直接调用 void start----------启动线程 开始执行 run 中 方法 String getName------获取线程名字 String setName()------修改 修改线程名字 ------- String setName(); 启动线程------ start(); 【抛出异常---throw new RuntimeException;】 静态方法: 主方法是单线程; 方法中代码的执行顺序是---由上至下---- 由左至右; 主方法由【 J V M】调用 1 主方法代码单线程调用时 做一个 方法依次执行 2 主方法代码多线程时 多个执行 多线程的实现方式2: 实现 Runnable 接口; Thread【Runnable target】 static Thread currentThread():----返回当前线程对象; 【链式编程】 通过 Thread 调用 currentThread 从而实现调用setName 等方法; Runnable 的所有成员都是共享的;可以通过Runnable 一个接口实现多个继承 并且可以继承Thread类 及其方法; static void sleep -----------让当前线程睡一会; sysnchronized : 可以修饰代码块和方法 被修饰的代码块和方法一旦被某个线程访问 则直接锁住 其他线程将无法访问; 同步代码块: synchronized(锁对象){ } 注意:锁对象 需要被所有的线程共享; 区别: 同步 安全性高 效率低 ; 非同步 安全性低 效率高; 【同步代码块】: 同步 : synchronized(); 【同步方法】: synchronized(); 使用 该关键字修饰的方法 一旦被一个线程访问 将锁死; 静态同步方法: 当前类的字节码对象(); 非静态同步方法: 同步对象是 this . 【拓展】 并发: 同步 : synchronized(); 【单线程】 异步 : async 【多线程】 同一个线程是同步 不同线程是异步执行 【线程的随机性】 阻塞 : 上一行代码正在执行 还没有执行完毕 程序就阻塞在这里了 下一行代码 必须要等上一行代码执行完毕后 才会执行; 买票问题: 1 Thread类: 静态方法:static void sleep(long millis) :让所在线程睡眠指定的毫秒值; 2 实现Runnable接口: 定义非静态变量:int ticket = 100; 将 this.class 放在共享锁里; ** 1 保证类对象唯一** 2 使用 class 对象 ---------------------------------------------------------------------------网络编程 Socket(套接字): 用于描述IP地址和端口 是一个通信连的句柄 不同端口对应不同的服务; Socket 就是为网络编程提供的一种机制:通信的两端都有Socket: 网络通信其实就是Scoket间 的通信 : 数据在两个Scoket间通过IO传输。。。 网络通信三要素: IP地址【InetAddress】【分为:网络地址和主机地址】: 网络中设备标识 端口号: 物理端口 网卡口; 用于标记进程的逻辑地址 不同进程的标示 传输协议: -----通讯规则 ----TCP--- 建立连接 形成数据传输通道 在连接中 进行大数据量传输 通过【三次握手】完成连接 是可靠协议 必须建立连接 效率会稍低; 【重发机制 保证数据传输准确性】 【该方式适合准确性要求强的场合 不能忍受错误】 ----UDP---将数据封装成数据包 不用建立连接 数据包大小限制在64K 因为没连接 所以是不可靠协议 无需建立连接 速度快 【适合实时性要求较强的场合 该协议延迟小】 ---------======================================== InetAddress :----表示互联网协议 (IP地址); static getByName( ); String getHostAddress(); String getH ========================================= UDB 发送数据 : 创建发Socket对象端: DategramSocket 创建数据并打包 DatagramPacket ---此类表示数据报包; DategramPacket{数据 数据长度 IP 端口号;} 数据byte[ ] --设备地址IP---进程地址 端口号; 发送数据 send(); 释放数据 close(); UDB 接受数据: 【接受需要包去调用】 创建接受对象; DatagramScoked 接受数据 解析数据 输出数据 【【传输协议>>>IP >>>>端口号>>> 目的应用程序;】】 静态方法 通过类名去调用 ==================================== UDP: 注意问题: 端口号错误 不会报错 会正常发送; 端口号不能重复使用; ============================ TCP协议发送数据: 分为 客户端 和 接收端 java. net.ServerScoket----TCP服务端; 构造方法: ServerScoket(int port); 成员方法: java.net Socket 类: 基于 TCP协议的Scoked 作为客户端; 构造方法: Scoket( ); 基于TCP协议的Scoket 作为客户端; getOutputStream ---- getInputStream ------- 创建发送端Scoket对象 Scoket 获取输出端 OutputStream 键盘录入 用Systfem.in---然后转换成BufferedReade 一次读取一行 输出用 PrintWriter 包装字节流; 服务端读取 用BuffBufferedReade 转换成 socket.getInput 数据返回 客户端 用PrintWrite包装 【PrintWriter】---- //键盘录入 【】BufferedReader br = new BufferedReade (new Inputstream(System.in)) 【】 【】 获取输出流 Buffer PrintWriter out = new P(s.getout,true) 【】 【】 创建服务端 SeverSocked j监听 Socked 获取输入 BufferedReader = new BufferedReader(new Input(s.getInpu)) t 获取用户名 String String 判断是否正确 boolean 输出结果 PrintWriter 返回判断 if(){} 【】 【利用TCP协议完成模拟用户登录案例 · TCP客户端: 用户键盘输入用户名和密码, 发送到服务端进行登录, 接收服务端的结果打印 · · 键盘录入用户名密码: 不用Scanner, 用System.in流, 通过转换流转换为BufferedReader, readLine()一次读一行. 一行用户名, 一行密码 · · 将用户名密码发送到服务端: 不用socket.getOutputStream()写byte[], 用PrintWriter包装字节流, 按行输出用户名和密码的字符串 · · 然后读取服务端登录结果: 用BufferedReader通过转换流转换socket.getInputStream()的字节流, 使用readLine()按行读取 · · TCP服务端: 读取客户端发来的用户名密码进行比对, 返回结果 · · 服务端定义了一对正确的用户名和密码 · · 接收客户端发来的用户名和密码: 也使用BufferedReader通过转换流转换socket.getInputStream(), 按行读取, 读2行, 第一行是用户名, 第二行是密码 · · 比较用户名和密码是否一样 · · 返回登录结果: 用PrintWriter包装socket.getOutputStream(), 按行写出登录结果。 · ================================================================================================= 反射机制 【在不修改源代码的前提下 利用 . class文件 通过对类的引用 进行动态修改 改变程序运行方式】 1 概述: 在运行状态中 对任意一个类都能知道 该类的属性和方法;能调用任意一个对象的方法;该动态获取的类以及动态调对象的方法 ------就是 java 语言的反射机制; 通过反射可以得到 该 . class 字节码文件中的所有东西---成员变量 方法 构造方法 私有; 2 字节码文件获取的三种方式 1》 对象名:---来自Object --对象已存在 2》 类名 .class:---- 是静态属性 知道类名就可获取 3》 Class.forName("路径");-----通过class类中静态方法 指定字符串 【是类的全名】; 【字节码对象用来描述字 .class节码文件的 java 中 描述事物都是通过类的形式 字节码也可看做一种食物 】 1 前提 获取字节码对象 构造方法===创建类对象 3 构造方法 Constructor <T> [ ] getConstructor();--无参 Constructor <T> getConstructor(Class <?>...parameterTypes);----有参 4 成员变量 获取类的字节码对象----Class.forName( ); 获取学生类的对象-----newInstance( ); 【Accessble】------·忽略权限修饰符- 【Declared】-------搜索到所有成员变量(但是不能修改);-======================================================================================================================= HTML HTML 作用: 用来制作页面(静态页面); 使用: 创建文件---文件扩展名为 .html 或者 .htm将结尾; 结构标签: 跟标签----<html> </html>; <head>------html的 头标签 <body>-------html的体标签 字体标签: <font>标签 :HTML中的字体标签 使用 :<font>文字</font> <font>标签的属性: <标签 属性名 = “属性值“ 属性名 = ”属性值“></标签> 字体加粗---b 字体斜体---i 字体下划线---u 居中标签 ----center <center>内容<center> src -----图片来源 width-----图片宽度 height------图片高度 alt------图片找不到现实的内容 <br/> 换行 引入路径问题: 1 : 图片和文件在同一路径 ==直接写文件名 或 ./文件名 ====如果引入的图片在文件的上一级 <img src =" . . / 文件名"/> ========引入图片在下一级 无序列表的属性: <a href></a> type属性: disc-------实心点 circle-----空心圆 square-----方块 有序列表的属性: type属性:1----数字字符 a-----英文字符 i------罗马字符 *start 属性----从哪开始 超链接的target属性: _self _blank _parent <img> 图片当前所在位置</img> 【表格标签--】----- 属性: Width :表格宽度------最好指定宽度 防止将其他空格挤掉。 Height :表格高度 Border : 边框 Align : 表格水平位置----center 居中 *left *center-----内容居中 *right hr/---横的空格线 HTML的作用 用来制作浏览器页面;;;---制作静态页面 作用 ; 使用范围: --再设计网站页面的时候 都要用到-- ============================ 【总结】---=-=-=-=---=-==-= HTML的标准: < pre>标签-----原生标签====将复制文件保持原有格式 <hr/>---空白横线 -----多个空格; ====================================== 图片显示: 图片标签: <img> 属性: src---来源 width---图宽(px)0 height---图高 alt-----图片找不到内容---为图片注释说明 相对路径: 【. .】----返回上一级 ================================ 友情链接: 有序列表 <ol> <li> </li> </ol> 无序列表 <ul> <li> </li> </ul> 超链接标签 ===<a> 属性: href----连接路径 target ----打开方式 _self---在自身打开 _blank ----新打开一个窗口 总结:-- type属性: disc--实心点 circle -- 实心圆 square -- 方块 有序: type--- -start--从哪开始 1---数字 a---字母 i--罗马 表格: <table>---画表格 属性: Width----表格宽度 Height----高度 Border====边框 Align --- 居中 <tr> <td>讲话稿</td> </tr> 嵌套----- <tr colspan>----跨列合并 column----列 <tr rolspan>----跨行合并 row----行 【确定 是跨行还是跨列 确定好后 在确定跨行后占地多少 然后删除被合并 】 ====================================== 【【网站首页:】】 HTML 表单标签: <form>----</form> 表单元素: <input type = "text">---文本框 <input type = password----密码框 <input type = radio ---单选 <input type = checkbox----复选按钮 <input type ==button---- 没有任何功能的按钮 <input type = submit ------ 提交按钮 <input type = reset------重置按钮 <input type = file-----文件上传的表单项; <input type = hidden ---- 隐藏字段;---可提交到后台; <input type = 【image---将图片作为按钮】 selsct ----下拉列表 textarea-----文本区 背景图片---background--- align=center====表格居中 -------------text------------------------------ 获取文本框数据==为文本框 必须有name 属性 ;根据 【必须属性---name type】 name 接受属性 value----文本框默认值---可以修改; 单选按钮 --checked----默认被选中 size------控制文本框长度 disabled---修饰name name 不可改变 maxlength----限制接受数据长度最大值 readonly-----文本框只读 【checkbox】??=====【默认选中 checked】=====单选多选 selected------单选----省份 之类 【】form 常用属性action---提交路径method ----- 请求的方式 .GET和 . POST.默认是 GET;区别:1GET 和2POST 1数据显示到地址栏 提交有大小限制 2没有大小限制 数据不会显示到地址栏 密码---password 属性 同上 确认密码 不重名 ======================= 总结: <input type = email> :----- date -----日期 number---- color----颜色 【JavaEE805】 【lppirbio】
|