首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实例变量与参数传递?有争论吗?

实例变量与参数传递是面向对象编程中的两个概念。

实例变量是指属于对象的变量,每个对象都有自己的一组实例变量,用于存储对象的状态信息。实例变量在对象创建时被初始化,并且可以在对象的整个生命周期内被访问和修改。

参数传递是指在方法或函数调用时,将参数的值传递给方法或函数进行处理。参数传递可以是按值传递(传递参数的副本)或按引用传递(传递参数的地址),具体取决于编程语言的实现。

在实例变量与参数传递的关系上,有一些争论。一些人认为实例变量应该尽量避免被直接传递给方法或函数,而应该通过方法或函数的参数进行传递,以保持封装性和数据的一致性。他们认为实例变量应该只在对象内部使用,不应该暴露给外部。

另一些人则认为,在某些情况下,直接传递实例变量可以简化代码,并提高代码的可读性和可维护性。他们认为实例变量是对象的一部分,可以被方法或函数直接使用,而不需要通过参数传递。

这个争论的核心在于如何平衡封装性和代码简洁性。在实际开发中,应根据具体情况来决定是否直接传递实例变量,或者通过参数传递。在设计良好的面向对象系统中,应该尽量遵循封装原则,将实例变量的访问限制在对象内部,通过方法或函数提供对实例变量的访问和修改接口。

总结起来,实例变量与参数传递是两个不同的概念,它们在面向对象编程中有不同的应用场景和争论。在实际开发中,应根据具体情况来决定是否直接传递实例变量,或者通过参数传递。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Java变量】 局部变量、成员变量(类变量实例变量)、方法参数传递机制

