zoukankan      html  css  js  c++  java
  • 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的新特性

    1、以专家为榜样,不必自己重新探索
    2、解构技能,找出实现80%效果的那20%
    3、不要一心二用
    4、练习练习再练习!然后获得即时反馈
    5、坚持,不要在低谷期放弃
  • 相关阅读:
    使用Charles对iPhone进行Http(s)请求拦截(抓包)
    pip 安装 和 卸载 django
    python2.7.5 安装pip
    (Git 学习)Git SSH Key 创建步骤
    git学习四:eclipse使用git提交项目
    我们为什么要使用List和Set(List,Set详解)
    List、Set、Map的区别
    type=hidden
    测试业务分析
    USACO 3.2 kimbits DP
  • 原文地址:https://www.cnblogs.com/zhongyuan/p/4351355.html
Copyright © 2011-2022 走看看