`
java_fei
  • 浏览: 21166 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

谈谈static

 
阅读更多

对于static你到底理解了多少

               曾今我对static非常难以理解,因为我有一个同事把所有的的类方法都加了static,上层调用只需直接类名加方法名就OK了,如果有幸看到这文章,你可以去看下你的程序应该也可以用这种方式去做(一般使用spring ioc)的话基本都可以。为什么,当初我就想,为什么大家宁愿去new一个对象去调用下层代码,而不愿意去加static更方便调用。现在工作两年过去了,我终于知道了结果。归根结底,java是面向对象编程而不是面向过程。对于static的理解你到下面那一层了呢?

 

            理解一

                      对于方法:加了static那么方法就变成了类的静态方法,可以用 (类名.方法)  来实现调用。

                      对于变量:加了static那么变量就变成了类的成员变量。可以用  类名.变量)来实现调用。

 

            理解二

                      对于方法:加了static和不加static都是存放在内存的方法区,无论你是否使用了static对于内存

                                        而言没有任何变化,除非当类被释放,也就是jvm full gc回收。

                      对于变量:没加static每次new一个对象都会开辟内存来存放数据,加了static无论你new多少个

                                        对象永远只会有一块区域来共享它

 

            理解三

                      既然方法加了static对于内存没有什么区别,而加static之后调用如此方便,还不需要new对

                      象。那么为什么我们经常使用的是:A a=new A(); a.doSome();这种形式而是不是做成

                       A.doSome()呢。(前提没有成员变量)。

                      原因:一:面向对象思想,当你把方法变成static之后,你A类的子类将无法覆盖其父类的

                                       doSome方法。

                                 二:你无法再将doSome方法中的一些变量,变成只属于该对象的变量。比如一个类里

                                         面都有个a变量,如果你三个方法都是static的话,你三个方法都需要传递a参数。

                                          让你的代码越加复杂

             

             理解四

                      那么我们每次都要去调用这个方法都要new一个对象,这样会对jvm回收会加剧,写起来很麻

                      烦,创建和销毁对象是很消耗cpu的,那么就有了设计模式-单例模式。

 

             理解五

                      为什么很多公司都使用spring ioc的模式,因为他解决以下几个问题,你不用每次都去为类

                      创建一个个单例对象(static带来的方便),第二它又非常容易扩展(面向对象的优点)。所以我上

                      文提到使用 spring ioc基本都可以把方法变成static来供上层调用。所以我对ioc的理解为:它为

                      我们节省了自己去创建单例的时间,并且让我们以面向对象的思想来调用和扩展代码。

 

当然对于一些不需要扩展或者变更不大的比如util类 它就非常适合使用static。面向对象让整个程序看起来更加合理,更加方便,更加容易理解。

 
分享到:
评论

相关推荐

    浅析对Java关键字final和static的理解

    本文主要给大家谈谈小编对java关键字final和static的理解,本文给大家介绍的较详细,需要的朋友参考参考下

    谈谈网吧路由器怎样设置的

    下面我们就来谈谈网吧路由器怎样设置。  网吧路是有网络供应商供应一条宽带光缆,这条光缆的带宽比家用的宽,速度要快。光缆经过光收发器接入路由器,路由器下面可以再接数个交换机,普通一台交换机有24个口,个中...

    JAVA程序员32问

    第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的...

    谈谈Android里的Context的使用

    public static void showToast(Context context,String msg){ Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } /** * 调用全局的Context. * @param msg */ public static void ...

    java程序员必知的

    第一,谈谈final, finally, finalize的区别。  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是 Object类的一个方法...

    java面试笔试题大汇总+很全面.txt

    一,谈谈final, finally, finalize的区别。  最常被问到。   第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?   第三,Static Nested ...

    java整理试题

    第一,谈谈final, finally, finalize的区别。 最常被问到。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 ...

    Java面试经典试题及答案.doc

    第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的...

    谈谈C++中的单例

    static Foo* _instance; Foo() {} // other members public: static Foo* getInstance() { if (_instance == NULL) { _instance = new Foo(); } return _instance; } ~Foo() { // cl

    java编程常见面试题目

    第一,谈谈final, finally, finalize的区别。   第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?  第三,Static ...

    Java面试32问

    第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,static Nested Class 和 ...

    简单谈谈php延迟静态绑定

    public static function create(){ return new aClass(); } } class bClass extends base{ public static function create(){ return new bClass(); } } var_dump(aClass::create()); var_dump(bClass::create...

    谈谈对Android View事件分发机制的理解

    然后google到了解决办法(重写Button,然后重写其中的ontouchEvent方法,且返回值为false),但是不知道原因,这两天看了几位大神的博客,然后自己总结下。... private final static String TAG = MyButton::zjt; p

    变态JAVA程序员面试32问

    经典JAVA面试问题与答案 第一,谈谈 final,finally,finalize的区别。 第二,AnonymousInnerClass(匿名内部类)是否可以 extends(继承)其它类,是否可以implements(实 现)interface(接口)? 第三,Static...

    Java程序员面试题及解答

    第一,谈谈final, finally, finalize的区别。  第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?  第三,Static Nested Class 和 ...

    JAVA程序员面试32问,你能回答多少题

    谈谈final, finally, finalize的区别 Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)

    java面试题

    第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和...

    谈谈你对css中position五个属性的理解

    static : 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 fixed :生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 ...

    java程序员面试必备的32个要点

    第一,谈谈final, finally, finalize的区别。 第三,Static Nested Class 和 Inner Class的不同第四,&和&&的区别。 五,HashMap和Hashtable的区别。 六,Collection 和 Collections的区别 七,什么时候用assert 八...

    谈谈Java中遍历Map的几种方法

    java中的map遍历有多种方法,从早...  public static Map<Integer> map = new HashMap();  }  keySet values  如果只需要map的key或者value,用map的keySet或values方法无疑是方便的  // KeySet 获取key  pu

Global site tag (gtag.js) - Google Analytics