黑马程序员_java静态的使用

来源:互联网 发布:百旺税控软件 编辑:程序博客网 时间:2024/06/16 03:54

                    ------- android培训java培训、期待与您交流! ----------

 

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

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

                         2, 静态变量也成为类变量,随着类的加载而加载  。

                         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);
              }
             }

   

原创粉丝点击