java中的变量初始化问题总结

一,成员变量初始化方式

前提:java保证所有的成员变量有一个默认初值(0,false,null),这就是所谓的自动初始化

1、在声明中赋值;

    *例:private int i = 1;
        private String  name = "";
        private Object = new Object();

    *也可以调用类中的方法来提供初值
    *方法还可以带参数
        public Class InitByMethod
        {
            private int i = f();
            private int j = g(2);
            public int f()
            {
                return 1;
            }
            public int g(int n)
            {
                return n;
            }
        }           

2、在构造器中设置值;

    。。。

3、初始化块;

    *例: public class Employee
        {
            private int id;
            private Name name;
            //初始化块
            {
                id=0;
                name=new Name()
            }

        }
        class Name
        {
            private String firstName;
            private String lastName;
            Name() {
                System.out.print("First-Last-Name");
            }
        }
    *初始化块的执行时机:
        只要构造类的对象,这些块就会被执行,然后再运行构造器的主体;
    *执行的次数:
        多次,即只要调用构造器(无论哪个构造器),初始化块都会被执行一次;

4、静态初始化;

**在声明时给静态成员变量赋值

            ***例 :
                    private static int i = 1;
                    private static Employee em=new Employee(); 
            ***注意 没有静态局部变量,即static关键字不能用于局部变量;

**静态初始化块

            ***例:public class Employee
                {
                    private static int id;
                    private static Name name;
                    //静态初始化块
                    static {
                        id=0;
                        name=new Name()
                    }

                }
                class Name
                {
                    private String firstName;
                    private String lastName;
                    Name() {
                        System.out.print("First-Last-Name");
                    }
                }

*静态初始化的执行时机:

当首次生成这个类的一个对象的时(即类第一次加载时),或者首次访问属于那个类的静态数据成员时

*静态初始化的执行次数:

仅仅执行一次(类第一次加载时)

二、局部变量的初始化方式

对于方法的局不变量,java以编译时错误的形式来贯彻这种保证

三、初始化数据的顺序;

当新建一个对象时(new一个对象);new Dog(); 
1、所有的数据域自动初始化为默认值(0,false,null)(在堆上为这个对象分配存储空间,这块存储空间会被清零)
2、加载Dog.class类,按声明顺序依次执行静态初始化(声明中为静态成员变量赋值,静态初始化块)
3、按照在声明中出现的顺序,依次执行非静态初始化(声明中为非静态变量赋值,初始化块)
4、如果在构造器的第一行调用了第二构造器,则执行第二个构造器
5、执行这个构造器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值