专栏首页浪淘沙java学习day15---UDP,reflect,proxy

java学习day15---UDP,reflect,proxy

1.UDP udp是一种不安全的协议 容易丢失数据 不需要建立连接 效率高 数据是以数据包的形式发送 数据 IP 端口

客户端:

 public class Client {
    @SuppressWarnings("resource")
    public static void main(String[] args) throws Exception {
    //Socket 对象
    while(true) {
    byte[] b = "看海".getBytes();
    DatagramSocket ds = new DatagramSocket();
    InetAddress address = InetAddress.getLocalHost();
    DatagramPacket pa = new DatagramPacket(b, b.length, address, 8090);
    ds.send(pa);

    ds.close();
    }
    }
}

服务器端:

public class Server {

    @SuppressWarnings("resource")
    public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    DatagramSocket ds = new DatagramSocket(8090);
    while(true) {
    byte[] b = new byte[64*1024];
    DatagramPacket p = new DatagramPacket(b, b.length);

    //接收数据
    ds.receive(p);
    byte[] data = p.getData();
    int l = p.getLength();
    System.out.println(new String(data,0,l));
    ds.close();
    }

    }

}

2.reflect

  //获取User类的Class对象
    //一  通过对象 getClass()f方法
    User user = new User();
    Class<? extends User> c1 = user.getClass();
    //方式二  通过类
    Class<User>  c2 = User.class;
    //方法三  通过字符串
    Class<?> c3 = Class.forName("day14.reflect.User");
    System.out.println(c3.getName());

  //获取所有方法
    Method[] methods = c1.getMethods();
  //获取本类中的方法
    Method[] methods2 = c1.getDeclaredMethods();

  //获取公共的属性
    Field[] fields = c.getFields();
  //获取所有属性
    Field[] fields2 = c.getDeclaredFields();
  //获取所有构造函数
   Constructor<?>[] ct = c4.getConstructors();

   //获取某一个构造函数,并且创建对象  
   Constructor<?> con = c4.getConstructor(int.class,String.class);  //获取某一个构造函数
    Object user = con.newInstance(12,"haha");

    //强制修改私有变量
     Field f2 = c.getDeclaredField("name");     
        f2.setAccessible(true);
        f2.set(user, "刘惜君");
    //某个具体的方法
    Method m1 = c.getDeclaredMethod("run", String.class);
        m1.setAccessible(true);
        m1.invoke(user, "刘惜君我爱你");

3.增强父类方法的三种方式 (1)重写方法

 public  void add() {
    System.out.println("开始购买。。。");
    super.add();
}

(2)静态代理(在子类增加一个构造函数)

   public class MyProxy extends UserServiceImpl{
    UserService impl;
    public MyProxy() {

    }
    //构造函数 传递父类
    public MyProxy(UserService impl) {
        this.impl=impl;
    }
    public  void run() {
        System.out.println("开始事务。。。");
        impl.add();
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        UserService us = new UserServiceImpl();
        MyProxy m = new MyProxy(us); 
        m.run();
    }

}

(3)动态代理

 public class TestProxy {

public static void main(String[] args) {
    // TODO Auto-generated method stub
        /**
     * 第一个参数  类加载器  加载本项目中的所有类的的字节码
     * 第二个参数  获取被代理的对象的所有方法
     * 参数三         告诉他你的代理的业务,用来进行增强事务
     */
    UserService object = (UserService) Proxy.newProxyInstance(TestProxy.class.getClassLoader(), (Class<?>[]) UserServiceImpl.class.getGenericInterfaces(), new InvocationHandler() {

        @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("开启事务");
 Object invoke = method.invoke(new UserServiceImpl(), args);
        System.out.println("结束事务");
         return null;
            }
        });
        object.sub();
    }

}

4.配置文件 动态代理

  Properties p =new Properties();
    p.load(new FileInputStream("conf/bean.properties"));
    String className = p.getProperty("classname");
   Reader r = (Reader)Class.forName(className).newInstance();//创建实例对象
    r.read();
  配置文件(bean.properties):
  classname=day14.test.ReaderFile

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java学习day16---人际关系

    曼路
  • Java学习---C3P0的基本操作

    1.简介 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernat...

    曼路
  • java设计模式(2) 建造者模式,深复制与浅复制

    建造者模式 就是建造不同的东西,但是基本流程不变,将复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 //构建产品 public ...

    曼路
  • Java-内部类

    如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象(在静态方法内部创建某个内部类的对象),那么必须像在main()方法中那样,具体地指明这个对象的类型...

    桑鱼
  • Weex是如何在Android客户端上跑起来的

    Weex可以通过自己设计的DSL,书写.we文件或者.vue文件来开发界面,整个页面书写分成了3段,template、style、script,借鉴了成熟的MV...

    deep_sadness
  • Excel解析工具easyexcel全面探索

    之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存。所以阿里人员对它进行了重写从而诞生了easyexcel,它解决了过于消...

    老梁
  • java基础第十七篇之网络编程和装饰者模式

    1:网络概述 1.1 网络的发展Net 1964年,美国人—> 阿帕网—>以太网Internet 1.2 网络的通信协议 windows电脑,andro...

    海仔
  • 打好Java基础,从使用内部类开始!

    大家好,我是小菜,一个渴望在互联网行业做到蔡不菜的小菜。可柔可刚,点赞则柔,白嫖则刚!「死鬼~看完记得给我来个三连哦!」

    蔡不菜丶
  • 一步一步实现Android的MVP框架

    内容大纲: Android 开发框架的选择 如何一步步搭建分层框架 使用 RxJava 来解决主线程发出网络请求的问题 结语 一、Android开发框架的选择 ...

    腾讯Bugly
  • MapReduce之MapJoin案例

    思考:在Reduce 端处理过多的表,非常容易产生数据倾斜。怎么办? 在Map端缓存多张表,提前处理业务逻辑,这样增加Map 端业务,减少Reduce 端数据...

    爱学习的孙小白

扫码关注云+社区

领取腾讯云代金券