侧边栏壁纸
博主头像
Dioxide-CN博主等级

茶边话旧,看几许星迢露冕,从淮海南来。

  • 累计撰写 41 篇文章
  • 累计创建 37 个标签
  • 累计收到 19 条评论

目 录CONTENT

文章目录

Java基础知识:动态联编与静态联编

Dioxide-CN
2022-06-21 / 0 评论 / 1 点赞 / 25 阅读 / 1,132 字
温馨提示:
本文最后更新于 2022-06-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

动态联编与静态联编

联编类型

JAVA中联编有两种,一种是动态联编,一种是静态联编

  • 动态联编:也叫多态联编、迟后联编、晚联编,因为到底要调用哪一个函数,在编译时不能确定,而要推迟到运行中确定。也就是说,要等到程序运行时,确定了指针所指向对象的类型时,才能够确定。
  • 静态联编:静态联编是指联编工作出现在编译连接阶段,这种联编又称作早期联编,因为这种联编工作是程序开始运行之前完成的。
  • 静态联编条件:静态类方法,静态类变量。
//基类
public class Test {
	//static variable
	public static int i=4;
	//无参构造
	public Test() {
		System.out.println("Test initialzed");
	}
	//动态联编
	public void smile() {
		System.out.println("Test smile and i = "+i);  
	}
	//静态联编 -> static
	public static void smile_static() {
		System.out.println("Test smile_static and i = "+i);
	}
}
//子类
public class Chi_Test extends Test {
	public static int i = 5;
	//构造函数
	public Chi_Test() {
		System.out.println("Chi_Test initialized ");
	}
	//动态联编
	public void smile() {
		System.out.println("Chi_Test smile and i = " + i);
	}
	//静态联编
	public static void smile_static() {
		System.out.println("Chi_Test smile_static and i = " + i);
	}
}
public class Demo {
	public static void main(String[] args) {
		Test test = new Chi_Test(); //测试初始化构造函数顺序
		test.smile(); //动态联编
		test.smile_static(); //静态联编
	}
}

由整个程序最终的运行结果可以看出:

  1. 在构造一个子类对象时,先调用其父类的构造函数,再执行本类构造函数。
  2. 对于一般的方法即使把子对象强制转换成父类对象,程序运行时执行子类中的方法。
  3. 对于静态方法,因为在编译时就决定了它的执行顺序,所以程序运行时执行强制转换后对象的静态方法。

动态联编与静态联编的本质区别在于对static关键字的运用与变换,这将使得整个程序拥有更强的灵活性。

1

评论区