• java static成员变量方法和非static成员变量方法的区别


    这里的普通方法和成员变量是指,非静态方法和非静态成员变量
    首先static是静态的意思,是修饰符,可以被用来修饰变量或者方法。

    static成员变量有全局变量的作用       非static成员变量则没有全局变量的作用        局部变量是类的方法里面的变量
    静态static成员变量是指类的成员变量,他不属于类的对象,只单独属于类,被所有对象共享。当在类中改变他的值时,他在每个对象里面的值都会随之改变。

    这也就是说在对象中不能改变他的值,只能在他所在的类中改变,如果他带有final的话(static final)就表明这是一个常量。
    static变量是静态变量,当加载类时即已加载,非static变量实例对象时加载。

    static变量是静态变量当改变其中的值,其它实例中的该static变量也会改变,非static变量只会在具体所在的那个对象中改变,不会影响其它实例。


    例子: static int i=1; 这里的i就是一个静态变量。具体特性如下

    静态成员变量与普通成员变量

    • 内存分配
      静态静态,就是当类被加载时,这个内存就静静的待在这里,就已经存在,而普通成员变量,只有类被实例化时才分配内存。
    • 调用方法
      成员变量需要对象才能被调用;而静态成员变量可以直接通过类来调用,当然也可以直接调用
      PS:小小疑问为什么可以直接调用,我看一些参考书上只说可以通过类来调用?
        public class demo {
         static int i=10;
        public static void main(String[] args){
        int k=i;//直接调用
        int j=demo.i;//通过类来调用
        System.out.println("直接调用k:"+k);
        System.out.println("通过类来调用j:"+j);        
        }
        }
    • 生命周期
      静态成员变量从类被加载开始到类被卸载,一直存在;普通成员变量只要在类被实例化也就是创建对象是才开始存在,一直到对象结束,生命也告终。
    • 共享方式
      静态成员变量是全类共享的,即使不是对象,也可以调用,并且内存不变;普通成员变量是每个对象单独享用的,就是说你这个对象有一个int i=1,我再给该类创建一个新的对象,他也有一个int i,但他可以不等于1,可以等于5,也可以等于10,但无论等于多少,都不会影响之前对象的i的值,而静态成员变量不是这样。

      静态方法与普通方法

      我们一直用的main方法就是静态方法
      在此我只讨论一下调用的问题
    • 静态方法中不可直接调用非静态方法,但是非静态方法中,可以直接调用静态的。
    • 静态方法可以调用静态成员变量,调用普通成员变量时需创建对象;非静态方法可以随意调用静态成员变量或普通成员变量。
    • 静态方法和普通方法调用特性同上,静态调用普通方法时需创建对象,而普通方法随意。

     

    静态方法的使用情况

    是在类中执行该方法时,该方法并不对成员变量有任何操作,也就是说该静态方法的操作不针对对象,只针对该类时,使用。那么使用该类也就不需要创建对象,而可以直接通过类名.方法名实现。


    工具类.png
     
     
     

    类修饰符:

    public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。

    abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。

    final,将一个类生命为最终(即非继承类),表示他不能被其他类继承。

    friendly,默认的修饰符,只有在相同包中的对象才能使用这样的类。

      

    成员变量修饰符:

    public(公共访问控制符),指定该变量为公共的,他可以被任何对象的方法访问。

    private(私有访问控制符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。

    protected(保护访问控制符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。

    friendly ,在同一个包中的类可以访问,其他包中的类不能访问。

    final,最终修饰符,指定此变量的值不能变。

    static(静态修饰符)指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。

    transient(过度修饰符)指定该变量是系统保留,暂无特别作用的临时性变量。

    volatile(易失修饰符)指定该变量可以同时被几个线程控制和修改。

      

    方法修饰符

    public(公共控制符)

    private(私有控制符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)

    protected(保护访问控制符)指定该方法可以被它的类和子类进行访问。

    final,指定该方法不能被重载。

    static,指定不需要实例化就可以激活的一个方法。

    synchronize,同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。

    native,本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。

     

  • 相关阅读:
    学习WWDC的好资源!
    运行 CMD 时,參数加引號常见问题
    FileChannel的深入理解
    C#单例模式的三种写法
    Linux 安装Nginx具体图解教程
    计网面试题
    VS:"64位调试操作花费的时间比预期要长"的一解决途径
    中小型WEB系统权限日志数据表设计
    CDN服务上线,DNSPOD布局云端生态圈
    怎样利用ash监控会话
  • 原文地址:https://www.cnblogs.com/111testing/p/6617997.html
Copyright © 2020-2023  润新知