`
lcj325
  • 浏览: 26488 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java编程思想笔记-类的加载、继承与初始化

阅读更多

1. 类的加载

众所周知,每个类的的编译代码存在于每个独立的文件中,通常类的加载是发生在创建类的第一个对象的时候,但当访问static域或static方法时,也会发生类的加载。

 

2. 类的继承与初始化

package com.andy;

/**
 * @author Andy Leung<br>
 * @version 1.1 $ 2010-11-21
 */
class Parent {
	private int i = 9;
	protected int j;
	private static int x1 = printInit("static Parent.x1 initialized");

	Parent() {
		print("i = " + i + ", j = " + j);
		j = 39;
	}

	protected static int printInit(String s) {
		print(s);
		return 47;
	}

	/**
	 * @param string
	 */
	protected static void print(String string) {
		System.out.println(string);
	}
}

public class Child extends Parent {

	private int k = printInit("Child.k initialized");
	private static int x2 = printInit("static Child.x2 initialized");

	public Child() {
		print("k = " + k);
		print("j = " + j);
	}

	public static void main(String[] args) {
		print("Child constructor");
		Child b = new Child();
	}
}

 

运行结果:

 

static Parent.x1 initialized
static Child.x2 initialized
Child constructor
i = 9, j = 0
Child.k initialized
k = 47
j = 39
 

 

 

 总结一下: 

 

  • 程序怎么进行的 ?在Child 上运行java 时,所发生的第一件事就是试图访问Child .main()(一个static方法),于是加载器开始启动并找出Child 类的编译代码, 编译器注意到它有个基类(注意这是由extends引起的),于是加载基类,直到无基类。
  • 接下,从根基类开始初始化static,直到最下面的导出类。
  • why 从根基类到导出类,因为导出类的static初始化可能会以来与基类成员能否正确的初始化。 
    到这,必要的类加载完,可以开始创建对象了。
  • 开始初始化对象,首先对象中的所有基本类型都会被设为默认值,对象的引用设为null(通过将对象内存设为二进制零值而一举生成)。
  • 然后基类的构造器的调用

 

7
1
分享到:
评论

相关推荐

    java编程思想读书笔记

    ### Java编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...

    JAVA编程思想笔记

    ### JAVA编程思想笔记 #### 一、编程语言与Java特性 1. **编程语言类别**: - **机器语言**:直接与硬件交互的语言,由0和1组成。 - **汇编语言**:接近机器语言,使用助记符表示指令。 - **高级语言**:更接近...

    JAVA经典教材笔记

    - Java作为一种广泛使用的编程语言,其学习路径包括掌握基本语法、理解面向对象编程思想、熟悉标准库使用等。 - **JAVA发展概述** - Java的发展历程:从1995年由Sun Microsystems公司发布以来,Java经历了多次重大...

    Java自学笔记 - 超有用

    Java是一种广泛使用的面向对象编程语言,其设计思想主要基于对象、类、继承、封装和消息传递等核心概念。面向对象编程(OOP)旨在通过模拟现实世界中的实体来构建软件系统,使得代码更加易于理解和维护。 1. **面向...

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

    - **静态块**:在类加载时执行一次,用于初始化静态变量。 **4.12 垃圾回收机制** - **垃圾回收概述**:Java自动管理内存,通过垃圾回收机制释放不再使用的对象所占用的内存。 - **对象被当作垃圾回收的条件**:当...

    java私塾学习笔记整理

    ### Java私塾学习笔记整理 #### 第一章:Java入门 ...以上内容涵盖了Java基础知识的重要方面,从语言基础到高级特性,以及常见的开发技术和工具,帮助读者全面了解Java编程的基础知识和技术要点。

    Java 基础 第2阶段:面向对象编程-尚硅谷学习笔记(含面试题) 2023年

    面向对象编程是Java的核心特性,本学习笔记涵盖了这一主题的深度探索,旨在帮助开发者深入理解并熟练运用面向对象的思想。2023年的版本更新可能包含最新的面试趋势和技术发展。以下将详细介绍Java面向对象编程的一些...

    java基础知识笔记总结

    - 代码块用于初始化对象,分为实例初始化块和类初始化块。 6. **构造方法的私有化** - 私有化构造方法可以防止外部创建对象,常用于单例模式。 7. **Singleton模式(单例模式)** - 单例模式确保一个类只有一个...

    Java笔记PDF版含图片

    ### Java核心知识点详解 #### 一、Java的基本特性与...以上是基于提供的部分Java笔记内容进行的详细总结和解释,涵盖了Java的基本概念、语法特性以及面向对象编程的核心思想等多个方面,希望对你学习Java有所帮助。

    自己总结的java笔记

    - **对象创建与初始化**:使用 `new` 关键字创建对象,并通过构造方法进行初始化。 - **继承**:通过 `extends` 关键字实现类之间的继承关系。 #### static - **概念**:用于修饰成员变量和成员方法,表示它们属于...

    MLDN的mario(超级马里奥)开发笔记

    - **场景初始化**:在游戏启动时加载和初始化场景的相关数据。 - **敌人与障碍物重置**:当Mario重新开始或进入新的场景时,需要重置场景内的所有元素。 #### 五、障碍物的开发 - **属性**:每个障碍物都有自己的...

    动力节点王鹤2021版SpringBoot教程-课件笔记

    1. **面向对象**:JavaConfig使用Java类进行配置,允许使用面向对象的编程思想,如继承、多态等。 2. **可读性强**:Java代码比XML更易读,更易于理解和维护。 3. **类型安全**:JavaConfig在编译时就能检查配置错误...

    c#学习笔记.txt

    在类中,必须初始化实例对象. 使用 new 运算符创建结构对象时,将创建该结构对象,并且调用适当的构造函数。与类不同的是,结构的实例化可以不使用 new 运算符。如果不使用 new,那么在初始化所有字段之前,字段将...

    hibernate学习笔记

    - **定义**:提供了一种基于对象模型的查询方式,更符合面向对象的编程思想。 - **使用**:通过`Session.createCriteria`方法创建`Criteria`对象,然后添加查询条件进行数据检索。 #### 事务管理 - **事务**:一组...

    技术笔记(第一部分整理)

    这涉及到数组的初始化、遍历、排序等操作。 ##### 方法思想 方法思想关注于如何将复杂的问题分解为更小、更容易管理的部分,并通过调用方法来解决问题。 ##### 递归算法 递归是一种解决问题的方法,其中函数调用...

    软件设计模式实验报告(Java实现)

    实验中的实现属于懒汉式,通过`getInstanse()`静态方法保证了线程安全地创建单例,只有当`config`为`null`时才会初始化一个新的`AppConfig`对象。这样,无论多少次调用`getInstanse()`,都只会返回同一个对象。 UML...

Global site tag (gtag.js) - Google Analytics