static变量/方法,与基类父类执行的先后顺序
2017-09-26 17:50
155 查看
1.static成员变量:属于整个类而不是某个实例对象,在类被加载时系统就会为其分配内存,直至程序结束退出才会被回收。
2.static方法:
静态方法中可以直接调用同类中的静态成员,不可以直接调用非静态成员,但是可以通过创建类的对象,然后通过对象来访问非静态成员;
静态方法中不可以直接调用非静态方法,但是可以通过对象来调用;
普通方法可以调用静态方法。
ps:静态方法是属于类的,内存必须为其分配空间,且一直被占用,当过多的声明静态方法容易使系统变慢,而普通的成员方法是由对象调用时才分配内存空间,当它没有被调用时会被回收空间。
3.下面看一个static修饰的变量和代码块与基类父类的执行顺序:
class Father{
public Father(){
System.out.println("Father construtor");
}
static{
System.out.println("Father static");
}
}
class Child extends Father{
public Child(){
System.out.println("Child construtor");
}
static{
System.out.println("Child static");
}
}
public class Hlist{
static{
System.out.println("Main static");
}
public static void main(String [] args){
new Child();
}
}输出结果:
Main static
Father static
Child static
Father construtor
Child construtor
首先程序运行Hlist文件,static静态代码块在类加载时被初始化(static变量与方法只能初始化一次,如果已经初始化过,则不会再第二次初始化),首先输出Main static
程序找到main方法,需要new Child,由于Child继承自Father,因此需要先创建父类对象,在Father类中,有一个static代码块,子类Child中也有static代码块,优先输出Father static,接着输出Child static,然后执行父类构造函数,输出Father constructor,最后输出Child constructor。
总结:
static方法/变量与基类父类的执行顺序是:static变量/方法>main方法,基类初始化需要先加载父类的变量和方法。
2.static方法:
静态方法中可以直接调用同类中的静态成员,不可以直接调用非静态成员,但是可以通过创建类的对象,然后通过对象来访问非静态成员;
静态方法中不可以直接调用非静态方法,但是可以通过对象来调用;
普通方法可以调用静态方法。
ps:静态方法是属于类的,内存必须为其分配空间,且一直被占用,当过多的声明静态方法容易使系统变慢,而普通的成员方法是由对象调用时才分配内存空间,当它没有被调用时会被回收空间。
3.下面看一个static修饰的变量和代码块与基类父类的执行顺序:
class Father{
public Father(){
System.out.println("Father construtor");
}
static{
System.out.println("Father static");
}
}
class Child extends Father{
public Child(){
System.out.println("Child construtor");
}
static{
System.out.println("Child static");
}
}
public class Hlist{
static{
System.out.println("Main static");
}
public static void main(String [] args){
new Child();
}
}输出结果:
Main static
Father static
Child static
Father construtor
Child construtor
首先程序运行Hlist文件,static静态代码块在类加载时被初始化(static变量与方法只能初始化一次,如果已经初始化过,则不会再第二次初始化),首先输出Main static
程序找到main方法,需要new Child,由于Child继承自Father,因此需要先创建父类对象,在Father类中,有一个static代码块,子类Child中也有static代码块,优先输出Father static,接着输出Child static,然后执行父类构造函数,输出Father constructor,最后输出Child constructor。
总结:
static方法/变量与基类父类的执行顺序是:static变量/方法>main方法,基类初始化需要先加载父类的变量和方法。
相关文章推荐
- 父类和子类静态代码块、非静态代码块、构造函数(方法)执行的先后顺序问题
- java中父类的静态代码块,非静态代码块,构造方法,子类的静态代码块,构造方法等先后执行顺序
- 类在构造时,构造方法内,类属性,父类属性,super的执行顺序
- view的执行过程,各种方法的调用先后顺序
- 【JAVA】探究JAVA父类子类静态代码块、静态变量、构造方法的执行顺序
- 子类、父类各种方法的执行顺序
- 子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?
- Java继承中父类子类构造方法、静态代码块、非静态代码块的执行顺序
- JAVA中静态代码块、构造方法、Super()父类与子类之间执行顺序
- 详细讲解方法重写的注意事项,子类与父类代码的执行顺序
- Oracle不支持脏读,控制事务执行先后顺序的方法
- 子类与父类构造方法执行顺序
- 父类与子类的静态代码块、代码块、构造方法执行顺序
- java父类子类静态块、块、构造方法的执行顺序
- 子类和父类的 static块 和 构造方法 构造块 的执行顺序
- 父类、派生类、方法重写、实例化后的执行顺序
- SPRING的初始化方法执行先后顺序
- java中 静态成员、实例成员、构造方法在子类和父类中的执行顺序
- asp.net 页面父类与子类方法执行的顺序
- 父类子类静态代码块,构造方法的执行顺序