局部变量成员变量的区别: 局部变量成员变量的区别: ①声明的位置: 局部变量:方法体{}内,形参,代码块{}中 成员变量:类中方法外 类变量static修饰 实例变量:没有static修饰...实例变量:堆,此内存区域的唯一目的就是存放对象实例,几乎所有对象实例都在这里分配内存。Java虚拟机规范中描述——所有的对象实例以及数组都要在堆上分配。...类变量:方法区,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 ④作用域: 局部变量:从声明处开始,到所属的}结束。 实例变量:在当前类中“this.”...实例变量:随着对象的创建而初始化,随着对象的被回收而消亡,每个对象的实例变量都是独立的。 ---- 2....方法的参数传递机制 方法的参数传递机制(实参给形参赋值): ①实参是基本数据类型 传递数据值 ②实参是引用数据类型 传递地址值 特殊的类型:String、包装类等对象不可变性(不做修改只做新增

19030

java中静态变量实例变量何区别

静态变量 静态变量用 static字符修饰,随着类的加载而加载,静态变量存放在方法池中的静态区,可以直接通过"类名.变量名直接"调用,也可以通过类的对象调用。...实例变量 实例变量相当于该类的属性,需要 "new对象 "才能被调用。而且该变量不常驻内存,当这个类不再被使用时会java回收机制所释放。...---- 实例变量静态变量区别 1.存储区域不同:静态变量存储在静态存储区域,实例变量存储在堆中,会被释放。 2.静态变量类相关,实例变量对象相关。...3.生命周期不同,静态变量在类启动时就分配指定内存;实例变量在被对象调用后才分配内存,调用结束时内存释放。 本文共 223 个字数,平均阅读时长 ≈ 1分钟

43420
  • 静态变量 静态对象 静态函数和非静态函数的区别。(我的理解,大家看看对不对)

    ,也没有什么争论。...争论最大的是静态函数这一块。 1、静态变量。在内存里是应该只有一份,不管是不是多线程,是不是多用户同时访问,静态变量只占用一份内存。 2、静态对象和静态变量也差不多,只有一份。...类的属性、函数的参数、返回值,这些应该是在实例化的时候产生一份,供调用者单独使用,其他的调用者是绝对访问不了的。 那么函数(或者说是类)呢?也又生成了一份?还没有弄清楚。...4、静态函数,直接调用不需要实例化,也没有“属性” 没有实例化,函数是一份的,多少人调用,都是这一份。那么函数用的参数和返回值呢?也是只有一份?...当然函数内定义的变量、对象也应该是独立的(多份),一个调用的就产生一份。 小结 静态函数和非静态函数最大的区别是,静态的不能访问所在类的属性和内的私有变量,其他的好像都一样了。

    1.8K50

    java定义全局变量的方法_java调用另一个类的变量

    “java中全局变量应该放哪儿? ”引发的争论 1、单独写一个final的类,在里面定义final static的全局变量,在其它程序里包含进来就可以了。...4、那JAVA提供FINAL STATIC 干吗用啊,存在即合理,很多情况是需要用到全局变量的。他能减少参数传递,能避免重复声明。...这不正是我们所需要的?不过还是要强调一定要真正理解JAVA当初出现的初衷就是为了安全性和跨平台性。 去掉了类似C,C++中的全局变量的概念,就是基于此的。 8、了全局变量安全性就差了。...其次,阁下提到的有关于“全虚拟机只有一份,数据库连接池对象…”是设计模式中所谓单例模式的实际应用,该模式确实非常像所谓的全局变量的概念,但设计这样单个实例确实是因为在系统的整个生命周期中只需要一份该实例存在的缘故...12、static 变量可以使用,不要认为程序中出现了static成员或方法就是程序写的不好,用不用静态成员程序写的好坏没有直接的因果关系,不要钻牛角尖。

    2.6K20

    面试题集锦

    答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建 的对象放在堆空间;程序中的字面量(literal)如直接书写的100...String str = new String("china"); 上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上而"hello"这个字面量放在静态区。 ?...第二道,好经典的题,为此跟不少人争论过 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。...Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数传递到方法中时,参数的值就是对该对象的引用。对象的 属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。...第三道 short s1 = 1; s1 = s1 + 1;有错?short s1 = 1; s1 += 1;有错?

    44041

    浅谈函数式编程

    这时数据函数是松耦合的。正是这样的特点让我们实现了“万变不离其宗”。这也是一种另类的函数式编程。 3. 面向对象和函数式编程冲突? 面向对象一直处于我能操作什么数据、这种数据我该怎么操作的范式中。...争论是面向对象好还是面向函数好跟争论哪门语言好一样都是非常极端的。对于面向对象来讲:存在的并不一定都是对象,函数就是对象;对于函数式编程来说:存在的并不总是纯粹的,副作用总是真实存在的。...可以作为参数传递、从函数里返回、可以赋值给变量。 带有闭包的 Lambda 表达式和匿名函数,这是广泛的多态。 不变性,大部分无态处理,在函数式程序中,变量是通过外部传入或者申明获得值的。...变量不能被改变 基于不可变进而可以无副作用的调用。 通过 tail call 实现递归的性能优化。 提供动态的、可组合的开发思路。 5....兴趣的同学可以学习下。

    60320

    如何对第一个Vue.js组件进行单元测试 (下)

    我们首先需要使用shallowMount手动挂载我们的组件,并将其存储在我们将执行断言的变量中。我们还可以通过propsData属性传递道具作为对象。        ...expect函数还返回一个对象,我们可以在其上调用方法来测试传递的值。这些方法称为匹配器。在这里,我们使用toEqual匹配器并将其作为参数传递给期望值。...Vue实例一个指令方法,它接受两个参数- 一个名称,以及在DOM中注入时组件生命周期的钩子函数。如果您不关心特定的钩子,也可以传递单个函数。        ...我们将在我们的指令中导出我们想要传递的函数。        一个指令钩子可以带几个参数,在我们的例子中,我们只需要前两个:el和binding。el参数引用指令绑定的元素。...因此,在决定是否应该使用已有的选择器或设置v-test指令时,请问自己一个问题:我在测试什么,并且使用此选择器对业务逻辑透视图有意义? 它与功能或端到端测试何不同?

    3.3K00

    .NET面试题解析(01)-值类型引用类型

    它们有性能上的区别? 6.“结构”对象可能分配在堆上?什么情况下会发生,什么需要注意的? 7. 理解参数按值传递?以及按引用传递? 8. out 和 ref 的区别相同点? 9....对象的传递 将值类型的变量赋值给另一个变量(或者作为参数传递),会执行一次值复制。...对于引用类型(User user) :传递的是变量user的引用地址(User对象实例的内存地址)拷贝副本,因此他们操作都是同一个User对象实例。...“结构”对象可能分配在堆上?什么情况下会发生,什么需要注意的?...按引用传递:通过关键字out和ref传递参数的内存地址,值类型和引用类型的效果是相同的。 8. out 和 ref的区别相同点?

    80020

    【面试必备】Swift 面试题及其答案

    ---- 答案:一直都有这样的争论:到底是用类的做法优于用结构体,还是用结构体的做法优于类。函数式编程倾向于值类型,面向对象编程更喜欢类。 在 Swift 中,类和结构体许多不同的特性。...常见的一种情况是,你一个函数,它带有一个参数参数类型是 A,然而当参数类型改变成B的时候,你不得不复制这个函数。...上面的代码达到预想的结果,并且防止了传递不同类型的参数。 问题4- 哪些情况下你不得不使用隐式拆包?...2、解决强引用的循环问题——当两个实例对象相互引用,并且对引用的实例对象的值要求不能为 nil 时候。在这种情况下,引用的一方可以标记为 unowned,另一方使用隐式拆包。...问题5- 对一个 optional 变量拆包多少种方法? ---- 对一个 optional 变量拆包多少种方法?并在安全方面进行评价。 答案: 强制拆包 !

    6.2K30

    2020年最新版Java面试题大全(文末附参考答案)

    抽象类能使用 final 修饰? 创建一个对象用什么关键字?对象实例对象引用何不同? ④....变量方法 成员变量局部变量的区别有哪些 在Java中定义一个不做事且没有参数的构造方法的作用 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? 一个类的构造方法的作用是什么?...构造方法哪些特性? 静态变量实例变量区别 静态变量普通变量区别 静态方法和实例方法何不同? 在一个静态方法内调用一个非静态成员为什么是非法的? 什么是方法的返回值?返回值的作用是什么? ⑤....值传递 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 为什么 Java 中只有值传递传递和引用传递什么区别 ⑨....包装类相关 自动装箱拆箱 int 和 Integer 什么区别 Integer a= 127 Integer b = 127相等 8、常用工具类库 9、单元测试 10、日志 二、Java异常面试题

    41950

    【面试必备】Swift 面试题及其答案

    答案:一直都有这样的争论:到底是用类的做法优于用结构体,还是用结构体的做法优于类。函数式编程倾向于值类型,面向对象编程更喜欢类。 在Swift 中,类和结构体许多不同的特性。...常见的一种情况是,你一个函数,它带有一个参数参数类型是A,然而当参数类型改变成B的时候,你不得不复制这个函数。...上面的代码达到预想的结果,并且防止了传递不同类型的参数。 问题4- Swift 1.0 or later 哪些情况下你不得不使用隐式拆包?说明原因。...问题5- Swift 1.0 or later 对一个optional变量拆包多少种方法?并在安全方面进行评价。 答案:   强制拆包 !...Swift 1.0 or later 在Objective-C中,一个常量可以这样定义: const int number = 0; 类似的Swift是这样定义的: let number = 0 两者之间什么不同

    2.8K20

    2022 最新整理的 Java 基础面试题(最新版 Java 面试宝典)

    30 怎么理解值传递和引用传递?31 Java 到底是值传递还是引用传递?32 Java 中的注释哪些写法?33 Java 中的构造方法是什么?...72 String byte[] 之间如何转换?73 String.trim() 方法什么用?74 字符串分割哪些方式?...78 Java 中的 main 方法什么用?79 怎么向 main 方法传递参数?80 不用 main 方法如何运行一个类?81 Java 所有类的祖先类是哪个?...86 静态变量实例变量什么区别?87 内部类可以访问其外部类的成员?88 接口和抽象类什么区别?89 抽象类必须要有抽象方法?...90 抽象类能使用 final 修饰?91 抽象类是否可以继承具体类?92 抽象类是否可以实现接口?93 如何判断一个对象是某类、接口的实例

    92420

    再探Java内存分配

    ---- Java调用方法时的参数传递机制 在调用Java方法传递参数的时候,到底是传值还是传引用呢?面对众多的争论,我们还是来瞅瞅代码,毕竟代码不会说谎。...这就是Java中调用方法时的传值机制——值传递。 嗯哼,刚才这个例子是关于基本类型的参数传递。Java对于引用类型的参数传递一样采用了值传递的方式。我们在刚才的示例中稍加改造。...在main( )中调用swapData( )方法传入dataObject作为参数时仍然传递的是值,只不过稍微特殊点的是:该值指向了堆中的实例对象。...好了,再结合栈帧来梳理一遍:main( )方法存在于之对应的栈帧中,在该栈帧中有一个变量dataObject它指向了堆内存中的真正的实例对象。...swapData( )收到main( )传递过来的变量dataObject时将其存放于其本身对应的栈帧中,但是该变量依然指向堆内存中的真正的实例对象。

    60710

    Redis分布式锁到底安全

    例如下面这些问题,你能清晰地回答上来? 基于 Redis 如何实现一个分布式锁? Redis 分布式锁真的安全? Redis 的 Redlock 什么问题?一定安全?...业界争论 Redlock,到底在争论什么?哪种观点是对的? 分布式锁到底用 Redis 还是 Zookeeper? 实现一个「容错性」的分布式锁,都需要考虑哪些问题?...分布式锁相对应的是「单机锁」,我们在写多线程程序时,避免同时操作一个共享变量产生数据问题,通常会使用一把锁来「互斥」,以保证共享变量的正确性,其使用范围是在「同一个进程」中。...但这样真的没问题? 还是问题。 现在的操作,加锁、设置过期是 2 条命令,有没有可能只执行了第一条,第二条却「来不及」执行的情况发生呢?...什么更好的解决方案? 别急,关于这个问题,我会在后面详细来讲对应的解决方案。 我们继续来看第二个问题。 第二个问题在于,一个客户端释放了其它客户端持有的锁。 想一下,导致这个问题的关键点在哪?

    78020

    Java的参数传递是「按值传递」还是「按引用传递」?

    [在这里插入图片描述] 很多面试者是这样理解的: 如果传递类型为基础数据类型,则按值传递, 如果传递类型为类,则按引用传递。 这样的理解正确?...首先,我们应该了解按值传递或按引用传递的含义。 按值传递:将方法参数值复制到另一个变量,然后传递复制的对象,将其称为按值传递。...当一个实例对象作为参数传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法内改变,但对象的引用(不是引用的副本) 是永远不会改变的。...当执行到change(p1);代码时,person作为参数传递给change()方法,需要注意的是:person将自己存储单元的内容传递给了change()方法的p2变量!...如果传递的是副本那不应该修改不了女朋友的年龄? 如果我们将女朋友中的代码放到内存示例图中走一遍,你应该就明白其中的道理了。

    2.5K30

    每天一道 python 面试题 - Python中的元类(metaclass) 详细版本

    但是,它仍然是一个对象,因此: 您可以将其分配给变量 你可以复制它 您可以为其添加属性 您可以将其作为函数参数传递 例如: >>> print(ObjectCreator) # you can print...但是,Python中的大多数事情一样,它为您提供了一种手动进行操作的方法。 还记得功能type?...type可以将类的描述作为参数,并返回一个类。 (我知道,根据传递给它的参数,同一个函数可以两种完全不同的用法是很愚蠢的。...在python 3中添加到元类的一件事是,您还可以将属性作为关键字参数传递给元类,如下所示: class Foo(object, metaclass=something, kwarg1=value1,...它没有什么特别的:new始终将其定义的类作为第一个参数。就像您有self将实例作为第一个参数接收的普通方法一样,还是为类方法定义了类。 但这不是适当的OOP。

    59000

    c#基础系列3---深入理解ref 和out

    应用场景 out 修饰函数参数,以传递引用的方式向函数传递参数。 out 关键字也可泛型类型参数结合使用,以指定该类型参数是协变参数 ref 修饰函数参数,以传递引用的方式向函数传递参数。...这其实也证实了“ref用于输入,out用于输出”的说法是一点道理的,但是不是完全正确,难道我ref不能用于方法的输出?...其他 ref和out修饰引用类型参数 有的同学会问,引用类型参数本来不就是以引用方式传递,在加ref或者out标记什么意义?...ref和out修饰值类型参数 为值类型参数指定ref或者out,效果等同于以传值的方式传递引用类型,也就是说指向类型实例的指针是复制操作,实例的值并没有发生复制操作。...有人说ref或者out 修饰的引用类型参数传递时候,指向类型实例的指针并不发生copy操作,也就是说调用方法之前和方法体中的指针的指针是一个,目前本人学疏才浅并不这么认为,是否大神可以留言指点一二?

    93210

    每天一道 python 面试题 - Python中的元类(metaclass) 详细版本

    但是,它仍然是一个对象,因此: 您可以将其分配给变量 你可以复制它 您可以为其添加属性 您可以将其作为函数参数传递 例如: >>> print(ObjectCreator) # you can print...但是,Python中的大多数事情一样,它为您提供了一种手动进行操作的方法。 还记得功能type?...type可以将类的描述作为参数,并返回一个类。 (我知道,根据传递给它的参数,同一个函数可以两种完全不同的用法是很愚蠢的。...在python 3中添加到元类的一件事是,您还可以将属性作为关键字参数传递给元类,如下所示: class Foo(object, metaclass=something, kwarg1=value1,...它没有什么特别的:__new__始终将其定义的类作为第一个参数。就像您有self将实例作为第一个参数接收的普通方法一样,还是为类方法定义了类。 但这不是适当的OOP。

    41710

    js中的值类型和引用类型的区别

    js中的值类型和引用类型的区别 1.JavaScript中的变量类型哪些?...2、保存复制的是指向对象的一个指针 3、使用instanceof检测数据类型 4、使用new()方法构造出的对象是引用型 实例: // 值类型:Number、string、bollean、undefined...(3)传递参数:在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(即命名参数,或者用ECMAScript 的概念来说,就是 arguments 对象中的一个元素)。...在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。...参数num 变量 count 互不相识,它们仅仅是具有相同的值。

    3.5K20

    聊聊Java里面的引用传递

    长久以来,在Java语言里面一直一个争论,就是Java语言到底是值传递(pass-by-value)还是引用传递(pass-by-reference),有的人说是值传递,有的人说是引用传递,两边各执一词...,从而误导了很多开发者,更有甚者告诉开发者说不必纠结Java到底是值传递还是引用传递,只要能用就行了,但事实真的是这样?...到这里,我相信一部分读者可能已经接受不了,因为在Java里面大多数时候,我们都是讲基本类型,引用类型,从没听过什么指针的概念。...对于已经实例化的对象,如果我们没有重写toString方法,打印指针会得到一串类名组合+内存地址转换的十六进制字符串。...真的是这样

    73510

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券