Java中的“反射泛型容器”你了解多少?

Posted 我是老实人辶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的“反射泛型容器”你了解多少?相关的知识,希望对你有一定的参考价值。

反射

为什么要有反射?

  1. 运行期,根据某种条件才能确定使用哪个类的对象的时候,就可以采用反射。
  • 策略模式(灵活)

    abstract BaseStrategy.excute()

    ```abstract BaseStrategy.excute(){
        //执行某种策略
    }
    复制代码
    • 策略: AStrategy、BStrategy 、CStrategy
  1. Class personClass = Class.forName("com.data.muse")

    Class personClass1 = Class.forName("com.data.muse")

    personClass 和 personClass1是相同的

  2. 获得class对象有几种方式?

    • getClass

    Class class1 = person.getClass()

    • class

    Class class2 = Person.class()

    • class.forName

    Class class3 = Class.forName(com.xxx)

  3. 如何通过class文件获取对象

    1. 获得class

      Class personClass = Class.forName(com.person)

    2. 获得构造方法

      Constructor<Person> constructor = personClass.getConstructor()//获得构造方法

      Person person = constructor.newInstance() //初始化生成Person对象

    3. 通过Class对象,获得Field对象 Person类的那么属性

      Filed nameFiled = personClass.getFiled("name") //获取类中name的属性

    4. 操作Filed,获得属性值

      String name = String.valueOf(nameFiled.get(person))

BeanUtil是干嘛用的

实际工作中

1. 单体服务、微服务(垂直分割)
2. 服务的层次划分(水平分割)
复制代码
  • 通过反射,可以将对象的属性值赋值给另一个对象

容器

ArrayList:本质是个数组

add: 扩容:add之前需要判断长度是否足够 是否需要扩容

1. 旧的长度的二进制右移一位,相当于原来的长度的1/2,加上原来的长度
2. 新的长度依然无法满足需要的最小的扩容量,则新的长度改为最小扩容量
复制代码

remove: {"a1","a2","a3","a4"} 例如删除a2

1. 获得需要移动元素的个数 size-index-1    4-1-1=2
2. 调用system.arraycopy(旧的数组,删除元素index+1,旧的数组)方法  
复制代码

LinkedList

获得一个Node

add:

get

先将判断index在前半部分还是后半部分,然后for循环遍历,遍历到最后一个就是该值

remove:

所有对数组进行的操作都要进行数组越界的校验
复制代码

相当于将要删除的节点的前后节点与其断开,将前后节点相连接

以上是关于Java中的“反射泛型容器”你了解多少?的主要内容,如果未能解决你的问题,请参考以下文章

JVM内存的那些事,你了解多少?

Java中的Jvm和Redis你了解多少?

关于Java 中的 Lambda 表达式你了解多少?

关于Java 中的 Lambda 表达式你了解多少?

Java的Io模型你了解多少?工信部java证书

Java的Io模型你了解多少?工信部java证书