A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦一生 初级黑马   /  2018-4-23 16:38  /  715 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-4-25 17:14 编辑

             学习笔记

多线程的概述
        进程:Process,一个应用程序在内存中的执行区域(一个正运行的程序,可以有一个或多个)
        线程:Thread, 进程中的一条执行路径(一个进程可以有多个线程,也可以有一个)
        并发:并行发生,同时发生,多线程就可以实现并发
        同步:不是同时的意思,是指一步接着一步的执行,一个执行完毕再开始执行下一个.单线程就是同步
        异步:不是一步一步执行, 而是同时执行多步, 每个步骤何时结束不确定. 多线程就是异步
        阻塞:上一行代码正在执行, 还没有执行完毕, 程序就阻塞在这里了,下一行代码必须等上一行不再阻塞后才能执行


单线程和多线程的特点
        单线程:安全性高,效率低,同一时间只做一件事
        多线程:安全性低,效率高,同一时间做多个事情


多线程的实现方式
        1.继承Thread类,重写run方法
        2.实现Runnable接口,重写run方法(调用时仍要创建Thread类对象)


java.lang.Thread类:实现了Runnable接口
        构造方法
                Thread Thread() 创建Thread对象
                Thread Thread(Runnable r): 通过Runnable对象创建Thread对象
                Thread Thread(Runnable r, String threadName): 通过Runnable对象创建Thread对象并指定线程名
        成员方法
                void start(): 启动线程, 即让线程开始执行run()方法中的代码
                String getName(): 获取线程的名称
                 void setName(String name): 设置线程名称
        静态方法
                static Thread currentThread(): 返回对当前正在执行的线程对象的引用
                static void sleep(long millis): 让所在线程睡眠指定的毫秒


多线程中的常见问题
        资源共享: 卖票问题
                共享资源定义位置: 共享资源要定义在多个线程能够共同使用的地方, 如:
                        多个Thread共用同一个Runnable实现类对象, 则定义为Runnable实现类的非静态成员变量
                        如果只用Thread子类, 则可以定义为Thread子类的静态成员变量


操作共享数据的线程安全问题: 使用同步解决
        同步代码块
                synchronized (锁对象) {}
                        锁对象
                                必须是多个线程共享的对象:
                                        一个类的Class对象
                                        如果是实现Runnable, 则可以是this
        同步方法
                public (static) synchronized void method() {}
                        锁对象
                                静态同步方法, 锁对象是: 方法所在类的Class对象
                                非静态同步方法, 锁对象是: this


