什么是静态?什么是java静态方法中的变量,静态变量,静态块和静态类

二次元同好交流新大陆
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2152)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Java静态对象和非静态对象有什么区别??',
blogAbstract:'Java静态对象和非静态对象有什么区别??静态对象 vs 非静态对象 &&是类共同拥有的 & 是类独立拥有的内存空间上是固定的空间在各个附属类里面分配先分配静态对象的空间后对非静态对象分配空间,即初始化顺序是先静态再非静态关于Java的静态对象、静态方法、静态属性 区别:属性VS参数&参数一般是指在方法里临时新建的数值或对象;属性是类声明部分声明的信息。1、静态对象的数据在程序全局是唯一的,一改都改;如果要处理的东西是整个程序中唯一的,就可以声明成静态对象,类似于C++中的全局变量;另,程序全局范围内,可以有多个某个类的全局变量。但,这并并不是真正的全局变量,static和final共同修饰的成员变量和成员方法,才可简单理解为“全局变量”。a)对于变量,表示一旦给值就不可修改,且程序全局范围内类名可以访问;',
blogTag:'java',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}静态类的原罪 - 博客 - 伯乐在线
& 静态类的原罪
注:本文转自。
黑格尔有句名言:存在即合理。以此为论据的话,静态类的使用必然有其合理性。不过物极必反,一旦代码过于依赖静态类,其劣化的解决则不可避免。这就好比罂粟作为一种草本植物,有其在药理上的价值,但如果肆无忌惮的大量使用,它就变成了毒品。
什么是静态类
所谓静态类指的是无需实例化成对象,直接通过静态方式调用的类。代码如下:
class Math
public static function ceil($value)
return ceil($value);
public static function floor($value)
return floor($value);
此时类所扮演的角色更像是命名空间,这或许是很多人喜欢使用静态类最直接的原因。
静态类的问题
本质上讲,静态类是面向过程的,因为通常它只是机械的把原本面向过程的代码集合到一起,虽然结果是以类的方式存在,但此时的类更像是一件皇帝的新衣,所以可以说静态类实际上是披着面向对象的壳儿,干着面向过程的事儿。
面向对象的设计原则之一:针对接口编程,而不是针对实现编程。这有什么不同?打个比方来说:抛开价格因素,你喜欢独立显卡的电脑还是集成显卡的电脑?我想绝大多数人会选择独立显卡。独立显卡可以看做是针对接口编程,而集成显卡就就可以看做是针对实现编程。如此说来针对实现编程的弊端就跃然纸上了:它丧失了变化的可能性。
下面杜撰一个文章管理系统的例子来具体说明一下:
class Article
public function save()
ArticleDAO::save();
Article实现必要的领域逻辑,然后把数据持久化交给ArticleDAO去做,而ArticleDAO是一个静态类,就好像焊在主板上的集成显卡一样难以改变,假设我们为了测试代码可能需要Mock掉ArticleDAO的实现,但因为调用时使用的是静态类的名字,等同于已经绑定了具体的实现方式,Mock几乎不可能,当然,实际上有一些方法可以实现:
class Article
private static $dao = 'ArticleDAO';
public static funciton setDao($dao)
self::$dao = $
public static function save()
$dao = self::$
$dao::save();
有了变量的介入,可以在运行时设定具体使用哪个静态类:
Article::setDao('MockArticleDAO');
Article::save();
虽然这样的实现方式看似解决了Mock的问题,但是首先它修改的原有的代码,违反了开闭原则,其次它引入了静态变量,而静态变量是共享的状态,有可能会干扰其它代码的执行,所以并不是一个完美的解决方案。
补充说明,利用动态语言的特性,其实可以简单的通过require一个不同的类定义文件来实现Mock,但这样做同样有弊端,设想我们在脚本里需要多次变换实现方式,但实际上我们只有一次require的机会,否则就会出现重复定义的错误。
注:某些情况下,利用也可以提高静态类的可测试性,参考。
对象的价值
如果放弃静态类,转而使用对象,应该如何实现文章管理系统的例子?代码如下:
class Article
public function __construct($dao = null)
if ($dao === null) {
$dao = new ArticleDAO();
$this-&setDao($dao);
public function setDao($dao)
$this-&dao = $
public function save()
$this-&dao-&save();
实际上,这里用到了人们常说的技术,通过构造器或者Setter注入依赖的对象:
$article = new Article(new MockArticleDAO());
$article-&save();
对象有自己的状态,不会发生共享状态干扰其它代码的执行的情况。
当然,静态类有好的一面,比如说很适合实现一些无状态的工具类,但多数时候,我的主观倾向很明确,多用对象,少用静态类,避免系统过早的固化。顺便说一句,希望别有人告诉我静态类比对象快之类的说教,谢谢。
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线博客团队正试图以我们微薄的力量,把优秀的原创/译文分享给读者,做一个小而精的精选博客,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2016 伯乐在线
赞助云主机

我要回帖

更多关于 静态方法中的变量 的文章

 

随机推荐