对象的实例化发生在什么时候(Java对象实例是何时被创建)

2026-05-30 09:15:02 :0

对象的实例化发生在什么时候(Java对象实例是何时被创建)

本篇文章给大家谈谈对象的实例化发生在什么时候,以及Java对象实例是何时被创建对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录

Java对象实例是何时被创建

对象实例何时被创建,这个问题也许你用一句话就能回答完了。但是它的潜在陷阱却常常被人忽视,这个问题也许并不像你想的那么简单,不信请你耐心看下去。
我前几天问一个同学,是不是在调用构造函数后,对象才被实例化?他不假思索的回答说是。
请看下面代码:
Java代码
Date date=new Date();
em.out.println(date.getTime());
新手在刚接触构造函数这个概念的时候。他们常常得出这样的结论:对象实例是在调用构造函数后创建的。因为调用构造函数后,调用引用(date)的实例方法便不会报NullPointerException的错误了。
二、经验者的观点
然而,稍稍有经验的Java程序员便会发现上面的解释并不正确。这点从构造函数中我们可以调用this关键字可以看出。
请看下面代码:
Java代码
public class Test
{
public Test()
{
this.DoSomething();
}
private void DoSomething()
{
System.out.println("do init");
}
}
这段代码中我们在构造函数中已经可以操作对象实例。这也就证明了构造函数其实只是用于初始化,早在进入构造函数之前。对象实例便已经被创建了。
三、父类构造函数
当创建一个有父类的子类的时候。对象的实例又是何时被创建的呢?我们也许接触过下面经典的代码:
Java代码
public class BaseClass
{
public BaseClass()
{
System.out.println("create base");
}
}
public class SubClass
{
public SubClass()
{
System.out.println("create sub");
}
public static void main(String args)
{
new SubClass();
}
}
结果是先输出create base,后输出create sub。这个结果看起来和现实世界完全一致,先有老爸,再有儿子。因此我相信有很多程序员跟我一样会认为new SubClass()的过程是:实例化BaseClass-调用BaseClass构造函数初始化-实例化SubClass-调用SubClass构造函数初始化。然而非常不幸的是,这是个错误的观点。
四、奇怪的代码
以下代码是为了驳斥上面提到的错误观点。但是这种代码其实在工作中甚少出现。
Java代码
public class BaseClass
{
public BaseClass()
{
System.out.println("create base");
init();
}
protected void init()
{
System.out.println("do init");
}
}
//
public class SubClass
{
public SubClass()
{
System.out.println("create sub");
}
@Override
protected void init()
{
assert this!=null;
System.out.println("now the working class is:"+this.getClass().getSimpleName());
System.out.println("in SubClass");
}
public static void main(String args)
{
new SubClass();
}
}
这段代码运行的结果是先调用父类的构造函数,再调用子类的init()方法,再调用子类的构造函数。
这是一段奇妙的代码,子类的构造函数居然不是子类第一个被执行的方法。我们早已习惯于通过super方便的调用父类的方法,但是好像从没这样尝试从父类调用子类的方法。
再次声明,这只是个示例。是为了与您一起探讨对象实例化的秘密。通过这个示例,我们再次印证了开头的观点:早在构造函数被调用之前,实例便已被创造。若该对象有父类,则早在父类的构造函数被调用之前,实例也已被创造。这让java显得有些不面向对象,原来老子儿子其实是一块儿出生的。
五、奇怪但危险的代码
本篇是对上篇奇怪代码的延续。但是这段代码更加具有疑惑性,理解不当将会让你出现致命失误。
请看下面代码:
Java代码
public class BaseClass {
public BaseClass()
{
System.out.println("create base");
init();
}
protected void init() {
System.out.println("in base init");
}
}
public class SubClass extends BaseClass{
int i=1024;
String s="13 leaf";
public SubClass()
{
System.out.println("create sub");
init();
}
@Override
protected void init() {
assert this!=null;
System.out.println("now the working class is:"+this.getClass().getSimpleName());
System.out.println("in SubClass");
/////////////great line/////////////////
System.out.println(i);
System.out.println(s);
}
public static void main(String args) {
new SubClass();
//oh!my god!!
}
}
#p#副标题#e#
这段代码相比上一篇,只是在子类中添加了一些成员变量。而我们的目标正是集中在讨论成员变量初始化的问题上。
这段代码的执行顺序是:父类、子类实例化-调用父类构造函数-调用子类init()方法-调用子类构造函数-调用子类init()方法。最终的输出结果向我们揭示了成员变量初始化的秘密。
当父类构造函数调用子类的init()方法的时候。子类的成员变量统统是空的,这个空是指的低级初始化。(值类型为0,布尔类型为false,引用类型为null)。而当子类构造函数调用init()方法的时候,成员变量才真正被初始化。这是一个危险的讯息,那就是使用父类构造函数调用子类时存在成员变量未初始化的风险。
我们的讨论也到此为止了。再次回顾,总结一下实例何时被创建这个问题。我得出了以下结论:
本文到此便结束了。鉴于本人才疏学浅,若是专业术语有错误,或是哪里讲的不对,也欢迎各位高手拍砖。
附上第五篇中SubClass的部分字节码,方便大家深入理解:
Java代码
public SubClass();
aload_0 //aload_0是啥?
invokespecial ques.BaseClass() //调用父类构造函数
aload_0
sipush 1024 //初始化i成员变量
putfield ques.SubClass.i : int
aload_0
ldc "13 leaf" //初始化s成员变量
putfield ques.SubClass.s : java.lang.String
getstatic java.lang.System.out : java.io.PrintStream
ldc "create sub"
invokevirtual java.io.PrintStream.println(java.lang.String) : void
aload_0
invokevirtual ques.SubClass.init() : void //调用init
return
#p#副标题#e#

