`

Java构造时成员初始化的陷阱

阅读更多
http://www.ehelper.com.cn/blog/post/40.html
public class A
{
	public A()
	{
		System.out.println("This is A()");
		this.Say();
	}

	public void Say()
	{
		System.out.println("This is A.Say()");
	}
}

public class B extends A
{
	public String name = "111";

	public B()
	{
		System.out.println("This is B()\t" + "name is " + name);
		name = "333";
	}

	public void Say() // 重载
	{
		name = "222";
		System.out.println("This is B.Say()\t" + "name is " + name);
	}

	public static void main(String[] args)
	{
		B oo = new B();
		System.out.println("This is main()\t" + "name is " + oo.name);
	}
}

This is A()
This is B.Say()	name is 222
This is B()	name is 111
This is main()	name is 333

一、类A的构造方法;
二、类A中执行的Say()是类B的,因为类B覆盖了类A的Say(),类A自己的Say()没有了;
三、类B的构造方法,看来之前执行了name = "111"。




分享到:
评论

相关推荐

    java面试题-类的初始化顺序.doc

    这是Java语言规范所规定的,确保在子类访问父类的静态或非静态成员时,父类的初始化已经完成。 在实际开发中,理解这个初始化顺序是非常重要的,尤其是在设计复杂的类结构或者涉及单例模式、线程安全初始化等场景时...

    JAVA面试题解惑系列——类的初始化顺序

    首先,需要了解Java类初始化的基本规则,即在类的静态变量、静态初始化块、变量、初始化块、构造器这五个部分中,它们的初始化顺序依次是:静态变量、静态初始化块、变量、初始化块、构造器。这个顺序在单个类中是...

    Java中static静态变量的初始化完全解析

    Java中的静态变量(static变量)是在类加载时初始化的,而不是在对象创建时。静态变量属于类,而不属于任何特定的对象,因此它们是共享的,所有类实例都可以访问。了解静态变量的初始化顺序对于理解和避免潜在的编程...

    Java类的完整构造执行顺序

    在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...

    Java-objects-initial.rar_objects

    - **默认初始化**:当声明一个类的成员变量时,如果没有指定初始值,Java会为它们提供默认值。例如,`int`类型会被初始化为0,`boolean`为`false`,引用类型为`null`。 - **显式初始化**:如果在声明时提供了初始...

    Java中一些基础概念的使用详解

    2. 实例成员和实例初始化块:当创建一个新对象时,会先执行父类的实例变量初始化(包括实例变量和实例初始化块),接着是父类的构造函数,然后是子类的实例变量初始化和实例初始化块,最后是子类的构造函数。...

    Java语言编码规范[归类].pdf

    在Java中,初始化可以通过声明时赋值、构造函数、初始化块(实例初始化块和静态初始化块)以及`final`字段的使用来进行。 2. 声明时初始化: 变量可以在声明时直接进行初始化,例如 `int x = 5;` 3. 构造函数初始...

    Java Scjp 陷阱大全.doc

    然而,构造器是用于初始化新对象的,它没有返回值且不能被继承。 4. **线程启动**:如果一个类没有重写`Thread`类的`run()`方法,那么创建并启动该类的线程将不会有任何效果。正确的做法是实现`Runnable`接口或直接...

    Java软件开发实战 Java基础与案例开发详解 5-7 this关键字 共5页.pdf

    - **初始化对象属性**:在构造方法中初始化对象的属性时,常常使用`this`关键字来确保赋值给成员变量。 - **解决命名冲突**:当方法参数名与成员变量名相同时,使用`this`关键字可以清楚地区分二者。 - **调用其他...

    java面试题2

    从给定的文件信息中,我们可以提取出一系列与Java编程相关的知识点,涵盖了变量的作用范围、方法声明、数据类型、标识符、方法修饰符、主方法、方法重载、Applet编程、运算符、构造方法、访问控制符、数组初始化、...

    V20-Java笔记整理-重要概念和常见陷阱梳理.docx

    - 当使用大数值初始化这些包装类对象时,可能会因为超出基本类型范围而导致错误。 #### 总结 本文档详细介绍了Java的重要概念和技术要点,包括基础语法、面向对象编程、异常处理以及一些常用工具类的使用方法。通过...

    Java习题(一些不注意就犯的错误)

    构造函数用于初始化对象,封装确保数据安全,继承实现代码重用,多态提供灵活性。不正确的类设计可能导致内存泄漏、对象状态混乱等问题。 5. 库谜题: Java标准库(JDK)提供了丰富的类和方法,但使用不当可能引入...

    避坑手册 - JAVA编码中容易踩坑的十大陷阱.doc

    未初始化的对象引用可能导致NullPointerException。在使用对象前,应检查其是否为null,以防止意外的空指针异常。 5. equals()与==的区别: `equals()`用于比较对象的内容,而`==`则比较对象的引用。对于基本类型...

    Java+Puzzlers(中英文并且带源码)

    8. **对象初始化与构造函数**:初始化块、构造函数和静态初始化块的执行顺序可能不那么直观,Puzzlers会引导读者理解这些概念。 9. **垃圾收集与内存管理**:Java的垃圾收集机制对于内存泄漏和性能优化至关重要,...

    Java陷阱一箩筐.doc

    - Static Nested Class(静态嵌套类)不持有对外部类的引用,可以独立存在,可被静态初始化,可以有自己的静态成员。 - Inner Class(内部类)持有对外部类的隐式引用,只能在外部类实例化后使用,不能有静态成员...

    dotnet C# 反射扫描程序集所有类型会不会触发类型静态构造函数.rar

    静态构造函数主要用于初始化类的静态字段,确保在类的生命周期内只进行一次初始化。 反射API则提供了在运行时动态地获取和使用类型信息的能力。例如,`System.Reflection.Assembly`类用于加载和处理程序集,`System...

    总结java编程中的经验教训

    同时,初始化资源应在适当的位置进行,如构造函数或初始化方法中,以确保资源在使用前已正确加载。 综上所述,Java编程中的经验教训涵盖了许多方面,从基本的语法和类型检查到复杂的框架使用和资源管理。理解和应用...

    java小结

    - Java为所有成员变量提供了默认值初始化。 - `byte`, `short`, `int`, `long`: `0` - `float`: `0.0f` - `double`: `0.0` - `boolean`: `false` - `char`: `\u0000` (空字符) - 对象引用: `null` - 局部...

    Java Bug 模式详解

    始终在构造函数中初始化实例变量,或者使用final关键字确保它们在使用前被赋值。 8. **线程安全的集合**:非线程安全的集合类(如ArrayList、HashMap)在多线程环境下可能导致数据不一致。使用ConcurrentHashMap、...

Global site tag (gtag.js) - Google Analytics