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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夕阳下的少年 初级黑马   /  2018-4-23 16:34  /  1133 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

日复一日,辛辛苦苦的总结
第九天课上笔记

File类的概述和常用功能

IO
File
                   File:文件和目录路径名的抽象表示形式,File 类的实例是不可变的
                  File类的构造函数                                                                                                                                          
                   File(Stringpathname) :将一个字符串路径封装成File对象
                   File(Stringparent,String child):传入一个父级路径和子级路径
                   File(Fileparent,String child):传入一个File类型的父级路径和子级路径              
构造方法:
                 File(Fileparent, String child) //将指定的路径名转换成一个File对象
                 File(String pathname)           //根据指定的父路径和文件路径创建File对象
                 File(String parent, Stringchild)   //根据指定的父路径对象和文件路径创建File对象
File类创建和删除功能        
         boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
         booleanmkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false  
         booleanmkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
         booleandelete():删除文件或者删除单级文件夹
创建功能:
boolean createNewFile()
booleanmkdir()
booleanmkdirs()                                                                                                                              
删除功能                                                                                                                                                                       
booleandelete()                     
         绝对路径:固定不可改变的路径,以盘符开头                                                                           
         相对路径:相对某个参照物,不能以盘符开头                                                                    
         在eclipse中相对路径相对应当前项目的根目录                                                                  
注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹         
第十天课上笔记

第十天    IO

         标准流输入出流
    publicstatic final InputStream in :字节输入流,用来读取键盘录入的数据
    publicstaticfinal int x;
    InputStreamis = Syste.in;
    Scannersc = new Scanner(System.in);                        
    publicstatic final PrintStream

第十一天课上笔记

第十一天 多线程的概述

多线程概述
进程:
Process,一个应用程序在内存中的执行区域
举例:
      一个正在运行的程序, 可以有一个或多个进程.
       例如: 查看资源管理器, QQ有1个进程, chrome浏览器有多个进程
      每个进程都会占用一部分系统资源
       如CPU, 内存, 磁盘, 网络等
线程:
        Thread, 是一个进程中的一个执行路径.

举例:
         一个进程中可以有一个或多个线程, 每个线程可以执行自己的代码
         的执行依靠CPU调度分配

单核CPU: 靠CPU不断高速的随机的切换执行的线程, 达到看似同时进行的效果

多核CPU:
            每个CPU可能完全执行一个线程, 或者多个CPU各自不断高速随机切换, 更高效
单线程和多线程特点
           单线程: 同一时间只做一件事情, 安全性高, 效率低.
           多线程: 同一时间做多件事, 安全性低, 效率高.
创建线程的第一种方式: 继承Thread类
            java.lang.Thread 类: 实现了 Runnable 接口
注意:
            线程何时启动?
            线程对象调用start() 方法开始启动, 启动后在新的线程中执行run() 方法的代码
            线程何时结束?
    当 run() 方法中的代码执行完毕后, 线程就会自动结束并销毁.
如果 run() 方法中有死循环无法结束, 则该线程永远执行
不要调用 stop() 或 suspend() 方法来结束线程, 这两个方法不管用, 不安全, 而且已经过时
main()方法是单线程的
       main() 方法
           也是执行在一个线程中的, 该线程的名称为 main , 一般称为主线程, 主线程和其他线程没什么区别
所以main()方法是单线程的, 方法中的代码是一行一行向下执行的
                  


注意:
    这种方式仍然是通过多个 Thread 对象来启动多个线程
    多个Thread对象使用同一个 Runnable 实现类对象, 就可以执行相同的任务
多线程的概念:
进程:进程指正在运行的程序. 确切的来说,档一个程序进入内存运行,即变成一个进程,   进程是处于运行过程中的程序,并且具有一定独立功能.
线程: 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一          个线程.一个进程中是可以有多个线程的,这个应用程序也可以死诚挚为多线程              程序.
         多线程中的线程安全问题: 使用同步代码块解决共享资源的问题
同步:
         表示多个线程在执行同步的代码时, 这些线程只能按顺序一个一个去执行