网络编程概述
        Socket
                套接字
                用于描述IP地址和域名,是一种网络编程,通信的两端都会有Socket
        网络通信3要素
                传输协议
                IP地址
                端口号
        常见的通信协议
                UDP: 无连接的不可靠的协议;每次传输限制为64k(一个包);不需要建立连接即可传输;发送速度快,不检查接收方是否真正接收到,有可能会丢包;
                TCP: 需要建立连接的可靠协议,传输数据没有大小限制;在传输前需要先建立连接(三次握手);它的重发机制保证了数据传输的准确性,但因为需要接收方发回验证信息,所以数据发送时间长,数据流量大
        
        java.net.InetAddress类:用于表示IP地址,可以获取主机名,IP地址等信息
                静态方法
                        static InetAddress getLocalHost();获取本机的InetAddress对象
                        static InetAddress getByName(String host)根据主机名或IP的字符串获取主机的InetAddress对象
                        static InetAddress getLoopbackAddress();获取回环地址的InetAddress对象,即127.0.0.1或localhost是一个固定的值
                        static InetAddress getByAddress(byte[] addr): 根据IP获取InetAddress对象
                                如: InetAddress.getByAddress(new byte[]{(byte)192, (byte)168, (byte)1, (byte)1});
                成员方法
                        String getHostAddress();返回主机的IP地址
                        String getHostName();返回主机名
        
        UDP相关的类
                java.net.DatagramSocket类:基于UDP协议的Socket
                        构造方法
                                DatagramSocket();创建DatagramSocket对象,随机分配端口号
                                DatagramSocket(int port);创建DatagramSocket对象,指定端口号
                        成员方法
                                void send(DatagramPacket p);发送数据包
                                void receive(DatagramPacket p);接收数据,数据保存在DatagramPacket对象中
                                void close():关闭通信,释放资源
                java.net.DatagramPacket类: UDP数据包
                        构造方法
                                DatagramPackage(byte[] msg, int msgLength, InetAddress host, int port): 创建数据包对象, 指定数据,数据长度, 目标主机对象, 端口
                                DatagramPacket(byte[] buf, int length): 创建数据包对象, 接收数据为length的数据, 存入byte数组中
                        成员方法
                                byte[] getData(): 获取包中的数据, 以byte数组形式返回
                                int getLength(): 获取数据包中数据的长度, 即byte数组的长度
                                int getPort(): 获取发送方端口号
                                InetAddress getAddress(): 获取数据包发送方的InetAddress对象
        
        UDP收发数据步骤
                发送端
                        1. 为发送端创建Socket对象(DatagramSocket):
                           - DatagramSocket udp = new DatagramSocket();
                        2. 创建数据并打包:
                           - DatagramPacket packet = new DatagramPacket(buf, buf.length, address, port);
                        3. 发送数据:
                           - DatagramSocket对象的void send(DatagramPackage p)
                        4. 释放资源:
                           - DatagramSocket对象的void close()
                接收端
                        1. 创建接收端Socket对象:
                           - DatagramSocket DatagramSocket(int port)
                        2. 接收数据
                           - 创建包对象: DatagramPacket datagramPackage(byte[] buf, int length)
                           - 接收包: DatagramSocket对象的void receive(DatagramPacket p), 该方法会阻塞等待接收数据
                        3. 解析数据
                           - 获取发送端信息
                                 - DatagramPacket对象的InetAddress getAddress(): 获取客户端
                                 - DatagramPacket对象的byte[] getData(): 获取数据
                                 - DatagramPacket对象的int getLength(): 获取数据长度
                        4. 输出数据
                        5. 释放资源:
                           - DatagramSocket对象的void close()
        
        TCP相关类
                java.net.Socket类: 基于TCP协议的Socket(是客户端)
                        构造方法
                                Socket(InetAddress add, int port) 传入服务端的IP地址和端口号
                        成员方法
                                OutputStream getOutputStream(): 获取输出流对象, 用于发送数据
                                InputStream getInputStream(): 获取输出流, 即接收数据
                                void close(): 释放资源
                java.net.ServerSocket: TCP服务端
                        构造方法
                                ServerSocket(int port);给出指定的端口号
                        成员方法
                                Socket accept(): 监听数据, 会阻塞. 收到数据后返回Socket对象
                                void close(): 关闭Socket


        TCP收发数据步骤
                客户端
                        1. 创建客户端Socket对象(建立连接):
                           - Socket Socket(InetAddress add, int port)
                        2. 获取输出流对象:
                           - Socket对象的OutputStream getOutputStream()
                        3. 发送数据:
                           - OutputStream对象的void write(byte[] b)
                        4. 释放资源:
                           - OutputStream对象的close()
                           - Socket对象的close()
                服务端
                        1. 创建服务端ServerSocket对象:
                           - ServerSocket ServerSocket(int port)
                        2. 监听数据:
                           - ServerSocket对象的Socket accept(), 获取客户端Socket对象
                           - 监听时是阻塞的
                        3. 获取输入流对象:
                           - Socket对象的InputStream getInputStream()
                        4. 获取数据:
                           - InputStream对象的int read(byte[] buf)
                        5. 输出数据:
                           - 将获取的字节数组转换为String打印输出
                        6. 释放资源:
                           - Socket对象的void close()方法
                           - ServerSocket对象的void close()方法


