java和php中static+final+synchronized 总结

Static

  一句话:方便在没有创建对象的情况下来进行调用(方法/变量)。

  静态属于类,非静态属于对象。

  另外记住,即使没有显示地声明为static,类的构造器实际上也是静态方法。

  static方法:

    1、静态方法没有this。 

      因为它不依附于任何对象就可以进行访问,既然都没有对象,就谈不上this了。

    2、静态方法中不能访问类的非静态成员变量和非静态成员方法

      静态方法不属于对象,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用

    static不可以调 非静态的,但 非静态的可以调用 静态的。

  static变量:

    静态变量和非静态变量的区别:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。

                  非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

 

  static代码快:

    static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。

 

    在Java中切记:static是不允许用来修饰局部变量。不要问为什么,这是Java语法的规定。但尼玛,php中可以,修饰function中的局部变量

 

Final:

  实际上,所有的private function(),都是隐式的final。即子类都不可调用覆盖。

  final变量: 不可修改。

  final方法:在继承中使用该方法不会被覆盖

  final类:当将类定义为final时,不准继承。即,出于某种考虑,你对该类的设计永不需要做任何变动,或者出于安全的考虑,你不希望他有子类。

 

Synchronized:  //实现多线程顺序执行

  用来修饰function,使得多线程顺序执行该函数,而不是同时执行。

  Java中的每个对象都有一个锁(lock),或者叫做监视器(monitor),当一个线程访问某个对象的synchronized方法时,将该对象上锁其他任何线程都无法再去访问该对象的synchronized方法了(这里是指所有的同步方法,而不仅仅是同一个方法),直到之前的那个线程执行方法完毕后(或者是抛出了异常),才将该对象的锁释放掉,其他线程才有可能再去访问该对象的synchronized方法。

 

 ======================================================================================

 

php中static 全局静态 和 局部静态

  1、局部静态: 

    function 中 声明static变量,虽然不常见,但也有面试题碰到,记住:function中的static变量,属于function,出了function无效,但它一直驻留在内存,再次进入function,static变量仍然有效。可以用来检测function被调用的次数。 //一次加载,驻留内存

  

$count = 5;
function get(){
    static $count = 0; //java中,static不可修饰局部变量,php中可以.
    return $count ++;
}
echo get(); //0 
echo $count; //5
++$count;
echo get();  //1
echo $count; //6

输出是:0 5 1 6

 

  2、全局静态:

    同样,静态属于类,非静态属于对象。对于 static var = 0; 调用 本类中用:self::var,子类中parent::var,其他类中:Class_name::var.

    也是一次加载,驻留内存

 

php中final

  1、final不能修饰成员属性。

  2、final只能修饰类和方法。

  作用:被修饰的类不能被子类继承,被修饰的方法不能被子类覆盖

 

php中const

  1、常量不可以被修改

    const var = “const string”;  //class A中

    A::var   //A类外调用

    self::var //A类内调用

 

    

    

相关链接:

  http://www.cnblogs.com/dolphin0520/p/3799052.html  //讲static比较好

  http://blog.csdn.net/niguang09/article/details/6035813  //final

  http://www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html //synchronized

  http://www.cnblogs.com/xuehong1985/articles/1220954.html  //讲php5的新特性

posted @ 2015-03-19 19:06  zyliang  阅读(595)  评论(0编辑  收藏  举报