什么是实例化?

简介: 什么是实例化?

为什么要写这个博客呢?可能是因为自己的基础太差,昨天敲三层的注册,各层都敲完了以后,死活报错,无奈之下只能找晓婵求救,她只改了三个地方,犯了同一个错误,我的源码是这样写的:Dim uA As  Entity.UserInfo,然后就会报这个错:



晓婵的改法是:Dim uA As New Entity.UserInfo,当时觉得好坑,自己整了半天就是因为少了一个NEW,其实之前用vb敲机房的时候也肯定有这个问题,但是自己从来没有注意过,这次特意去查了一下,为什么加new和不加new差别这么多,下面基本都是别人写的,拿来科普给自己。


1.new的作用


先来看看dim a as 类1 和dim a as new 类1的区别:


       DIM a As 类1 '声明a是这个类1对象,但是类1必须通过 set a=new 类1创建,否则为nothing


       Dim a As new 类1 ' 声明一个类1对象,但不需要显示创建对象,会自动创建

当后续代码第一次调用 a.方法或a.属性时,系统会自动创建


       所以new就相当于这句:set a =new 类1,是一个初始化的过程。


2.如何创建对象(实例化)


         Dim a As 类1  的意思我们知道了,是定义一个变量,并且变量内容是指向一个类的指针,但因为这个类型没有实际的分配出内存并载入堆栈,所以这个时候这个变量是无用的,只是个指向空地址无用变量。


         而 new 类1 就是将这个类创建一个新实例的过程,并将这个创建好的新实例地址赋值给 a 这个变量。也可以理解为在内存中划分了一块符合这个类所需要的内存区域,并将相关过程载入到该内存中,并将这个内存地址载入堆栈共CPU执行。而这块分配好的地址句柄便是这个类的实例句柄。也就是 a 这个类指针真正存储的东西。


         当调用变量的属性、方法或事件时,其实就是CPU根据代码寄存器再内部跳转执行编译位置代码,每一个实例有一个独立的内存块,即使结构一直,但内容不同,这就是类和类实例化的关系。


在VB中理解,就是


        Dim a As 类1       '是定义类变量


        Set a = new 类1    '是初始化类变量(加上“实例”更为贴切)


        Dim a As New 类1  '是定义类变量同时初始化类变量


       因为类必须初始化,如果没有初始化的类是不能用的。


       即使有些类或对象不是经由你的代码初始化,也是系统或别的程序帮你初始化了才能用,如 me、app、Form1...


3.为什么要实例化?


       因为只有实例化之后,才能将这个对象放到内存中,然后才能在规定的范围内来调用。这不包括静态对象,静态对象是可以直接调用的。


     每次实例化其实都是一个新建的过程


     例如dim a  as  new Object();这句话,你可以写无数次,只要每次起到名字不同,就会在内存中创建无数个Object对象,这样在调用其中任意一个的时候互不干扰。    


     自己查找了这么多的东西以后,其实对于new这个问题也了解了,可能以后再来看new会发现自己现在了解的还只是一个皮毛,不过这个阶段,也是必须要经历的啊!


相关文章
|
存储 Java 文件存储
CORS 报错的常见原因
【10月更文挑战第6天】
|
Java API 调度
SpringBoot整合XXL-JOB【01】- 初识XXL-JOB
XXL-JOB 是一个分布式任务调度平台,设计目标为开发迅速、学习简单、轻量级、易扩展。它解决了分布式环境下定时任务重复执行的问题,无需额外加锁,降低了维护成本。XXL-JOB 由调度中心和执行器两部分组成,前者管理任务,后者执行具体逻辑,使代码结构更清晰。适用于多机部署场景,支持统一管理任务的启停和频率调整。
2582 8
SpringBoot整合XXL-JOB【01】- 初识XXL-JOB
|
人工智能 分布式计算 数据管理
DMS+X:GenAI 时代的一站式 Data+AI 平台
在AI技术快速发展的背景下,阿里云DMS + X平台应运而生,通过OneMeta和OneOps两大创新,提供统一元数据服务及一体化Data + AI开发环境。文章详细介绍了DMS + X在数据治理、开发提效及实际案例中的应用,助力企业在GenAI时代实现数字化转型。
|
文字识别 算法 计算机视觉
图像处理之Zhang Suen细化算法
图像处理之Zhang Suen细化算法
920 0
|
弹性计算 负载均衡 网络协议
阿里云共享流量包怎么用?自动生效的宝子们~不用设置,买完就自动抵扣了
阿里云共享流量包是一种自动生效的流量抵扣套餐,可覆盖ECS、EIP、CLB、共享带宽及IPv6网关等产品的公网流量费用。购买后无需手动设置,系统将自动抵扣对应地域的流量费用。适用于亚太全时、亚太闲时和欧美全时等多个区域,支持10GB至10TB不同规格,价格低至4元/月起。使用前需确保流量包与云产品地域匹配,查询用量可通过阿里云【费用与成本】页面查看。更多详情请参考官方文档。
|
前端开发 容器
CSS 居中技术完全指南:从基础到高级应用
本文详细介绍了 CSS 中常用的居中方法,涵盖水平居中、垂直居中及同时实现两者的方法。
1715 12
|
中间件 FESCAR Apache
你好!Apache Seata(incubating)
你好!Apache Seata(incubating)
1424 105
|
JavaScript 前端开发 开发者
【干货拿走】JavaScript中最全的数据类型判断方法!!!!
【干货拿走】JavaScript中最全的数据类型判断方法!!!!
700 1
【JAVA学习之路 | 进阶篇】List接口常用方法
【JAVA学习之路 | 进阶篇】List接口常用方法

热门文章

最新文章