一. 静态:关键字(static),用于修饰修饰成员(成员变量,成员函数);

二. 静态特点:1,独立于堆内存,都放在共享区内被所有对象所共享,可以直接被类名调用。  

随着类的加载而加载

                         3,生命周期比较长,他是优于对象的存在,成员变量随着对象的存在而存在,而类变量随着类的存

                           在而存在。

   使用注意事项:1,静态是优于对象的存在,所以它不能访问对象的成员,只能访问静态成员

                             2,非静态成员可以访问静态成员

                             3,静态方法中不可以有this ,super这样的关键字(原因是静态优于对象的存在)

public class StaticDemo {
    /**
     * @param args
     */
      public static void main(String[] args) {
     // TODO Auto-generated method stub
     Persion p = new Persion();
       p.name = "wangyukun";
       
          p.print();    } 
}
 class Persion 
 {
   String name;
   public static String country ="CN";
   public void print()
   {   System.out.println(Persion.country);
    System.out.println("姓名:"+name+"国籍:"+country);
   }
 }

如代码country是一个固定的国家,名字不肯随便可以改变,而且Persion中的人都要共用一个country,如果每个对象都要给它赋值country的话 太占用堆空间浪费资源。用static修饰后它会独立出来,为对象共同使用,节省资源。用static修饰的成员变量可以用类直接调用如:System.out.println(Persion.country);可以打印出cn来。

三.为什么使用静态呢?

    1,静态可以修饰成员变量和函数

    2,当对象中出现共享数据时用静态修饰(对象的特有元素要用非静态存放于堆中)

         如上代码:country就是共享数据,而name是对象特有的不能修饰静态、

    什么时候修饰静态函数呢?

    1,当功能内没有访问到非静态数据,那么就可以用静态修饰这个函数

     如一下代码print()方法中根本就没有访问到非静态的成员,它就可以使用静态修饰。

public class StaticDemo {
                public static void main(String[] args){
                      Persion p = new Persion();
                      p.print();
                                } 
              }
            class Persion 
            {
                  String name;
                  public void print()
                      {
                            System.out.println("jjjj");
                          }
             }

四.静态的应用

    每一个应用程序中都有共同的特性,可以将这些共性就行抽取,然后封装,以便以后重复使用。

如下代码:把数组取大值封装起来,以后别的数组再去选时候用就直接调用

public class StaticDemo {
           public static void main(String[] args){
           int[] arr = {3,4,1,32,6,89,23,6,5,99,3,42,35};
           ArrayMax am = new ArrayMax();
          am.getMax(arr);
                       } 
            }
          class ArrayMax 
           {
                 public static void getMax(int[] aa)
                        {   int max = aa[0];
                            for(int i=0 ;i<aa.length;i++)
                       {
                                    if(max<aa[i])
                       {
                                    max=aa[i];
                       }
                     }
                  System.out.println(max);
               }
              }