在java中类的初始化和对象的实例化有哪些区别,是先执行哪一步

问题一:在程序RUN的一瞬间,什么类啊,静态的东西啊(静态块,静态方法,静态属性),刷刷刷的就在内存中加载(你可以看作初始化)了,只加载一次,然后main方法开始运行(这就是为什么main方法必须是静态的原因),然后执行main中的代码语句,执行到new对象时,才会实例化对象,记住:类加载,只执行一次,即只有有一个类对象(注意不是实例对象),无论你以后怎么个new法,新new的都是实例对象
问题二:heap(堆):用来动态生成内存的,如,属性,基本new出来的东西都在这里
stack(栈):局部变量
data segment(数据区):静态的变量,常量,包括字符串常量
***隐藏网址***
String str = "abc"。。。我也不好说 看情况吧,堆或者data segment,你可以参考

struts2中action的javabean属性什么时候实例化

个人观点:
简单而确切的说,是在struts2调用完拦截器栈之后,调用响应Action的execute方法前
详细的说:struts2在接受一个请求之后,会建立相应请求的Action对象,同时生成管理其上下文的ActionContext对象,并将javabean(即Action对象)的属性放到Valuestack栈顶,将这些属性初始化,之后struts2会调用拦截器栈中的拦截器(注意这些拦截器会改变valuestack中属性的值,如params拦截器会完成将表单字段映射到valuestack属性上。。。),在调用结束后,struts2会将valuestack中的属性映射赋值给Action对象属性,最后调用action方法。

java中,什么时候需要new来实例化

您好,提问者:
    当需要用到一个类(接口、抽象类除外)的时候,需要new来进行初始化,才可以调用该类的方法、属性、变量等。比如:

public class Main{
    public static void main(String args){
        Person p = new Person();
        System.out.println(p.num);
        p.getPrint();
    }
}
class Person{
    int num;
    public void getPrint(){
        System.out.println("hello Person!");
    }
}

spring的bean到底在什么时候实例化

