zoukankan      html  css  js  c++  java
  • 【Groovy123】Groovy中的基本概念和设计思想

    Groovy:

    http://www.groovy-lang.org/

    https://blog.csdn.net/weixin_33862993/article/details/86258972

    https://www.cnblogs.com/zqlxtt/p/5741240.html

    Gradle(Groovy实例):

    https://www.cnblogs.com/zqlxtt/tag/gradle/

    https://www.jianshu.com/p/20f6695a9bd5

    https://www.yiibai.com/gradle/gradle_tasks.html

    其他概念:

    反射

    https://blog.csdn.net/jin_luo/article/details/79763938

    https://segmentfault.com/a/1190000016105692

    https://www.cnblogs.com/dabai123/p/11595178.html

    https://www.cnblogs.com/zuzizai/p/7594368.html

    1.1. 硬编码(正常方式)

    RTTI假定在编译期,已经知道了所有的类型信息。在编码时,可以直接使用具体的类型信息,这是我们最常见的类型用法。在编译期,编译器通过容器、泛型保障类型系统的完整性;在运行时,由类型转换操作来确保这一点。

    1.2. Reflect(反射方法)

    Reflect允许我们在运行时获取并使用类型信息,它主要用于在编译阶段无法获得所有的类型信息的场景,如各类框架。

    反射,可以通过一组特殊的API,在运行时,动态执行所有Java硬编码完成的功能(如对象创建、方法调用等)。相比硬编码,Java反射API要复杂的多,但其给我们带来了更大的灵活性。

    实例化Class类对象(四种方法) :

    1)前提:若已知具体的类,通过类的class属性获取,该方法 
                        最为安全可靠,程序性能最高
           实例:Class clazz = String.class;
    2)前提:已知某个类的实例,调用该实例的getClass()方法
                        取Class对象
           实例:Class clazz = “www.atguigu.com”.getClass();
    3)前提:已知一个类的全类名,且该类在类路径下,可通过
           Class类的静态方法forName()获取,可能抛出ClassNotFoundException
           实例:Class clazz = Class.forName(“java.lang.String”);
    4)其他方式(不做要求)
    ClassLoader cl = this.getClass().getClassLoader();
    Class clazz4 = cl.loadClass(“类的全类名”);

    /** RefelctDemo */
    
    public class ReflectDemo {
        //获取构造方法 一共三种方式(框架程序员使用)
        @Test
        public void test1() throws Exception, Exception{
            Class clazz  =  Student.class;
            Constructor c = clazz.getConstructor(null);
            Student s = (Student)c.newInstance(null);
            System.out.println(s);
            
        }
        @Test
        public void test2() throws Exception, Exception{
            Class clazz  =  Student.class;
            Object object = clazz.newInstance();
            System.out.println(object.getClass().getName());
            
        }
        @Test
        public void test3() throws Exception, Exception{
            Class c =Class.forName("Reflect.Student");
            Student s =(Student) c.newInstance();
            System.out.println(s);
            
        }
        //获取有参数构造
        @Test
        public void test4() throws Exception, Exception{
        Class clazz =Student.class;
        //获取构造函数
        Constructor c = clazz.getConstructor(String.class);
        Student s =(Student)c.newInstance("赵日天");
        System.out.println(s.getName());
        }
        //获取私有的构造方法
        @Test
        public void test5() throws Exception, Exception{
            Class clazz =Student.class;
            Constructor an = clazz.getDeclaredConstructor(Date.class);
            //暴力反射
            an.setAccessible(true);
            Student s =(Student)an.newInstance(new Date());
            System.out.println(s.getData());
                    
        }
    }

    动态代理

    https://www.jianshu.com/p/7b5af86a9984

    Java动态代理比代理更进一步,因为它可以动态的创建代理并动态的处理对所代理方法的调用。在动态代理上所做的所有调用都会被重定向到单一的调用处理器上。

    JDK实现的动态代理

    Proxy.java

    InvocationHandler.java

    闭包

  • 相关阅读:
    汉语-词语:心性
    CE-计算机系统:并行处理
    CE-操作系统:程序并发执行
    CE-计算机系统:单道批量处理系统
    CE-计算机系统:多道程序
    CE-计算机系统:并行性
    生活灵感汇总
    【剑指Offer】俯视50题之21
    Single Number II
    汉诺塔
  • 原文地址:https://www.cnblogs.com/cathygx/p/12049710.html
Copyright © 2011-2022 走看看