zoukankan      html  css  js  c++  java
  • 关于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变量的赋值在声明之前,但实际上执行的时候会先执行变量的声明,再按代码顺序执行变量值的赋值动作,然后再进行构造函数对实例的初始化构造。
    这三种实例变量的初始化语句经过编译器处理后,都会合并到构造器中去,其中定义变量语句转换得到的赋值语句、初始化块中的语句转化得到的赋值语句,总是位于构造器的所有语句之前。合并后两种赋值语句的顺序保持他们在源码中的顺序。
     
     
     
     
    态度决定行为,行为决定习惯,习惯决定性格,性格决定命运
  • 相关阅读:
    HTML中超出的内容显示为省略号
    JS-复习整理
    js-实现鼠标滑轮滚动实现换页
    CSS 控制滚动条样式
    面向对象、继承、抽象方法重载知识点整理
    面向对象知识点
    复习HTML、CSS、JS练习题
    数据库---创建函数,存储函数,触发器实例
    ajax编写购物车遇到的问题
    ajax应用
  • 原文地址:https://www.cnblogs.com/neversayno/p/5432547.html
Copyright © 2011-2022 走看看