Java热点知识回顾第一期

1 反射

最经典的就是代理模式啦,代理就好比是放了一个你的克隆人一样,但这个克隆人比你的功能更强,能放出一些你没有的招式,这个克隆人就叫就是你的代理对象;代理又分静态代理和动态代理

1.1 静态代理

直接点来说就是仅仅特定的为某个类做增强,一旦再新来个类,还另需再建代理,不灵活;

1.2 jdk动态代理

灵活,建立的代理类可增强任意类;

怎么创建一个代理对象可以从下边考虑

  1. 接口 2. 实现类 3. jdk动态代理类实现invocationhandler 4. 工厂模式类获取代理对象Proxy
/*吃的接口*/
public interface Eat {
    void eat();
}
/*吃的实现类*/
public class EatImpl implements Eat {
    private static final Log log = LogFactory.get();

    @Override
    public void eat() {
        log.info("我吃饭啦");
    }
}
/*jdk动态代理*/
public class JdkInvocationHandler implements InvocationHandler {
    private static final Log log = LogFactory.get();

    /**
     * 代理对象
     */
    private Object objectProxy;

    public JdkInvocationHandler(Object objectProxy) {
        this.objectProxy = objectProxy;
    }

    @Override
    public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
        log.info("我饿啦" + method.getName());
        Object invoke = method.invoke(objectProxy, objects);
        log.info("我饱啦" + method.getName());
        return invoke;
    }
}
/**工厂模式类获取代理对象Proxy*/
public class FactoryProxy {
    /**
     * 获取代理对象
     */
    public static Object getProxy(Object target) {
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces()
                , new JdkInvocationHandler(target));
    }
}
/**测试类*/
public class Main {
    /**
     * 推荐创建不可变静态类成员变量
     */
    private static final Log log = LogFactory.get();

    public static void main(String[] args) {
        Eat eatProxy = (Eat) FactoryProxy.getProxy(new EatImpl());
        eatProxy.eat();
    }
}

效果图
效果图

1.3总结

静态代理动态代理的区别:

动态代理比静态代理更加灵活,动态代理一个代理类便可增强其他的类,而静态代理的话,一个代理类只能代理一个特定的类,从jvm层面来讲,静态代理是在编译时期就把接口,实现类直接变成了一个个实际的字节码文件,而动态代理则而在运行时生成字节码文件,然后加载到jvm中并运行

2 集合

2.1 HashMap

前提知识:原码,补码,反码

原码

  • 没啥好讲的

反码

  • 正数: 原码反码相同
  • 负数: 符号位为1,其余原码取反

补码

  • 正数: 原码补码相同
  • 负数: 符号位为1,反码+1

举例32位电脑,1的原码,补码,反码

  • 原码:00000…001
  • 反码:00000…001
  • 补码:00000…001

举例32位电脑,-1的原码,补码,反码

  • 原码:10000…001
  • 反码:11111…110
  • 补码:11111…111

为什么要有这些东西: 因为计算机里存储的都是补码形式的二进制数,不信可以打开od,往寄存器里放个-1看看;比如向计算机存个-1,计算机中就是1111…1(补码)的形式;

之后呢关于Hashmap看我这篇文章 戳我去HashMap专场

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值