优缺点
同步安全性高, 效率低
不同步安全性低, 效率高
使用 synchronized 关键字:
同步代码块: 使用 synchronized 修饰的代码块
作用:
被同步代码块包裹的代码相当于在一个房间内, 锁对象相当于房间的锁
一个线程进入同步代码块, 会把门锁上, 同步代码块外面的线程看到同步代码块内部有线
程, 只能在外面等待
直到同步代码块内部的线程执行完毕从代码块中出来, 释放了锁, 外面等待的线程才能随
机进去一个
应用位置:
                   哪些代码属于共享操作, 需要避免安全问题, 就将这些代码放入同步代码块
术语:       线程进入同步代码块, 叫 获取锁
                   线程出同步代码块, 叫 释放锁
同步方法: 使用 synchronized 修饰的方法
锁对象   
         锁是一个任意类型的对象
         Object对象可以, String对象可以, Student对象等也可以...
         锁对象必须是被所有线程共享的, 也就是说多个线程都共用一个锁
         如使用同一个Runnable对象中的成员变量
         或使用某个类的静态变量
         或使用某个类的字节码对象
         同步必须配合锁对象来使用     
         
         


第十二天 面向网络编程

Socket
套接字
用于描述IP地址和端口, 是一种网络编程机制, 通信的两端都会有Socket
网络通信3要素
                            传输协议
                            IP地址
                            端口号
常见通信协议
UDP:      它是一种无连接的不可靠协议
                   数据传输大小限制为64K(一个包)
TCP:      它是一种需要建立连接的可靠协议
                   没有数据传输大小的限制
                  java.net.InetAddress 类: 用于表示IP地址对象, 可以获取主机名, IP地址等信息
静态方法
         staticInetAddress getLocalHost() : 获取本机的InetAddress对象
         staticInetAddress getByName(String host) : 根据主机名或IP的字符串获取主机的     InetAddress
对象
         staticInetAddress getLoopbackAddress() : 获取回环地址的InetAddress对象
成员方法
         StringgetHostAddress() : 返回主机的IP地址
         StringgetHostName() : 返回主机名
UDP相关类
java.net.DatagramSocket 类: 基于UDP协议的Socket
构造方法
         br.close();
         bw.close();
         client.close();
         DatagramSocket(): 创建DatagramSocket对象, 随机分配端口号
         DatagramSocket(intport) : 创建DatagramSocket对象, 指定端口号
成员方法
         voidsend(DatagramPacket p) : 发送数据包
         voidreceive(DatagramPacket p) : 接收数据, 数据保存在DatagramPacket对象中
         voidclose() : 关闭通信, 释放资源
         java.net.DatagramPacket类: UDP数据包
构造方法
DatagramPackage(byte[] msg, intmsgLength, InetAddress host, int port) :
                   创建数据包对象, 指定数据, 目标主机对象, 端口
DatagramPacket(byte[] buf, int length) :
                   创建数据包对象, 接收数据为length的数据, 存入byte数组中
成员方法
         byte[]getData() : 获取包中的数据, 以byte数组形式
         intgetLength() : 获取数据包中数据的长度, 即byte数组的长度
         intgetPort() : 获取发送方端口号
         InetAddressgetAddress() : 获取数据包发送方的InetAddress对象
TCP相关类
         java.net.Socket类: 基于TCP协议的Socket
构造方法
         Socket(InetAddressadd, int port)
成员方法
         OutputStreamgetOutputStream() : 获取输出流对象, 用于发送数据
         InputStreamgetInputStream() : 获取输出流, 即接收数据
         voidclose() : 释放资源
         java.net.ServerSocket: TCP服务端
构造方法
         ServerSocket(intport)
成员方法
         Socketaccept() : 监听数据, 会阻塞. 收到数据后返回Socket对象
         voidclose() : 关闭Socket
UDP收发数据步骤
发送端
         1.为发送端创建Socket对象(DatagramSocket):
                   DatagramSocketudp = new DatagramSocket();
         2.创建数据并打包:
                   DatagramPacketpacket = new DatagramPacket(buf, buf.length, address, port);
         3.发送数据:
                   DatagramSocket对象的 void send(DatagramPackage p)
         4.释放资源:
                   DatagramSocket对象的 void close()
接收端
         1.创建接收端Socket对象:
                   DatagramSocketDatagramSocket(int port)
         2.接收数据
         创建包对象:  DatagramPacket datagramPackage(byte[] buf,int length)
         接收包:  DatagramSocket 对象的 voidreceive(DatagramPacket p) , 该方法会阻塞等待接收
