一般初始化:
1.没有继承
静态变量、静态初始化块 --> 变量、变量初始化块–>构造方法
2.有继承的情况
父类静态变量、父类静态初始化块–>子类静态变量、子类静态初始化块–>父类变量初始化、父类变量初始化块–>父类构造方法–>子类变量初始化、子类变量初始化块–>子类构造方法–>调用的其他非静态的方法们
静态的先于非静态执行
普通示例:
定义父类Animal :
public class Animal {
static int num1 = 1;
//静态语句块
static {
System.out.println("父类静态语句块1"+",num1值:"+num1);
}
//非静态语句块
{
System.out.println("父类非静态语句块1"+",num1值:"+num1+",num2值:"+num2);
}
//静态语句块
static {
num1 = 3;
System.out.println("父类静态语句块3"+",num1值:"+num1);
}
//非静态语句块
{
System.out.println("父类非静态语句块2"+",num1值:"+num1+",num2值:"+num2);
}
static int num2 = 2;
//静态语句块
static {
System.out.println("父类静态语句块2"+",num1值:"+num1+",num2值:"+num2);
}
//非静态方法
public void notStaticMethod() {
System.out.println("父类非静态方法1");
}
//静态方法
public static void staticMethod() {
System.out.println("父类静态方法1");
}
//无参构造函数
public Animal() {
System.out.println("父类构造函数");
}
//一般静态方法
public static void animalStaticTest(){
System.out.println("父类一般静态方法");
}
//一般非静态方法
public void animalTest(){
System.out.println("父类一般非静态方法");
}
//一般非静态方法
public void animalTest2(){
System.out.println("父类一般非静态方法2");
}
}
定义子类dog:
public class Dog extends Animal {
public static void main(String args[]) {
Animal dog = new Dog();
dog.animalTest();
dog.animalTest2();
}
//一般非静态方法
@Override
public void animalTest2(){
System.out.println("子类一般非静态方法2(重写了)");
}
//静态语句块
static {
System.out.println("子类静态语句块1");
}
//非静态语句块
{
System.out.println("子类非静态语句块2");
}
//静态语句块
static {
System.out.println("子类静态语句块3");
}
//非静态语句块
{
System.out.println("子类非静态语句块1");
}
//非静态方法
public void dogTest() {
System.out.println("子类非静态方法1");
}
//静态语句块
static {
System.out.println("子类静态语句块2");
}
//静态方法
public static void dogStaticTest() {
System.out.println("子类静态方法");
return;
}
//构造函数
public Dog() {
System.out.println("子类构造函数");
}
}
运行结果:
父类静态语句块1,num1值:1
父类静态语句块3,num1值:3
父类静态语句块2,num1值:3,num2值:2
子类静态语句块1
子类静态语句块3
子类静态语句块2
父类非静态语句块1,num1值:3,num2值:2
父类非静态语句块2,num1值:3,num2值:2
父类构造函数
子类非静态语句块2
子类非静态语句块1
子类构造函数
父类一般非静态方法
子类一般非静态方法2(重写了)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
增加内部类后,初始化
定义父类Animal :
Animal 中有内部类AnimalInner
public class Animal {
static int num1 = 1;
//静态语句块
static {
System.out.println("父类静态语句块1"+",num1值:"+num1);
}
//非静态语句块
{
System.out.println("父类非静态语句块1"+",num1值:"+num1+",num2值:"+num2);
}
//静态语句块
static {
num1 = 3;
System.out.println("父类静态语句块3"+",num1值:"+num1);
}
//非静态语句块
{
System.out.println("父类非静态语句块2"+",num1值:"+num1+",num2值:"+num2);
}
static int num2 = 2;
//静态语句块
static {
System.out.println("父类静态语句块2"+",num1值:"+num1+",num2值:"+num2);
}
//非静态方法
public void notStaticMethod() {
System.out.println("父类非静态方法1");
}
//静态方法
public static void staticMethod() {
System.out.println("父类静态方法1");
}
//无参构造函数
public Animal() {
System.out.println("父类构造函数");
}
//一般静态方法
public static void animalStaticTest(){
System.out.println("父类一般静态方法");
}
//一般非静态方法
public void animalTest(){
System.out.println("父类一般非静态方法");
}
//一般非静态方法
public void animalTest2(){
System.out.println("父类一般非静态方法2");
}
protected class AnimalInner {
public AnimalInner() {
System.out.println("父类构造器-内部类");
}
public void animalInnerTest() {
System.out.println("父类一般非静态方法-内部类");
}
///非静态语句块
{
System.out.println("父类非静态语句块5-内部类"+",num1值:"+num1+",num2值:"+num2);
}
}
private AnimalInner y = new Animal.AnimalInner();
public void insertYolk(AnimalInner yy) {
y = yy;
}
public void g() {
y.animalInnerTest();
}
}
定义子类cat:
Cat中的内部类CatInner继承Animal.AnimalInner
public class Cat extends Animal {
public static void main(String args[]) {
Animal cat = new Cat();
cat.animalTest();
cat.animalTest2();
}
protected class CatInner extends Animal.AnimalInner{
public CatInner() {
System.out.println("子类构造器-内部类");
}
@Override
public void animalInnerTest() {
System.out.println("子类一般非静态方法-内部类(重写了)");
}
///非静态语句块
{
System.out.println("子类非静态语句块5-内部类"+",num1值:"+num1+",num2值:"+num2);
}
}
//一般非静态方法
@Override
public void animalTest2(){
System.out.println("子类一般非静态方法2(重写了)");
}
//静态语句块
static {
System.out.println("子类静态语句块1");
}
//非静态语句块
{
System.out.println("子类非静态语句块2");
}
//静态语句块
static {
System.out.println("子类静态语句块3");
}
//非静态语句块
{
System.out.println("子类非静态语句块1");
}
//非静态方法
public void dogTest() {
System.out.println("子类非静态方法1");
}
//静态语句块
static {
System.out.println("子类静态语句块2");
}
//静态方法
public static void dogStaticTest() {
System.out.println("子类静态方法");
return;
}
//构造函数
public Cat() {
System.out.println("子类构造函数");
insertYolk(new Cat.CatInner());
}
}
运行结果:
父类静态语句块1,num1值:1
父类静态语句块3,num1值:3
父类静态语句块2,num1值:3,num2值:2
子类静态语句块1
子类静态语句块3
子类静态语句块2
父类非静态语句块1,num1值:3,num2值:2
父类非静态语句块2,num1值:3,num2值:2
父类非静态语句块5-内部类,num1值:3,num2值:2
父类构造器-内部类
父类构造函数
子类非静态语句块2
子类非静态语句块1
子类构造函数
父类非静态语句块5-内部类,num1值:3,num2值:2
父类构造器-内部类
子类非静态语句块5-内部类,num1值:3,num2值:2
子类构造器-内部类
父类一般非静态方法
子类一般非静态方法2(重写了)