spring的bean在什么时候实例化,我说在被依赖的时候实例化.
分为以下几种Bean
1.如果指定的是convertrService,beanPostProcessor等实例的时候,则会在ApplicationContext初始化的时候就实例化.
2.如果指定的是自定义的Bean,那么会在第一次访问的时候实例化.
《beanid=""name=""》这样这个bean是否会被实例化
答案:不会实例化,ApplicationContext只会加载Bean的BeanDefinition.
事务管理器没有注入,在什么时候实例化
这是什么问题,不懂?如果Spring引用的是ibatis等三方组件,使用的是数据库事务,那么一般在Application的时候实例化.

c++中cin,cout是什么时候被实例化的

  • 确切说是命名空间 STD里了

  • cout是std标准库里的嘛``
    至于什么时候被实例化的,应该是在程序运行时,cout找到符合实体的最佳匹配类型后被匹配的吧`!

关于对象的实例化发生在什么时候到此分享完毕,希望能帮助到您。

对象的实例化发生在什么时候(Java对象实例是何时被创建)

本文编辑:admin

更多文章:


汽车自喷漆颜色大全(汽车喷漆有几种漆分几种)

汽车自喷漆颜色大全(汽车喷漆有几种漆分几种)

各位老铁们好,相信很多人对汽车自喷漆颜色大全都不是特别的了解,因此呢,今天就来为大家分享下关于汽车自喷漆颜色大全以及汽车喷漆有几种漆分几种的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录汽车喷漆有几种漆分几种自喷

2025年6月2日 12:00

cacelled(cancel的过去式是什么)

cacelled(cancel的过去式是什么)

这篇文章给大家聊聊关于cacelled,以及cancel的过去式是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录cancel的过去式是什么cancelled是什么意思cancelled是什么意思cancel和cancel

2025年10月31日 18:15

hibernate的sql语句在哪(hibernate中如何执行sql语句)

hibernate的sql语句在哪(hibernate中如何执行sql语句)

这篇文章给大家聊聊关于hibernate的sql语句在哪,以及hibernate中如何执行sql语句对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录hibernate中如何执行sql语句hibernate怎么显示sql语句如何

2026年1月5日 18:15

translate名词翻译员(翻译 用英语怎么说)

translate名词翻译员(翻译 用英语怎么说)

“translate名词翻译员”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看translate名词翻译员(翻译 用英语怎么说)!本文目录翻译 用英语怎么说“翻译”的英语怎么说翻译 用英语怎么说1、the first day

2026年2月21日 19:15

免费下载ppt模板网站建筑公司简介(求一款介绍公司简介的PPT模板,稍微好看一点详细一点的!)

免费下载ppt模板网站建筑公司简介(求一款介绍公司简介的PPT模板,稍微好看一点详细一点的!)

其实免费下载ppt模板网站建筑公司简介的问题并不复杂,但是又很多的朋友都不太了解求一款介绍公司简介的PPT模板,稍微好看一点详细一点的!,因此呢,今天小编就来为大家分享免费下载ppt模板网站建筑公司简介的一些知识,希望可以帮助到大家,下面我

2025年9月12日 18:45

开元所有网址(泉州开元寺免费预约入口泉州开元寺有门票吗)

开元所有网址(泉州开元寺免费预约入口泉州开元寺有门票吗)

大家好,如果您还对开元所有网址不太了解,没有关系,今天就由本站为大家分享开元所有网址的知识,包括泉州开元寺免费预约入口泉州开元寺有门票吗的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录泉州开元寺免费预约入口泉州开元

2026年6月2日 14:45

热收缩膜的用途是怎么使用的?烟包膜和收缩膜的区别

热收缩膜的用途是怎么使用的?烟包膜和收缩膜的区别

“收缩膜”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看热收缩膜的用途是怎么使用的?烟包膜和收缩膜的区别!本文目录热收缩膜的用途是怎么使用的烟包膜和收缩膜的区别热收缩膜的厚度为什么收缩膜表面出现鱼眼状的皱纹呢收缩膜和热缩膜分

2025年12月19日 00:30

springboot对应的spring版本(spring-boot集成spring-data-redis哪个版本)

springboot对应的spring版本(spring-boot集成spring-data-redis哪个版本)

大家好,今天小编来为大家解答以下的问题,关于springboot对应的spring版本,spring-boot集成spring-data-redis哪个版本这个很多人还不知道,现在让我们一起来看看吧!本文目录spring-boot集成spr

2025年7月30日 01:45

什么是创意编程?双碳主题创意编程比赛作品说明该怎么写

什么是创意编程?双碳主题创意编程比赛作品说明该怎么写

各位老铁们,大家好,今天由我来为大家分享创意编程,以及什么是创意编程的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录什么是创意编程双碳主题创意编程比

2025年7月12日 08:15

css图片切换(CSS高级技巧:图片替换)

css图片切换(CSS高级技巧:图片替换)

各位老铁们,大家好,今天由我来为大家分享css图片切换,以及CSS高级技巧:图片替换的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录CSS高级技巧:

2026年8月6日 02:15

asp可视化建站(关于建网站的(用asp做的)问题,请大家帮忙在线等)

asp可视化建站(关于建网站的(用asp做的)问题,请大家帮忙在线等)

本篇文章给大家谈谈asp可视化建站,以及关于建网站的(用asp做的)问题,请大家帮忙在线等对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录关

2025年7月30日 22:00

2022pubg全球总决赛(绝地求生2022全球总决赛时间)

2022pubg全球总决赛(绝地求生2022全球总决赛时间)

“2022pubg全球总决赛”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看2022pubg全球总决赛(绝地求生2022全球总决赛时间)!本文目录绝地求生2022全球总决赛时间和平精英G赛是什么2022和平精英全球总决赛赛程

2025年8月11日 14:30

eclipse2020需要jdk什么版本(最新eclipse和jdk10可以一起用吗)

eclipse2020需要jdk什么版本(最新eclipse和jdk10可以一起用吗)

各位老铁们,大家好,今天由我来为大家分享eclipse2020需要jdk什么版本,以及最新eclipse和jdk10可以一起用吗的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了

2025年8月26日 11:15

多线程线程池哪几种(什么是线程池为什么要使用线程池如何使用)

多线程线程池哪几种(什么是线程池为什么要使用线程池如何使用)

本篇文章给大家谈谈多线程线程池哪几种,以及什么是线程池为什么要使用线程池如何使用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录什么是线程池

2025年10月15日 04:45

性格用英语怎么说personality(相貌和问性格的用英语怎么说)

性格用英语怎么说personality(相貌和问性格的用英语怎么说)

各位老铁们好,相信很多人对性格用英语怎么说personality都不是特别的了解,因此呢,今天就来为大家分享下关于性格用英语怎么说personality以及相貌和问性格的用英语怎么说的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起

2026年1月25日 00:45

arange(arange英语是什么意思)

arange(arange英语是什么意思)

各位老铁们,大家好,今天由我来为大家分享arange,以及arange英语是什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录arange英语

2026年5月6日 15:00

前端开发发展前景(现在前端发展怎么样)

前端开发发展前景(现在前端发展怎么样)

各位老铁们好,相信很多人对前端开发发展前景都不是特别的了解,因此呢,今天就来为大家分享下关于前端开发发展前景以及现在前端发展怎么样的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录现在前端发展怎么样web前端就业前

2025年12月15日 22:15

网上聊天vb什么意思(VB——聊天软件)

网上聊天vb什么意思(VB——聊天软件)

大家好,网上聊天vb什么意思相信很多的网友都不是很明白,包括VB——聊天软件也是一样,不过没有关系,接下来就来为大家分享关于网上聊天vb什么意思和VB——聊天软件的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录V

2025年6月25日 07:00

statue of liberty视频(自由女神像的介绍)

statue of liberty视频(自由女神像的介绍)

各位老铁们,大家好,今天由我来为大家分享statue of liberty视频,以及自由女神像的介绍的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录

2026年5月8日 19:15

字符常量是啥(字符型常量是什么)

字符常量是啥(字符型常量是什么)

各位老铁们,大家好,今天由我来为大家分享字符常量是啥,以及字符型常量是什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录字符型常量是什么什么是字符

2025年11月1日 06:15

近期文章

ilitate(imitate意思是)
2026-09-25 23:30:01
本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索