深入探究java中拓展类(子类)的初始化过程

      如果不懂java中初始化过程,那么就不能称你懂java。今天我总结了一下java中的初始化过程。并通过一个例子加深理解。

     当你运行一个java程序时,

       1  首先计算机去找类的路径classpath(该路径是你设置的环境变量)

        2 通过路径找到.class文件。

        3  在JVM中进行类的加载,发现有父类 进行4

        4  在classpath中找到父类的.class文件 

        5   对父类中静态资源进行初始化

        6  对子类的静态资源初始化

        7 如果主函数中有对象的产生 那么进行 8,9,10,11

        8 父类成员属性的初始化

        9  父类构造方法的初始化

       10 子类成员属性的初始化

       11 子类构造方法的初始化

     下面一段代码可以加深理解

 

class Shape {
	private static int i;
	protected static int j=10;
	Shape () {
		System.out.println ("i = " + i + ", j = " + j);
		j = 5;
	}
	private static int x1 = printInit("private Shape.x1 initialized");   //1
	static int printInit(String s) {
		System.out.println (s);
		return ++i;
	}
}

public class Circle extends Shape {
	int k = printInit("Circle.k initialized");
	public Circle () {
		System.out.println ("k = " + k);
		System.out.println ("j = " + j);
		System.out.println ("x2 = " + x2);
		super.printInit("super");
	}
	public static int x2 = printInit("public Circle.x2 initialized");
	public static void main(String[] args) {
		System.out.println ("Circle constructor");
		Circle b = new Circle ();
		System.out.println ("b.k="+b.k);

	}
}

   下面开始讨论这个例子

 

       1  首先计算机去找类的路径classpath(该路径是你设置的环境变量)

        2 通过路径找到Circle.class文件。

        3  在JVM中进行类的加载,发现有父类 Shape进行4

        4  在classpath中找到父类的 Shape.class文件 

        5   对父类中静态资源进行初始化   初始化结果:private static int i;初始化的时候如果没有赋值,基本类型都会被初始化为0,对象引用被初始化为null。这一句得到i=0;protected static int j=10;得到j=10;

      private static int x1 = printInit("private Shape.x1 initialized");   //1
      static int printInit(String s) {
        System.out.println (s);
        return ++i;
    }  那么改程序的第一句将输出private Shape.x1 initialized;并且i=1;

        6  对子类的静态资源初始化

    public static int x2 = printInit("public Circle.x2 initialized");
   那么将输出第二句public Circle.x2 initialized  并且i=2; x2=2

    由public static void main(String[] args) {
        System.out.println ("Circle constructor");
        Circle b = new Circle ();
        System.out.println ("b.k="+b.k);

    }  将输出第三句:Circle constructor   。

        7 主函数中有对象的产生 那么进行 8,9,10,11

        8 父类成员属性的初始化   父类中没有成员属性

        9  父类构造方法的初始化

Shape () {
        System.out.println ("i = " + i + ", j = " + j);
        j = 5;
    }将输出i=2,j=10  然后j=5

       10 子类成员属性的初始化

       int k = printInit("Circle.k initialized");将输出:Circle.k initializd  然后i=3  k=3

       11 子类构造方法的初始化

     public Circle () {
        System.out.println ("k = " + k);
        System.out.println ("j = " + j);
        System.out.println ("x2 = " + x2);
        super.printInit("super");
    }  将输出k=3  j=5  x2=2   super   并且i=4

    System.out.println ("b.k="+b.k);

   将输出结果  b.k=3

 那么最终输出结果为

 

private Shape.x1 initialized
public Circle.x2 initialized
Circle constructor
i = 2, j = 10
Circle.k initialized
k = 3
j = 5
x2 = 2
super
b.k=3

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据型 在C语言,变量用于存储数据,数据型用于定义变量的型和范围。C语言支持多种数据型,包括基本数据型(如int、float、char等)和复合数据型(如结构体、联合等)。 2. 运算符 C语言常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言用于封装代码的单元,可以实现代码的复用和模块化。C语言定义函数使用关键字“void”或返回值型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言用于存储同型数据的结构,可以通过索引访问和修改数组的元素。字符串是C语言用于存储文本数据的特殊型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言用于存储不同型数据的复合数据型。结构体由多个成员组成,每个成员可以是不同的数据型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值