• 关于Java的构造器和直接为成员变量赋值的区别


     
    首先,看一下为什么要用构造器?
    1、Java类的成员变量在被修饰为public、protected和包访问权限时,可以在不同层次上直接给成员变量赋值。
    但是,赋值的前提是:必须存在持有成员变量的对象。而对象的初始化必须调用构造函数,所以构造函数是必不可缺的。
    至于使用构造函数还是直接声明时给成员变量赋值,那就要看情况而定。
    如果创建的这个对象是不可变的,那么就必须使用构造函数初始化成员变量,反之,就无所谓。
    另外,直接给成员变量赋值,Java是不推荐的,因为这样会破坏它的封装性。所以,建议在构造函数或提供setters方法对变量赋值。
    2、成员变量的赋值一般通过构造函数;直接赋值一般的话都是一些常成员变量,final关键字开头的。
    3、其他的时候基本上都是用构造函数构造函数试用于动态创建对象。基于对象编程的思想,是不赞成直接给类里面的变量直接赋值的。
     
     
    作者:小开
    链接:http://www.zhihu.com/question/20616186/answer/15646132
    来源:知乎

    类变量、实例变量的初始化比较相似,对于实例变量有一个例子
    public class RAMTest {
    {
    price = 3.4;//①--非静态语句块
    }
    public RAMTest(double price) {
    this.price = price;//②--构造函数
    }
    double price = 2.0;//③--声明语句并赋值
    }


    本例中对实例变量price的初始化有三处
    执行顺序为:③中price变量声明[price=0.0]
    --①中price变量赋值[price=3.4]
    --③中price变量赋值[price=2.0]
    --②中price构造函数赋值
    需要注意的是,虽然非静态语句初始块中的price变量的赋值在声明之前,但实际上执行的时候会先执行变量的声明,再按代码顺序执行变量值的赋值动作,然后再进行构造函数对实例的初始化构造。
    这三种实例变量的初始化语句经过编译器处理后,都会合并到构造器中去,其中定义变量语句转换得到的赋值语句、初始化块中的语句转化得到的赋值语句,总是位于构造器的所有语句之前。合并后两种赋值语句的顺序保持他们在源码中的顺序。
     
     
     
     
    态度决定行为,行为决定习惯,习惯决定性格,性格决定命运
  • 相关阅读:
    小程序后端获取openid (php实例)
    原生sql查询返回结果集处理方法
    关于生成的时间戳和当前时间不相符的问题
    数据结构的基本概念学习
    TensorFlow框架(6)之RNN循环神经网络详解
    TensorFlow框架(5)之机器学习实践
    TensorFlow框架(4)之CNN卷积神经网络详解
    TensorFlow框架(3)之MNIST机器学习入门
    TensorFlow框架(2)之TensorBoard详解
    TensorFlow框架(1)之Computational Graph详解
  • 原文地址:https://www.cnblogs.com/neversayno/p/5432547.html
Copyright © 2020-2023  润新知