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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庞帅 初级黑马   /  2018-4-23 15:13  /  620 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

第12天  面向网络编程  1.网络三要素:

            传输协议:作用是通信的规则
            UDP协议发送数据:DatagramSocket类
            DatagramPacket类:表示数据报包
            UDP协议接收数据:DatagramPacket(byte[] buf, int length)
                                      构造 DatagramPacket,用来接收长度为 length 的数据包。
            注意事项:端口号错误,数据可以经常发出,不会出现异常,但收不到数据

            TCP协议发送数据:java.net.Socket   客户端   
            TCP协议接收数据:ServerSocket  服务端
            Socket accept():侦听并接受到此套接字的连接。(监听)

2. IP地址:(IPv4,IPv6)
           InetAddress类:此类表示互联网协议 (IP) 地址。
           static InetAddress getByName(String host):在给定主机名的情况下确定主机的 IP 地址。
           static InetAddress getLocalHost():返回本地主机     
           static InetAddress getByAddress(String host, byte[] addr):根据提供的主机名和 IP 地址创建 InetAddress。         
           String getHostName() :获取此 IP 地址的主机名。         
           String getHostAddress() :返回 IP 地址字符串(以文本表现形式)。

           注意:IP地址是唯一的
第13天  进阶基础
第1章 反射机制概述、字节码对象的获取方式、反射操作构造方法、成员方法、成员属性1. 反射介绍[size=18.6667px]      
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法       对于任意一个对象,都能够调用它的任意一个方法       这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制.          简单来说, 就可以把.class文件比做动物的尸体, 而反射技术就是对尸体的一种解剖.
通过反射技术, 我们可以拿到该字节码文件中所有的东西, 例如成员变量, 成员方法, 构造方法, 而且还包括私有
2. 字节码文件获取的三种方式
1. 对象名.getCalss();                 // 次方法来自于Object  对象已经存在的情况下, 可以使用这种方式
2. 类名.class                        // 类名.class这是一个静态的属性, 只要知道类名, 就可以获取
3. Class.forName(“com.itheima_01.Student”);                        // 通过Class类中的静态方法, 指定字符串, 该字符串是类的全类名(包名+类名)
// 此处将会抛出异常都系 ClassNotFoundException 防止传入错误的类名
3. 字节码对象是用来描述
1. 成员变量
         2. 成员方法
         3. 构造方法


2 反射操作构造方法             1. 直接通过Class类中的newInstance()和获取getConstructor()的区别
newInstance()方法, 只能通过空参的构造方法创建对象
getConstructor(Class<T>… parameterTypes)方法, 方法接受一个可变参数, 可以根据传入的类型来匹配对应的构造方法



3 反射操作公共成员变量1.反射public成员变量(字段)
通过反射运行public变量流程
1. 通过反射获取该类的字节码对象
          Class clazz = Class.forName("com.heima.Person");
2. 创建该类对象
          Object p = clazz.newInstance();
3. 获取该类中需要操作的字段(成员变量)
        getField(String name) --> 方法传入字段的名称.
        注意: 此方法只能获取公共的字段
        Field f = clazz.getField("age");
4. 通过字段对象中的方法修改属性值
        void set(Object obj, Object value)  --> 参数1): 要修改那个对象中的字段, 参数2): 将字段修改为什么值.
        f.set(p, 23);
2 .方法总结
             通过反射获取成员变量并使用  
                     Field[] getFields()              --> 返回该类所有(公共)的字段
                     Field getField(String name)      --> 返回指定名称字段
            
                    Field[] getDeclaredFields()      --> 暴力反射获取所有字段(包括私有)
                    Field getDeclaredField(String name) --> 暴力反射获取指定名称字段

4 反射操作私有成员变量1. 反射private成员变量(字段)
      反射private属性执行流程
               1. 获取学生类字节码对象
               2. 获取学生对象
               3. 通过getDeclaredField方法获取私有字段
               4. 通过setAccessiblejvm不检查权限
               5. 通过set方法设置对象为具体的值
