• 动手动脑


    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.将一个实例变量赋给静态变量,然后返回实例值,最后输出静态变量。

  • 相关阅读:
    【分布式架构】“spring cloud”与“dubbo”微服务的对比
    gradle项目与maven项目互转
    Maven和Gradle对比
    从头开始搭建一个dubbo+zookeeper平台
    Kafka、 RabbitMQ、Redis、 ZeroMQ、 ActiveMQ、 Kafka/Jafka 对比
    Docker下redis的主从、持久化配置
    HIBERNATE与 MYBATIS的对比
    叶金荣:MySQL通用优化技巧
    为 Virtual Box 中的 CentOS 6.6 配置本地DVD光盘做yum软件源
    eclipse发布项目时,会自动还原server.xml和content.xml文件
  • 原文地址:https://www.cnblogs.com/ljm-zsy/p/9825378.html
Copyright © 2020-2023  润新知