zoukankan      html  css  js  c++  java
  • 详解java中staitc关键字

    一、static定义

      static是静态修饰符意思,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?
    在Java程序里面,万物皆对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的。

    static声明的静态变量可以直接通过类名调用!

     1 class Demo{
     2     public static void main(String[] args)
     3     {
     4         Person p = new Person();
     5         System.out.println(p.country);        //1、新建对象调用
     6         System.out.println(Person.country); //2、通过类名直接调用
     7     }
     8 }
     9 class Person{
    10     static String country = "china";
    11 }

    二、static特点

    由此我们得出static的特点。

    a、static是一个修饰符,用于修饰成员。

    b、static修饰的成员被所有的对象共享。

    c、static优先于对象存在,static成员随着类的加载就已经存在。

    d、static修饰成员多一种调用方式--通过类名调用。

    三、成员变量和静态变量区别?

    1.两个变量的生命周期同

      成员变量随对象创建存在,随对象回收而释放。

      静态变量随类的加载而存在,同样也随着类而消失。

    2、调用方式

      成员变量只能被对象调用。

      静态变量能被对象调用,还可以被类名调用。

    3、内存中存储位置不同。

      成员变量存储在堆内存中。

      静态变量存储在方法区(共享数据区)的静态区。

    四、静态使用注意事项

    1、静态方法只能访问静态成员。

    2、静态方法中不可以用this或super关键字。

    3、主函数都是静态的。

    class Demo{
        public static void main(String[] args)
        {
            Person.show();
        }
    }
    class Person{
        static String country = "china";
         String name = "jinfulin";
        public static void show()
        {
            System.out.print(country);    //正确
            //System.out.print(name);    //错误
        }
    }

    五、什么时候使用静态?

    1、静态成员

      分析对象中所有的成员变量的值都是相同的。

    2、静态函数

      不需要初始化就能直接访问(该函数没有访问到类的特有数据)。

      还是上面那个人的例子,下面这个show方法没有调用特有数据,所以定义成静态的更好。

    class Demo{
        public static void main(String[] args)
        {
            Person.show();
        }
    }
    class Person{
        static String country = "china";
        String name = "jinfulin";
        public static void show()
        {
            System.out.print("哈哈~");
        }
    }

    六、特殊用法--静态代码块

    随着类的加载而执行,而且只执行一次。

    作用:用于类的初始化。

    class Demo{
        public static void main(String[] args)
        {
            new Person().show();
            new Person().show();
        }
    }
    class Person{
        static
        {
            System.out.println("haha....");
        }
        void show()
        {
            System.out.println("哈哈~");
        }
    }

    如上:结果为一次haha,两次哈哈

    ps:在执行顺序上,静态代码块>构造代码块>构造函数

    最后,以上就是java中static的用法,static不仅上编程时候难理解的地方,也是面试爱考的地方,以后我们的学习必定要更加的细化,不仅要明白如何做出,还要知道如何做好。

  • 相关阅读:
    LeetCode(111) Minimum Depth of Binary Tree
    LeetCode(108) Convert Sorted Array to Binary Search Tree
    LeetCode(106) Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode(105) Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode(99) Recover Binary Search Tree
    【Android】通过经纬度查询城市信息
    【Android】自定义View
    【OpenStack Cinder】Cinder安装时遇到的一些坑
    【积淀】半夜突然有点想法
    【Android】 HttpClient 发送REST请求
  • 原文地址:https://www.cnblogs.com/jinfulin/p/4089647.html
Copyright © 2011-2022 走看看