前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础知识:动态联编与静态联编

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

作者头像
DioxideCN
发布2022-08-05 19:18:24
8550
发布2022-08-05 19:18:24
举报
文章被收录于专栏:用户4480853的专栏

动态联编与静态联编

联编类型

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

  • 动态联编:也叫多态联编、迟后联编、晚联编,因为到底要调用哪一个函数,在编译时不能确定,而要推迟到运行中确定。也就是说,要等到程序运行时,确定了指针所指向对象的类型时,才能够确定。
  • 静态联编:静态联编是指联编工作出现在编译连接阶段,这种联编又称作早期联编,因为这种联编工作是程序开始运行之前完成的。
  • 静态联编条件:静态类方法,静态类变量。
代码语言:javascript
复制
//基类
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关键字的运用与变换,这将使得整个程序拥有更强的灵活性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动态联编与静态联编
    • 联编类型
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档