`

java普通对象的循环依赖

    博客分类:
  • java
 
阅读更多
package com.qinzj;
/**
 *
 * 知识点:
* 1、执行顺序  静态代码块》普通代码块》构造函数
* 2static代码块只执行一次,在类加载——初始化阶段执行
* 3static代码块只执行一次原因:
*      static代码块只在类加载时执行,类是用类加载器来读取的,类加载器是带有一个缓存区的,
*      它会把读取到的类缓存起来,所以在一次虚拟机运行期间,一个类只会被加载一次,这样的话
*      静态代码块只会运行一次
* 4public static ObjectB objectB = new ObjectB("123");
 * 等同于
* public static ObjectB objectB = null;
 * static {
 *         objectB = new ObjectB("123");
 *     }
 *
 *
 * @Author: qinzj
 * @Date
*/
public class ObjectA {

    public static ObjectB objectB = null;
    public ObjectA() {
        // objectB = new ObjectB();
System.out.println("ObjectA构造函数");
}

    public ObjectA(String str) {
        System.out.println("ObjectA带参数的构造函数");
}

    /*{
        System.out.println("ObjectA构造代码块");
    }*/
static {
        System.out.println("ObjectA静态代码块");
objectB = new ObjectB("123");
System.out.println("objectA.objectB:" + objectB);
// System.out.println(this);
System.out.println("objectA.ObjectB.objectA:" + ObjectB.objectA);
}

}

 

package com.qinzj;
/**
 * @Author: qinzj
 * @Date
*/
public class ObjectB {

    public static ObjectA objectA = null;
    public ObjectB() {
        // objectA = new ObjectA();
System.out.println("ObjectB构造函数");
}

    public ObjectB(String str) {
        System.out.println("ObjectB带参数的构造函数");
}

    /*{
        System.out.println("ObjectB构造代码块");
    }*/
static {
        System.out.println("ObjectB静态代码块");
objectA = new ObjectA("123");
System.out.println("objectB.objectA:" + objectA);
System.out.println("objectB.ObjectA.objectB:" + ObjectA.objectB);
}

}

 

package com.qinzj;
/**
 * @Author: qinzj
 * @Date
*/
public class CycleTest {

    public static void main(String[] args) {

        /*ObjectA objectA = new ObjectA();
        System.out.println(objectA);*/
System.out.println(ObjectA.objectB);
/*System.out.println("1-main.ObjectA.objectB" + ObjectA.objectB);
        ObjectB objectB = new ObjectB();
        System.out.println(objectB);
        System.out.println("2-main.ObjectA.objectB" + ObjectA.objectB);*/
}

}

 

 

 

 

 

分享到:
评论

相关推荐

    spring bean的循环依赖完全掌握.pdf

    为了彻底掌握 Spring Bean 的循环依赖,我们需要搞清楚四个问题:普通 Bean 的非循环依赖 Bean 生命周期的流程、AOP 代理 Bean 的非循环依赖 Bean 生命周期的流程、普通 Bean 的循环依赖 Bean 生命周期的流程和 AOP ...

    freemarker java解析依赖工具类.zip

    1. **Freemarker模板语言**:Freemarker模板由普通的文本和控制结构(如条件语句、循环)组成,这些结构用特定的语法表示。例如,`<#if>`用于条件判断,`<#list>`用于遍历集合,`${}`用于插入变量值。 2. **模板...

    java全集.pdf JAVA全集

    - **面向对象**:Java是一种纯面向对象的语言,支持封装、继承、多态等特性。 - **平台无关性**:Java程序可以在任何安装了Java虚拟机(JVM)的平台上运行,这得益于Java编译后的字节码格式。 - **安全性**:Java...

    JAVA面试题2019

    7. **循环依赖**:Spring如何解决循环依赖问题。 8. **设计模式**:Spring中用到的设计模式。 ### Netty框架 #### 关键知识点: 1. **BIO/NIO/AIO**:传统I/O模型与现代异步非阻塞I/O模型的对比。 2. **Netty组件...

    java经典面试题

    - **强引用**:最普通的引用类型,通过对象名直接引用对象。 - **软引用**:当 JVM 认为有必要回收内存之前,即使内存不足也不会被回收。 - **弱引用**:更弱一些的引用类型,在下一次垃圾回收时会被回收。 - **...

    Java 炮台打飞机 游戏

    音效和音乐的播放可能依赖于Java的AudioClip类或第三方库如JLayer,使得游戏更加生动有趣。 最后,游戏的配置文件可能采用XML或JSON格式,便于读取和修改游戏参数,如飞机的速度、炮台的攻击力等。 总的来说,...

    Thymeleaf+Java Demo演示

    1. **环境配置**:安装Thymeleaf的Maven依赖,并配置Spring Boot项目以支持Thymeleaf模板引擎。 2. **创建模板**:编写HTML模板文件,添加Thymeleaf的指令,例如,使用`th:text`、`th:href`等将Java对象的属性值...

    java面试宝典

    - **Inner Class**:普通的内部类,需要依赖于外部类的实例。 **27. 内部类可以引用它的包含类的成员吗?有没有什么限制?** 内部类可以引用包含类的成员,包括私有成员。但是,如果内部类是静态内部类,则不能...

    java面试八股文java基础知识总结.pdf

    - **什么是Java**:Java是一种广泛使用的高级编程语言,以其平台独立性、面向对象的特点而闻名。由Sun Microsystems开发并在1995年发布。 - **jdk1.5之后的三大版本**:自JDK 1.5以来,重要的三个版本包括: - **...

    java2实验实用模板代码

    - 实验包括文件加密、添加行号、使用RandomAccessFile处理文件以及对象的序列化与反序列化,学习Java I/O系统。 9. **网络编程** - 实验涉及TCP和UDP协议,如读取服务器文件、接收对象和基于UDP的图像传输,了解...

    JAVA核心知识点整理.pdf

    - **程序计数器**:它是线程私有的,可以看作是当前线程所执行的字节码的行号指示器,分支、循环、跳转、异常处理和线程恢复等都需要依赖这个计数器完成。 - **虚拟机栈**:同样属于线程私有,描述的是Java方法执行...

    Java面试宝典2017

    因为静态方法在类加载时就存在,而非静态方法依赖于对象的存在。 #### 14. `Integer`与`int`的区别 - `int`是基本数据类型,直接存储数值。 - `Integer`是`int`的封装类,提供了更多的功能,如各种数学运算和格式...

    如何在JAVA程序中嵌入IE

    3. 创建`Shell`对象:`Shell`是SWT中的顶级窗口,相当于一个普通的窗口。在`Display`上创建`Shell`,并设置其属性。 ```java Shell shell = new Shell(display); shell.setText("Java App with Embedded IE"); ...

    Spring循环依赖正确性及Bean注入的顺序关系详解

    首先,我们来看一下普通的Bean循环依赖的例子。在给定的代码中,有两个类BeanA和BeanB,它们互相依赖: ```java public class BeanA { private BeanB beanB; public BeanB getBeanB() { return beanB;} public ...

    java程序员面试宝典

    13. 不能从一个static方法内部直接调用非static方法,因为非static方法需要依赖于具体的对象实例,而static方法是属于类的。 14. Integer是int的包装类,用于将int类型的值包装成对象。int是基本数据类型,不是对象...

    Java面试宝典2021.pdf

    - 静态变量属于类,不依赖于对象存在,而实例变量属于对象,每个对象有自己的副本。 13. **静态方法和非静态方法** - 不可以从静态方法内部直接调用非静态方法,因为静态方法在类加载时就可执行,不需要对象实例...

    (张孝祥)java 最新基础面试题总结1

    以上就是对Java最新基础面试题的一些详细解释和解答,涵盖了变量修饰、文件结构、关键字、循环控制、数据类型限制、位运算以及大规模计算的设计思路等多个方面。了解并掌握这些知识点对于提升Java程序员的基础能力和...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    7.2 Java普通方法的组成部分 157 7.2.1 访问控制符:public 158 7.2.2 返回值和关键字void 158 7.2.3 方法名(Method Name) 159 7.2.4 参数列表(Parameter List) 159 7.2.5 方法体(Method Body) 160 ...

    1000道JAVA面试题大全,所有涉及笔试,面试的JAVA题目

    - **`static`方法调用非`static`方法**:不可以从`static`方法内部直接调用非`static`方法,因为非`static`方法依赖于特定的对象实例。 #### 4. 类型与封装 - **`Integer`与`int`**:`Integer`是`int`的包装类,它...

Global site tag (gtag.js) - Google Analytics