数据
         3.解析数据
                   获取发送端信息
                   DatagramPacket对象的 InetAddress getAddress() : 获取客户端
                   DatagramPacket对象的 byte[] getData() : 获取数据
                   DatagramPacket对象的 int getLength() : 获取数据长度
         4.输出数据
         5.释放资源:
                  DatagramSocket 对象的 voidclose()
                   TCP收发数据步骤
客户端
         1.创建客户端Socket对象(建立连接):
                   SocketSocket(InetAddress add, int port)
         2.获取输出流对象:
                   Socket对象的 OutputStream getOutputStream()
         3.发送数据:
         OutputStream对象的 void write(byte[] b)
         4.释放资源:
         OutputStream对象的 close()
         Socket对象的 close()
服务端
         1.创建服务端ServerSocket对象:
                   ServerSocketServerSocket(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() 方法
第十三天课上笔记

         反射
         概念: 在程序运行时, 获取任何一个类的所有属性和方法(包括私有的). 调用任意一个对象的所有属性和方
法(包括私有的)
         前提:
                   获得字节码对象
                   获取字节码对象的3种方法
                            1.  对象.getClass()
                            2.  类名.class
                            3.  Class.forName(String fullClassName)



反射能干的事
         获取一个类的字节码对象, 通过该字节码对象:
                   获取一个类的构造方法(public或全部权限的)
                   创建一个类的对象
                   成员属性(public或全部权限的)
                            获取属性值
                            设置属性值
                   获取一个类的成员方法(public或全部权限的)
                            调用成员方法
反射使用的相关类和方法
         java.lang.Class类: 类的字节码对象
                   获取构造方法
                            Constructor<?>[]getConstructors() : 以数组形式返回该类中所有public的构造方法.
                            如果没有public的, 则数组长度为0
                            Constructor<?>[]getDeclaredConstructors() : 以数组形式返回该类中所有权限的构
                            造方法, 包括private的. 如果该类是接口, 基本类型, 数组, void, 则数组长度为0
                           getConstructor(Class<?>...parameterTypes) : 根据参数列表返回指
定的public的构造方法. 参数列表填写参数的字节码对象
                            Constructor<T>getDeclaredConstructor(Class<?>... parameterTypes) : 根据参数列
                            表返回指定的所有权限的构造方法, 包括private的. 参数列表填写参数的字节码对象

获取成员属性
         Field[]getFields() : 获取所有public的成员变量
         Field[]getDeclaredFields() : 获取所有权限的成员变量, 包括private的
         FieldgetField(String fieldName) : 通过指定的成员变量名获取指定的public的成员
变量
         FieldgetDeclaredField(String fieldName) : 通过指定的成员变量名获取指定的所有
权限的成员变量, 包括private的
获取成员方法
         Method[]getMethods() : 返回所有public的方法数组
         Method[]getDeclaredMethods() : 返回所有权限的方法数组
         MethodgetMethod(String name, Class<?>... parameterTypes) : 获取public的方法,
传入方法名和方法形参字节码对象
         MethodgetDeclaredMethod(String name, Class<?>... parameterTypes) : 获取所有权
限的指定方法, 传入方法名和方法形参字节码对象

创建对象
         TnewInstance() : 使用该类的无参构造创建一个对象

java.lang.reflect.Constructor 类: 构造方法对象
         TnewInstance() : 通过无参构造方法对象创建一个类的对象
         TnewInstance(Object... initargs) : 通过有参构造方法对象创建一个类的对象, 传入构造方法所需的参数列表
         voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问
         所有权限的构造方法

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

java.lang.reflect.Method 类: 成员方法对象
         Objectinvoke(Object obj, Object... args) : 调用指定对象的成员方法
         voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员方法
JavaBean
         就是一个类
         作用: 用于封装和存储数据
         规范
                   类必须是public修饰的
                   成员变量必须是private的
                   必须有public的set/get方法
                   至少提供一个无参构造方法
                   实现Serializable接口(当对象需要通过IO流传输时)
Jar包
         JavaARchive, 后缀名为 .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个方法
                   staticvoid setProperty(Object bean, String name, Object value) : 给JavaBean对象的成员属性赋值, 传入对象, 成员属性名, 属性值
                   staticString getProperty(Object bean, String name) : 获取JavaBean成员属性的属性值, 传入对象, 成员属性名, 返回属性值的字符串形式
                   staticvoid populate(Object bean, Map properties) : 给JavaBean对象的成员属性赋值, 传入对象, Map的key是属性名, value是属性值第九天课上笔记
File类的概述和常用功能
IO
File
                   File:文件和目录路径名的抽象表示形式,File 类的实例是不可变的
                  File类的构造函数                                                                                                                                          
                   File(Stringpathname) :将一个字符串路径封装成File对象
                   File(Stringparent,String child):传入一个父级路径和子级路径
                   File(Fileparent,String child):传入一个File类型的父级路径和子级路径              
构造方法:
                   File(Fileparent, String child) //将指定的路径名转换成一个File对象
                 File(String pathname)           //根据指定的父路径和文件路径创建File对象
                 File(String parent, Stringchild)   //根据指定的父路径对象和文件路径创建File对象
File类创建和删除功能        
boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
         booleanmkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false  
         booleanmkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
         booleandelete():删除文件或者删除单级文件夹
创建功能:                                                                                                                                                                      boolean createNewFile()                                                                                                                            booleanmkdir()                                                                                                                                      
         booleanmkdirs()                                                                                                                              
删除功能                                                                                                                                                                       booleandelete()                                                                                                                           
         绝对路径:固定不可改变的路径,以盘符开头                                                                             相对路径:相对某个参照物,不能以盘符开头                                                                    
         在eclipse中相对路径相对应当前项目的根目录                                                                  
注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹         
第十天课上笔记
第十天    IO
         标准流输入出流
    publicstatic final InputStream in :字节输入流,用来读取键盘录入的数据
    publicstaticfinal int x;
    InputStreamis = Syste.in;
    Scannersc = new Scanner(System.in);                        
    publicstatic final PrintStream

第十一天课上笔记
第十一天 多线程的概述
         多线程概述
       进程:
Process,一个应用程序在内存中的执行区域
举例:
    一个正在运行的程序, 可以有一个或多个进程.
       例如: 查看资源管理器, QQ有1个进程, chrome浏览器有多个进程
    每个进程都会占用一部分系统资源
       如CPU, 内存, 磁盘, 网络等
线程:
    Thread, 是一个进程中的一个执行路径.

举例:
    一个进程中可以有一个或多个线程, 每个线程可以执行自己的代码
    的执行依靠CPU调度分配

单核CPU: 靠CPU不断高速的随机的切换执行的线程, 达到看似同时进行的效果

多核CPU:
    每个CPU可能完全执行一个线程, 或者多个CPU各自不断高速随机切换, 更高效
单线程和多线程特点
           单线程: 同一时间只做一件事情, 安全性高, 效率低.
           多线程: 同一时间做多件事, 安全性低, 效率高.
创建线程的第一种方式: 继承Thread类
    java.lang.Thread 类: 实现了 Runnable 接口
注意:
线程何时启动?
线程对象调用start() 方法开始启动, 启动后在新的线程中执行run() 方法的代码
线程何时结束?
    当 run() 方法中的代码执行完毕后, 线程就会自动结束并销毁.
如果 run() 方法中有死循环无法结束, 则该线程永远执行
不要调用 stop() 或 suspend() 方法来结束线程, 这两个方法不管用, 不安全, 而且已经过时
main()方法是单线程的
       main() 方法
           也是执行在一个线程中的, 该线程的名称为 main , 一般称为主线程, 主线程和其他线程没什么区别
所以main()方法是单线程的, 方法中的代码是一行一行向下执行的
                  


注意:
    这种方式仍然是通过多个 Thread 对象来启动多个线程
    多个Thread对象使用同一个 Runnable 实现类对象, 就可以执行相同的任务
多线程的概念:
进程:进程指正在运行的程序. 确切的来说,档一个程序进入内存运行,即变成一个进程,   进程是处于运行过程中的程序,并且具有一定独立功能.
线程: 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一          个线程.一个进程中是可以有多个线程的,这个应用程序也可以死诚挚为多线程              程序.
         多线程中的线程安全问题: 使用同步代码块解决共享资源的问题
同步:
         表示多个线程在执行同步的代码时, 这些线程只能按顺序一个一个去执行

优缺点
同步安全性高, 效率低
不同步安全性低, 效率高
使用 synchronized 关键字:
同步代码块: 使用 synchronized 修饰的代码块
作用:
被同步代码块包裹的代码相当于在一个房间内, 锁对象相当于房间的锁
一个线程进入同步代码块, 会把门锁上, 同步代码块外面的线程看到同步代码块内部有线
程, 只能在外面等待
直到同步代码块内部的线程执行完毕从代码块中出来, 释放了锁, 外面等待的线程才能随
机进去一个
应用位置:
                   哪些代码属于共享操作, 需要避免安全问题, 就将这些代码放入同步代码块
术语:       线程进入同步代码块, 叫 获取锁
                   线程出同步代码块, 叫 释放锁
同步方法: 使用 synchronized 修饰的方法
锁对象   
         锁是一个任意类型的对象
         Object对象可以, String对象可以, Student对象等也可以...
         锁对象必须是被所有线程共享的, 也就是说多个线程都共用一个锁
         如使用同一个Runnable对象中的成员变量
         或使用某个类的静态变量
         或使用某个类的字节码对象
         同步必须配合锁对象来使用     
         
         


第十二天 面向网络编程
Socket
套接字
用于描述IP地址和端口, 是一种网络编程机制, 通信的两端都会有Socket
网络通信3要素
                            传输协议
                            IP地址
                            端口号
常见通信协议
UDP:      它是一种无连接的不可靠协议
                   数据传输大小限制为64K(一个包)
TCP:      它是一种需要建立连接的可靠协议
                   没有数据传输大小的限制
                  java.net.InetAddress 类: 用于表示IP地址对象, 可以获取主机名, IP地址等信息
静态方法
         staticInetAddress getLocalHost() : 获取本机的InetAddress对象
         staticInetAddress getByName(String host) : 根据主机名或IP的字符串获取主机的     InetAddress
对象
         staticInetAddress getLoopbackAddress() : 获取回环地址的InetAddress对象
成员方法
         StringgetHostAddress() : 返回主机的IP地址
         StringgetHostName() : 返回主机名
UDP相关类
java.net.DatagramSocket 类: 基于UDP协议的Socket
构造方法
         br.close();
         bw.close();
         client.close();
         DatagramSocket(): 创建DatagramSocket对象, 随机分配端口号
         DatagramSocket(intport) : 创建DatagramSocket对象, 指定端口号
成员方法
         voidsend(DatagramPacket p) : 发送数据包
         voidreceive(DatagramPacket p) : 接收数据, 数据保存在DatagramPacket对象中
         voidclose() : 关闭通信, 释放资源
         java.net.DatagramPacket类: UDP数据包
构造方法
DatagramPackage(byte[] msg, intmsgLength, InetAddress host, int port) :
                   创建数据包对象, 指定数据, 目标主机对象, 端口
DatagramPacket(byte[] buf, int length) :
                   创建数据包对象, 接收数据为length的数据, 存入byte数组中
成员方法
         byte[]getData() : 获取包中的数据, 以byte数组形式
         intgetLength() : 获取数据包中数据的长度, 即byte数组的长度
         intgetPort() : 获取发送方端口号
         InetAddressgetAddress() : 获取数据包发送方的InetAddress对象
TCP相关类
         java.net.Socket类: 基于TCP协议的Socket
构造方法
         Socket(InetAddressadd, int port)
成员方法
         OutputStreamgetOutputStream() : 获取输出流对象, 用于发送数据
         InputStreamgetInputStream() : 获取输出流, 即接收数据
         voidclose() : 释放资源
         java.net.ServerSocket: TCP服务端
构造方法
         ServerSocket(intport)
成员方法
         Socketaccept() : 监听数据, 会阻塞. 收到数据后返回Socket对象
         voidclose() : 关闭Socket
UDP收发数据步骤
发送端
         1.为发送端创建Socket对象(DatagramSocket):
                   DatagramSocketudp = new DatagramSocket();
         2.创建数据并打包:
                   DatagramPacketpacket = new DatagramPacket(buf, buf.length, address, port);
         3.发送数据:
                   DatagramSocket对象的 void send(DatagramPackage p)
         4.释放资源:
                   DatagramSocket对象的 void close()
接收端
         1.创建接收端Socket对象:
                   DatagramSocketDatagramSocket(int port)
         2.接收数据
         创建包对象:  DatagramPacket datagramPackage(byte[] buf,int length)
         接收包:  DatagramSocket 对象的 voidreceive(DatagramPacket p) , 该方法会阻塞等待接收
数据
         3.解析数据
                   获取发送端信息
                   DatagramPacket对象的 InetAddress getAddress() : 获取客户端
                   DatagramPacket对象的 byte[] getData() : 获取数据
                   DatagramPacket对象的 int getLength() : 获取数据长度
         4.输出数据
         5.释放资源:
                  DatagramSocket 对象的 voidclose()
                   TCP收发数据步骤
客户端
         1.创建客户端Socket对象(建立连接):
                   SocketSocket(InetAddress add, int port)
         2.获取输出流对象:
                   Socket对象的 OutputStream getOutputStream()
         3.发送数据:
         OutputStream对象的 void write(byte[] b)
         4.释放资源:
         OutputStream对象的 close()
         Socket对象的 close()
服务端
         1.创建服务端ServerSocket对象:
                   ServerSocketServerSocket(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() 方法
第十三天课上笔记
         反射
         概念: 在程序运行时, 获取任何一个类的所有属性和方法(包括私有的). 调用任意一个对象的所有属性和方
法(包括私有的)
         前提:
                   获得字节码对象
                   获取字节码对象的3种方法
                            1.  对象.getClass()
                            2.  类名.class
                            3.  Class.forName(String fullClassName)



反射能干的事
         获取一个类的字节码对象, 通过该字节码对象:
                   获取一个类的构造方法(public或全部权限的)
                   创建一个类的对象
                   成员属性(public或全部权限的)
                            获取属性值
                            设置属性值
                   获取一个类的成员方法(public或全部权限的)
                            调用成员方法
反射使用的相关类和方法
         java.lang.Class类: 类的字节码对象
                   获取构造方法
                            Constructor<?>[]getConstructors() : 以数组形式返回该类中所有public的构造方法.
                            如果没有public的, 则数组长度为0
                            Constructor<?>[]getDeclaredConstructors() : 以数组形式返回该类中所有权限的构
                            造方法, 包括private的. 如果该类是接口, 基本类型, 数组, void, 则数组长度为0
                           getConstructor(Class<?>...parameterTypes) : 根据参数列表返回指
定的public的构造方法. 参数列表填写参数的字节码对象
                            Constructor<T>getDeclaredConstructor(Class<?>... parameterTypes) : 根据参数列
                            表返回指定的所有权限的构造方法, 包括private的. 参数列表填写参数的字节码对象

获取成员属性
         Field[]getFields() : 获取所有public的成员变量
         Field[]getDeclaredFields() : 获取所有权限的成员变量, 包括private的
         FieldgetField(String fieldName) : 通过指定的成员变量名获取指定的public的成员
变量
         FieldgetDeclaredField(String fieldName) : 通过指定的成员变量名获取指定的所有
权限的成员变量, 包括private的
获取成员方法
         Method[]getMethods() : 返回所有public的方法数组
         Method[]getDeclaredMethods() : 返回所有权限的方法数组
         MethodgetMethod(String name, Class<?>... parameterTypes) : 获取public的方法,
传入方法名和方法形参字节码对象
         MethodgetDeclaredMethod(String name, Class<?>... parameterTypes) : 获取所有权
限的指定方法, 传入方法名和方法形参字节码对象

创建对象
         TnewInstance() : 使用该类的无参构造创建一个对象

java.lang.reflect.Constructor 类: 构造方法对象
         TnewInstance() : 通过无参构造方法对象创建一个类的对象
         TnewInstance(Object... initargs) : 通过有参构造方法对象创建一个类的对象, 传入构造方法所需的参数列表
         voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问
         所有权限的构造方法

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

java.lang.reflect.Method 类: 成员方法对象
         Objectinvoke(Object obj, Object... args) : 调用指定对象的成员方法
         voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员方法
JavaBean
         就是一个类
         作用: 用于封装和存储数据
         规范
                   类必须是public修饰的
                   成员变量必须是private的
                   必须有public的set/get方法
                   至少提供一个无参构造方法
                   实现Serializable接口(当对象需要通过IO流传输时)
Jar包
         JavaARchive, 后缀名为 .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个方法
                   staticvoid setProperty(Object bean, String name, Object value) : 给JavaBean对象的成员属性赋值, 传入对象, 成员属性名, 属性值
                   staticString getProperty(Object bean, String name) : 获取JavaBean成员属性的属性值, 传入对象, 成员属性名, 返回属性值的字符串形式
                   staticvoid populate(Object bean, Map properties) : 给JavaBean对象的成员属性赋值, 传入对象, Map的key是属性名, value是属性值

0 个回复

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