动手动脑

public class Test {
    public static void main (String[] args) {
    Foo    obj1 = new Foo();
        
    }
    

}
class Foo{
    int value;
    public Foo(int initvalue) {
        value=initvalue;
    }
}

1.此代码的问题主要是函数初始化的时候没有参数,而构造函数有参数,所以程序不能执行。

package 动手动脑;

public class InitializeBlockClass {
    {
        field=200;
    }
    public int field=100;
    public InitializeBlockClass(int value) {
        this.field=value;
        
    }
    public InitializeBlockClass() {
        
    }
    public static void main(String[] args) {
        InitializeBlockClass obj=new InitializeBlockClass();
        System.out.println(obj.field);
        obj=new InitializeBlockClass(300);
        System.out.println(obj.field);
    }

}

2.(1)构造函数,当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。

(2)如果类没有定义构造函数,Java编译器在编译时会自动给它提供一个没有参数的“默认构造方法”。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

package 动手动脑;


    class Root
    {
        static{
            System.out.println("Root的静态初始化块");
        }
        {
            System.out.println("Root的普通初始化块");
        }
        public Root()
        {
            System.out.println("Root的无参数的构造器");
        }
    }
    class Mid extends Root
    {
        static{
            System.out.println("Mid的静态初始化块");
        }
        {
            System.out.println("Mid的普通初始化块");
        }
        public Mid()
        {
            System.out.println("Mid的无参数的构造器");
        }
        public Mid(String msg)
        {
            //通过this调用同一类中重载的构造器
            this();
            System.out.println("Mid的带参数构造器,其参数值:" + msg);
        }
    }
    class Leaf extends Mid
    {
        static{
            System.out.println("Leaf的静态初始化块");
        }
        {
            System.out.println("Leaf的普通初始化块");
        }    
        public Leaf()
        {
            //通过super调用父类中有一个字符串参数的构造器
            super("Java初始化顺序演示");
            System.out.println("执行Leaf的构造器");
        }

    }

    public class TestStaticInitializeBlock
    {
        public static void main(String[] args) 
        {
            new Leaf();
            

        }
    }

3.静态代码块随着类加载而加载

有多个静态代码块的,按代码块前后顺序加载

一个代码块,只执行一次。

package 动手动脑;

public class Jingtai {
    static int n = 200; //静态变量

    public static void main(String[] args) {
        
        New e = new New();
        n = e.Shi();   //将实例变量赋值给静态变量
        New.Jing(n); //

    }

}
class New{
    int m = 100; //实例变量
    int Shi(){
        int x;
        x = m;
        return x;//实例函数,返回一个实例值
    }
    static void Jing(int x){
        System.out.println(x);  //输出静态变量
    }
    
}

4.将一个实例变量赋给静态变量,然后返回实例值,最后输出静态变量。

原文地址:https://www.cnblogs.com/ljm-zsy/p/9825378.html