黑马程序员技术交流社区
标题:
static和getter&setter的比较问题
[打印本页]
作者:
李春阳
时间:
2012-6-1 14:43
标题:
static和getter&setter的比较问题
听课的时候,注意到某类(如A)中,当成员变量(如a)用static修饰的时候,其他类中即可不必NEW对象就可以调用。
格式为:A.a
之后在练习中发现一个小方法,即大家都所知的getter and setter,其中用get可以获取目标,set可以设置。(eclipse中可直接alt+shift+s再选getter and setter方法进行设置)。
我发现这俩方法貌似功能很相近:当你在某一类中,想调用其他类中某成员变量时,这俩方法似乎都可以解决。
小弟学的不是太深,因而想询问下,二者方法的区别优劣,以及何时用更适合。
作者:
闾丘日月
时间:
2012-6-1 19:01
这个问题。我表示我水平不够无法回答你,我可以说说我个人的理解,lz且听,错了的话也请别见怪。
我理解的是对象这个东西的出现是为了我们在编程的时候能够更加的方便,更加的贴近人类的思考方式而出现的,那么我们是在遇到一个具体问题的时候,通过对象的思想来考虑问题会方便一点,而不是我预先定义好一些对象,然后再去利用这些对象,当然那些库函数不一样,那些东西我的理解是它其实就是sun公司,或者是其它的什么公司对现实世界的一种抽象,和生物科学家将各种动植物分类分科没什么两样,库的作用让我们能碰到现实的事物时,更容易描述它,但是sun公司抽象出啦的东西毕竟是有限的,我们实际生活中碰到的事物可能会不一样,比如说突然有天我家公鸡下蛋了,人家sun公司可能就只提供了母鸡下蛋的方法。
再来说说static 和 get set方法,一个是静态的,一个是动态的,静态是类变量,动态是对象变量,那么涉及到具体的属性而言,我们就需要分析这个属性到底是个什么样的状态,是所有的事物都具有同样的属性值吗?比如对于我而言,我就觉得所有的肉都是一样的,都好吃,那么我可能就会将肉的味道这个属性定义成静态的,初始化值为好吃
但是有些人只喜欢吃特定的肉,他来看这个问题的时候他就觉得肉的味道这个属性应该定义成动态的,再创建肉对象的时候再决定这肉好不好吃。猪肉呢就好吃,牛肉呢就难吃等等。。
那么我的观点也就基本能出来了,我觉得这两者不存在方法上的优劣,有的只是观念上的差异,lz完全可以自由选择一种方法,来展现自己的个性,当然,不是特别的情况,建议楼主用getset 方法,当然如果lz在学习中觉得这个麻烦的话,完全可以将所有属性和方法都定义成静态,反正我写代码的时候现在只考虑功能,所有方法都是静态,这样在主函数中调用的时候不用new对象就可以直接用我觉得这样挺爽。
说了这么多,我不敢保证我说的对,因为我水平也有限,希望楼主看在我码字这么多的情况下,如果我有什么根本性的让你误解的地方以后楼主层次高的时候别怪我就好了。我就是想发表一下自己的看法。
作者:
李海晓
时间:
2012-6-7 16:10
大概能知道你在问什么,一个苹果类,Apple,有一个toString();方法,如果这个类是静态的,那么他在程序的运行开始,就在内存中分配空间,那么可以直接调用它的toString()方法,Apple.toString();
如果他不是静态的,也就是没有用static修饰,那么,那就没有在内存中分配空间,所以要现实例化,让他有自己的空间。Apple a=new Apple(); 然后再调用它的toString()方法。a.toString();
而get、set方法是让其他类取值或复制的时候用的。把一个类中的成员变量变成似有的是为了安全,可其他类也不能对他读取和赋值,所以就用到get和set方法了
作者:
何拴绪
时间:
2012-6-7 18:09
成员变量定义为static 后会被共享,而且生存周期很长,占用内存,你将成员变量私有化,然后提供set 和get方法,供外部来访问你的私有成员变量,这样比较安全。
作者:
朝哥
时间:
2012-6-7 21:16
一句话:
你用类名.成员变量的话,能设置变量值吗?显然不能。
set get就可以。
他们俩的最大的区别就是前者调用比较多,后者设置值比较多。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2