反射
        反射的摸目的:
                反射可以在不修改源代码的前提下, 改变程序的运行方式
                反射是后期web框架的底层实现基础, 帮助我们更好理解框架的原理
        概念:在程序运行时,获取任何一个类的所有属性和方法(包括私有),调用任意一个对象的所有属性和方法(包括私有)
        前提:获得字节码对象
                获取字节码对象的方式:
                        1 对象.getClass();
                        2 类名.class
                        3 Class.forName(String fullClassName)传入字符串的全类名
        反射能干的事:
                获取一个类的字节码对象,通过该字节码对象:
                        获取一个类的构造方法,创建一个类的对象,获取一个类的成员属性(获取属性值,设置属性值),获取一个类的成员方法(调用成员方法)
        反射使用的相关类和方法
                java.lang.Class类:类的字节码对象
                        获取构造方法        
                                Constructor<?>[] getConstructors(): 以数组形式返回该类中所有public的构造方法. 如果没有public的, 则数组长度为0
                                Constructor<?>[] getDeclaredConstructors(): 以数组形式返回该类中所有权限的构造方法, 包括private的. 如果该类是接口, 基本类型, 数组, void, 则数组长度为0
                                Constructor<T> getConstructor(Class<?>... parameterTypes): 根据参数列表返回指定的public的构造方法. 参数列表填写参数的字节码对象(没有参数可以不填,可变参数)
                                Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes): 根据参数列表返回指定的所有权限的构造方法, 包括private的. 参数列表填写参数的字节码对象(没有参数可以不填,可变参数)
                        获取成员属性
                                Field[] getFields(): 获取所有public的成员变量
                                Field[] getDeclaredFields(): 获取所有权限的成员变量, 包括private的
                                Field getField(String fieldName): 通过指定的成员变量名获取指定的public的成员变量
                                Field getDeclaredField(String fieldName): 通过指定的成员变量名获取指定的所有权限的成员变量, 包括private的
                        获取成员方法
                                Method[] getMethods(): 返回所有public的方法数组
                                Method[] getDeclaredMethods(): 返回所有权限的方法数组
                                Method getMethod(String name, Class<?>... parameterTypes): 获取public的方法, 传入方法名和方法形参字节码对象(没有参数可以不填,可变参数)
                                Method getDeclaredMethod(String name, Class<?>... parameterTypes): 获取所有权限的指定方法, 传入方法名和方法形参字节码对象(没有参数可以不填,可变参数)
                        创建对象
                                T newInstance():使用该类的无参构造创建一个对象
               
                java.lang.reflect.Constructor类: 构造方法对象
                        T newInstance(): 通过无参构造方法对象创建一个类的对象
                         T newInstance(Object... initargs): 通过有参构造方法对象创建一个类的对象, 传入构造方法所需的参数列表
                         void setAccessible(boolean canAccess): 设置为true时禁用Java的访问安全检查, 可以访问所有权限的构造方法


                java.lang.reflect.Field类:成员变量对象
                        Object get(Object obj): 获取指定对象的属性值
                        void set(Object obj, Object value): 将指定对象的属性值设置为指定的值
                        void setAccessible(boolean canAccess): 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员属性


                java.lang.reflect.Method类: 成员方法对象
                        Object invoke(Object obj, Object... args): 调用指定对象的成员方法
                        void setAccessible(boolean canAccess): 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员方法


JavaBean
        就是一个类
        作用: 用于封装和存储数据
        规范
                类必须是public修饰的
                成员变量必须是private的
                必须有public的set/get方法
                至少提供一个无参构造方法
                实现Serializable接口(当对象需要通过IO流传输时)
                        
Jar包
        Java ARchive, 后缀名为.jar, 是一个压缩文件, 里面包含编译后的class文件和说明信息
         作用: jar包中是写好的代码编译出来的class文件, 有了这些类文件, 就可以调用其中的方法
        导入jar包的步骤
                项目根目录下创建名为lib的目录
                复制jar文件, 粘贴到项目根目录下的lib目录下
                选中项目中的jar包, 右键, 选择Build Path, 点击Add to Build Path. 此时项目中的Referenced Libraries中会出现jar包名称的奶瓶, 说明已经添加成功
                导入的jar包整个项目都能使用
        
BeanUtils
        Apache组织提供的第三方类库Commons中的一个组件
        作用:
                利用反射技术给一个类的对象的成员属性赋值或获取值, 用于快速封装数据到JavaBean
        BeanUtils类常用的3个方法
                static void setProperty(Object bean, String name, Object value): 给JavaBean对象的成员属性赋值, 传入对象, 成员属性名, 属性值
                static String getProperty(Object bean, String name): 获取JavaBean成员属性的属性值, 传入对象, 成员属性名, 返回属性值的字符串形式
                static void populate(Object bean, Map properties): 给JavaBean对象的成员属性赋值, 传入对象, Map的key是属性名, value是属性值


菜鸟教程(学习网站)

