java的new机制理解和反射机制理解

new机制理解:

new常见的说法:声明一个对象并实例化;
在JAVA里就是创建一个新的实例,或者说一个新的对象,一个普通类在没有实例化之前,就是new之前,它的属性,方法等等在内存中都是不存在的。只有使用new了以后,这个类的一些东西在内存中才会真的存在,也就是说只有new了之后,这个类才能用。
参考B站教程后的原理图进一步理解:
在这里插入图片描述

在这里插入图片描述

反射机制理解

反射的概念:将类的各个组成部分封装为其他对象,这就是反射机制
反射的好处:
1.可以在程序运行过程中,操作这些对象。
2.可以解耦,提高程序的可扩展性。

Java反射机制主要提供了以下功能:
·在运行时判断任意一个对象所属的类;
·在运行时构造任意一个类的对象;
·在运行时判断任意一个类所具有的成员变量和方法;
·在运行时调用任意一个对象的方法;生成动态代理
反射原理图片:
在这里插入图片描述
反射的进一步理解(含有参考别人部分)
1.明白java的内存机制是如何的:
先理解一下JVM的三个区:堆区,栈区,和方法去(静态区)。
堆区:存放所有的对象,每个对象都有一个与其对应的class信息。在JVM中只有一个堆区,堆区被所有的线程共享。
栈区:存放所有基础数据类型的对象和所有自定义对象的引用,每个线程包含一个栈区。每个栈区中的数据都是私有的,其他栈不能访问。

栈分为三部分:
    基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 

方法区:即静态区,被所有的线程共享。方法区包含所有的class和static变量。它们都是唯一的。
2.进一步理解反射:
首先:在启动一个java虚拟机时,虚拟机要加载你程序里所用到的类 ,这个进程会首先跑到jdk中(在jdk的jre/lib/ext文件夹里找那些jar文件),如果没有找到,会去classpath里设置的路径去找。
在找到要执行的类时:
1.首先将找到的类的信息加载到运行时数据区的方法区。这个过程叫做类的加载。所以一下static类型的在类的加载过程中就已经放到了方法区。所以不用实例化就能用一个static类型的方法。

(也说明了为什么static静态是最先建立的)   

2.加载完成后,在new一个类时,首先就是去方法区看看有没有这个类的信息。如果没有这个类的信息,先装载这个类。then,加载完成后,会在堆区为new的这个类分配内存,有了内存就有了实例,**而这个实例指向的是方法区的该类信息。其实就是存放了在方法区的地址。**而反射就是利用了这一点。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值