程序的执行顺序
1. 执行父类的静态块和静态属性(执行顺序:按照程序的排列顺序执行)→
执行子类的静态块和静态属性(执行顺序:按照程序的排列顺序执行)→
执行主函数new对象前面的输出语句和非静态块(执行顺序:按照程序的排列顺 序执行)→
父类的属性和非静态块(执行顺序:按照程序的排列顺序执行)→
父类的构造器→
子类的属性和非静态块(执行顺序:按照程序的排列顺序)→
子类的构造器→
new结束,执行new后面的语句
下面我将给出一个程序来验证我上面的执行顺序是否正确
1.
package com.cl.ft.text;
//子类T继承父类X
public class T extends X{
//子类静态块
static {
System.out.println("我是子类的静态块A");
}
//子类静态属性
static B r = new B();
//子类非静态块
{
System.out.println("我是子类的非静态的块");
}
//子类的静态方法
public static void Assa (){
System.out.println("我是子类的静态方法");
}
//子类的非静态属性
Y y=new Y();
//子类的无参构造器
public T(){
//调用父类的有参构造器
super(5);
System.out.println("我是子类的无参构造器");
}
public static void main(String[] args) {
System.out.println("我是主函数new对象前面的");
//主函数的非静态块
{
System.out.println("我是主函数new前面的非静态块");
}
//new一个父类对象
X r = new X();
//new一个子类对象
T q = new T();
System.out.println("我是主函数new对象后面的add");
//new对象后面的非静态块
{
System.out.println("我是主函数new后面的非静态块");
}
}
}
//父类X
class X{
//父类静态块
static {
System.out.println("我是父类的静态块B");
}
//父类静态属性
static B t = new B();
//父类非静态属性
B d = new B();//属于X的属性
//父类非静态块
{
System.out.println("我是父类的非静态块");
}
//父类的静态方法
public static void Ass (){
System.out.println("我是父类的静态方法");
}
//父类的非静态属性
B b = new B();//属于X的属性
Y y=new Y();
//父类的无参构造器
public X(){
System.out.println("X我是父类无参的构造方法");
}
//父类的有参构造器
public X(int i){
System.out.println("我是父类有参的构造方法");
}
}
class Y{
public Y(){
System.out.println("YY");
} 2. package com.cl.ft.text;
public class B {
B (){
System.out.println("zz");
} 运行结果 由于运行结果复制不能显示字母我就用截图给大家看 我会把源代码和截图都给你大家,一张图片,一个压缩包,里面有两个文件。运行的结果有点长,大家要是觉得有点晕,可以先注释大部分语句,一点一点增加语句来比较性的查看运行结果,这个需要大家自己操作运行,这样理解的更加深刻一点,如果有不懂的可以给我留言,我会尽量最快来回复大家的疑问。谢谢大家!!!
zz
YY
}
}
相关推荐
c#切换执行程序顺序,有些中级开发小伙伴还是搞不太明白在继承父类以及不同场景实例化的情况下,父类和子类的各种方法的执行顺序到底是,多年c#经验总结
主要介绍了C#中子类调用父类的实现方法,通过实例逐步分析了类中初始化构造函数的执行顺序问题,有助于加深对C#面向对象程序设计的理解,需要的朋友可以参考下
本篇文章是对java中子类继承父类,程序运行顺序进行了详细的分析介绍,需要的朋友参考下
子类不能继承父类中访问权限为private的成员变量和方法,子类可以重写父类的方法,及命名与父类同名的成员变量。 子类通过隐藏父类的成员变量和重写父类的方法,把父类的状态和行为改变为自身的状态和行为。注意:...
Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。...3、类初始化时,先初始化类的属性成员,在执行构造方法。
能够在MyEclipse IDE中定义抽象类及定义子类继承抽象父类。 5.能够在MyEclipse IDE中定义接口及定义类实现接口。 《Java程序设计案例教程》教学课件05深入Java面向对象全文共47页,当前为第3页。 5.1 回顾与思考 在...
声明抽象类语法: abstract class{…… } 使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方 法的实现细节 abstract 修饰符 3-2 抽象类可以具有指向子类对象的对象引用 abstract 修饰...
1.下列特点中,哪个是Java 虚拟机执行的特点之一? A、字节代码 B、多进程 C、静态连接 D、编译 2.Java语言的类型是 A、面向对象语言 B、面向过程语言 C、汇编程序 D、形式语言 3.下列哪个数代表单精度浮点数...
面向对象中的继承指类的继承,类似父子继承 1、子类拥有父类的所有成员变量和成员函数 2、子类就是一种特殊的父类 3、子类对象可以当作父类对象使用(赋值兼容性原则) 4、子类可以拥有父类没有的方法和属性..........
6、Java源程序在转换为机器语言执行过程中既有编译也有解释。 ( ) 7、// 是java的多行注释符。 ( ) 面向对象 3.Java 仅支持类间的单重继承。 ( ) 17.方法可以没有返回值,或有一个返回值,也可以有多个返回值。...
6、MFC程序具有一个CTestApp类的全局对象theApp,在MFC程序运行时,程序执行的顺序为:theApp全局对象定义 处->CTestApp构造函数->WinMain函数 7、对于普通的VC++控制台程序,无论全局变量还是全局对象,程序运行时...
Public class 类名 extends Applet{ Public void init(){//初始化变量、设置字体、装载图片} Public void start(){//启动程序执行或恢复程序执行} Public void stop(){//挂起正在执行的程序,暂停程序} Public viod...
Public class 类名 extends Applet{ Public void init(){//初始化变量、设置字体、装载图片} Public void start(){//启动程序执行或恢复程序执行} Public void stop(){//挂起正在执行的程序,暂停程序} Public viod...
Public class 类名 extends Applet{ Public void init(){//初始化变量、设置字体、装载图片} Public void start(){//启动程序执行或恢复程序执行} Public void stop(){//挂起正在执行的程序,暂停程序} Public viod...
线程:是进程中一个执行单元或执行情景或执行路径负责进程中程序执行的控制单元 。一个进程中至少要有一个线程。当一个进程中线程有多个时,是多线程。 为什么要用多线程 1,让计算机"同时"做多件事情,...
修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被...
答:软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。 主要模型包括:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型。 5. 有哪些主要的软件开发方法? 答:主要的软件开发...
2:继承:子类继承父类,子类可以拥有父类中已定义的方法,并且子类可以修改父类中的方法使其更适合特殊需求。 3:多台:不同对象对统一消息作出不同响应称之为多态 4:抽象:忽略与当前主题无关的那些方面,将...
在 java 语言中,Java 程序的基本单位是类,也就是说:一个 Java 程序是由多个类组成 的。定义一个类与定义一个数据类型是有区别的。在程序设计语言中,把定义数据类型的能 力作为一种很重要的能力来对待。在面向...