HTML的概述
        HTML:Hyper Text Markup Language  超文本标记语言
                标记语言:通过一组标签的形式描述事物的一门语言
                超文本:比普通的文本更强大
                作用:制作静态页面
                使用:设计网站页面的时候
                创建:扩展名是.html或.htm结尾
                标签的属性:<标签 属性名="属性值" (可以有多个属性)></标签>
                注释<!-- 具体内容-->
                结构标签:
                        跟标签<html></html>
                        头标签<head></head>
                        体标签<boby>中间是具体的内容</boby>
               
                字体标签
                        <font>字体标签
                                属性:
                                        color属性:字体颜色
                                                值:英语单词设置,16进制数设置
                                        size属性:字体的大小(1到7)
                                        face属性:设置字体
                排版标签
                        标题标签: <h>标签h1到h6之间
                        段落标签: <p>标签
                        字体加粗: <b>标签
                        字体斜体: <i>标签
                        字体下划线: <u>标签
                        居中标签: <center>
                        横线<hr>
                        原生标签,(就是原来是什么现在就是什么)<pre>
                        
                图片标签
                        <img>图片标签
                                属性:
                                        src: 图片路径; 相对路径的写法: ./当前路径 ../上一级(多加一个就是在上一级);下一级写文件名/图片名
                                        width:宽度
                                        height:高度
                                        alt:图片找不到显示的内容
                                        (px是像素单位)
                列表标签
                        有序<ol>
                                        <li>内容</li>
                                </ol>
                                type属性
                                        1 :数字类型
                                        a :英文类型
                                        i :罗马字符
                                start属性:从哪开始
                        无序<ul>
                                        <li>内容</li>
                                </ul>
                                type属性
                                        disc:实心点
                                        circle空心圆
                                        square:方块
               
                超链接标签
                        <a>标签
                                属性:
                                        href :链接路径
                                        target:打开方式
                                                打开方式的设置:
                                                        _self:在自身页面打开
                                                        _blank:新打开一个窗口
                                                        _parent(有嵌套关系是才可用)

                表格标签
                        <table>表格标签
                                <tr>行
                                <td>列
                        属性:
                                width:表格宽度
                                height:表格高度
                                border:显示边框
                                align:表格水平位置(left左边,center中间,right右边)
                        合并单元格用到<td>的属性
                                colspan="列数"
                                rowspan="行数"
                                合并单元格要找准是跨行还是跨列
                        bgcolor:设置背景颜色
                        background背景图片设置

                表单标签
                        <form>表单标签
                                属性:action="表单数据提交的地址"
                                         method="提交的方式;有很多方式,常用get和post"
                                                get和post的区别
                                                        get数据会显示到地址栏,提交是有大小限制的
                                                        post数据不会显示到地址栏中,提交的是没有大小限制的
                                表单元素
                                        <input type="属性"> 根据type属性的不同有不同的输入类型
                                                文本框<input type="text">
                                                        属性:name(表单的名字,必要有,后台才可以接收数据)
                                                                value:默认显示的值; size:文本框的长度
                                                                maxlength:最大长度; readonly:只读
                                                密码框<input type="password">
                                                        属性: name必须有,后台接收数据
                                                                  value:默认显示的值;size长度;maxlength:最大长度
                                                单选按钮<input type="radio">
                                                        属性:name必须有,后台接收数据
                                                                value:提交到后台的值
                                                                checked:默认被选中
                                                复选按钮<input type="checkbox">
                                                        属性:跟单选一样
                                                文件上传<input type="file"> 属性:name必须有
                                                提交按钮<input type="submit" value="是显示在按钮上的字"/>
                                                重置按钮<input type="reset" value="是显示在按钮上的字"/>
                                                普通按钮<input type="button" value="是显示在按钮上的字"/>
                                                
                                                HTML5扩展的表单标签(不是所有浏览器都能用的)
                                                        <input type=”email”>只能写邮箱
                                                        <input type=”date”>日期选择
                                                        <input type=”number”>只能写数字
                                                        <input type=”color”>颜色选择
                                表单文本域:<textarea>
                                        <textarea name="必须有" rows="几行" cols="计列"></textarea>
                                表单下拉列表:<select>
                                        <select name="必须有">
                                                <option value="提交到后台的值">中间写显示在页面的字</option> (有多个选项可以写多个<option></option>)
                                        </select>

                特殊字符的标签:
                        空格                        
                        <                <
                        >                >




               


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马