2. 方法总结
         Field[] getDeclaredFields()      --> 暴力反射获取所有字段(包括私有)
      Field getDeclaredField(String name) --> 暴力反射获取指定名称字段
      void setAccessible(boolean flag) --> 让jvm不检查权限

5 通过反射获取成员方法并使用1.反射获取普通成员方法
       反射public方法执行流程
            1. 获取学生类字节码对象
            2. 反射手段创建学生对象
            3. 调用getMethod方法获取Method对象, 方法形参接受方法的名字
            4. 调用Method方法中的invoke()将方法运行
2 .方法总结
Class:
    Method getMethod(String name, Class<?>... parameterTypes)  
            // 此方法由字节码对象调用
            // 参数1: 要反射的方法名称
            // 参数2: 此方法需要接受的参数类型(注意,传入的都是字节码)
Method:
    Object invoke(Object obj, Object... args)  
            // 方法由Method对象调用
            // 参数1: 要由那个对象调用方法
            // 参数2: 方法需要的具体实参(实际参数)
3 .私有的成员方法
      // 获取字节码对象
            Class clazz = Class.forName("com.heima.Student");
            // 创建学生对象
            Object stu = clazz.newInstance();
            // 暴力反射获取方法
             Method method = clazz.getDeclaredMethod("method");
            // 让jvm不检查权限
             method.setAccessible(true);
            // 执行方法
            method.invoke(stu);
第2章 JavaBean的概述、BeanUtils的使用
JavaBean的概述:
将需要操作的多个属性封装成JavaBean, 简单来说就是用于封装数据的
规范:
类使用公共进行修饰
提供私有修饰的成员变量
为成员变量提供公共gettersetter方法
提供公共无参的构造
1. BeanUtils的概述
        BeanUtils的由来
          之前我们使用的类都是来自Java编写好的源代码而这个BeanUtils却是一个叫做Apache的组织编写.
                                那么这个组织编写的代码当中, 有一个系列可以很方便的提高我们今后的开发效率.
                                这个系列为Commons, BeanUtils就是其中之一
2. 准备工作        
1. 导入两个jar包
commons-beanutils-1.8.3.jar
commons-logging-1.1.1.jar
2. 将jar包Build path 配置到当前的classpath环境变量中
3 .BeanUtils的常用方法
static void    setProperty(Object bean, String name, Object value)
static String getProperty(Object bean, String name)
static void    populate(Object bean, Map properties)

        setProperty  用来给对象中的属性赋值(了解)
                参数1: 需要设置属性的对象
                参数2: 需要修改的属性名称
                参数3: 需要修改的具体元素        
        
        getProperty 用来获取对象中的属性(了解)
                参数1: 要获取的javaBean对象
                参数2: 对象中的哪个属性
                
        Populate 用来给对象中的属性赋值(掌握)
                参数1: 要设置属性的对象
                参数2: 将属性以Map集合的形式传入
                                        Key : 属性的名称
                                        Value:  属性具体的值
4. 方法总结
三个方法底层是通过反射实现, 而且反射操作的是setXxx方法和getXxx方法.
所以编写JavaBean的时候一定要注意格式
1. 功能分析
定义MyBeanUtils工具类, 实现与BeanUtils相同的功能
public static void setProperty(Object bean,String name,Object value)
                // 设置任意对象的, 任意属性, 为任意的值
                            public static String getProperty(Object bean,String name)
                                           // 获取任意对象的任意属性
                                         public static void populate(Object bean,Map map)
                                                         // 修改任意对象中的属性, 为传入Map集合中的键和值
2. 功能分析
public static void populate(Object bean,Map map)
                                         // 修改任意对象中的属性, 为传入Map集合中的键和值
                     思路:
a) 获取传入对象的字节码对象
b) 获取map集合中所有的键和值
c) 调用Class中的getDeclaredField()方法将每一个键传入, 得到Field对象
d) 通过Field对象中的set方法赋值
e) Try catch捕获getDeclaredField方法可能发生的异常.(为了方式传入错误的值)



0 个回复

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