黑马程序员技术交流社区

标题: 【石家庄校区】JavaSE和JavaWeb阶段笔记 [打印本页]

作者: 夕阳海风    时间: 2018-4-23 16:51
标题: 【石家庄校区】JavaSE和JavaWeb阶段笔记
本帖最后由 小石姐姐 于 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代表切分的每个部分
               
特殊字符标签
        *空格  :
        *<     : <
        *>     : >






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2