这里的普通方法和成员变量是指,非静态方法和非静态成员变量
首先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,本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。

java static成员变量方法和非static成员变量方法的区别的更多相关文章

  1. java static成员变量方法和非static成员变量方法的区别 ( 二 )

    原创文章,未经作者允许,禁止转载!!! 静态成员变量不用new对象,在类加载的过程中就已经初始化存放在数据区域,静态成员变量是类和所有对象共有的,类和对象都可以改变它的值,每一次改变值之后,静态成员变 ...

  2. java——多线程——单例模式的static方法和非static方法是否是线程安全的?

    单例模式的static方法和非static方法是否是线程安全的? 答案是:单例模式的static方法和非static方法是否是线程安全的,与单例模式无关.也就说,如果static方法或者非static ...

  3. Java中synchronized 修饰在static方法和非static方法的区别

    [问题描述]关于Java中synchronized 用在实例方法和对象方法上面的区别 [问题分析]大家都知道,在Java中,synchronized 是用来表示同步的,我们可以synchronized ...

  4. synchronized 修饰在 static方法和非static方法的区别

    Java中synchronized用在静态方法和非静态方法上面的区别 在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法.也可以synchroniz ...

  5. static方法和非static方法的区别

    ●生命周期(Lifecycle):静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭. ...

  6. Java基础系列-equals方法和hashCode方法

    原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述         equals方法和hashCode方法都是有Object类定义的. publi ...

  7. DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法

    原文:DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...

  8. Java提高篇——equals()方法和“==”运算符

    equals() 超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: public boolean equals(Object obj) { retu ...

  9. java 中的set方法和get方法的理解

    get的意思是获取,set的意思是设置. get方法和set方法是实现类的封装访问的很好的工具. 当类中的变量设为private 时,他的意思就是说,只能通过自身和子类的访问,但是对于别的其他的类来说 ...

随机推荐

  1. 关于截取字符串substr和substring两者的区别

    https://blog.csdn.net/adley_function/article/details/52130762 substr和substring两个都是截取字符串的. 两者有相同点,如果只 ...

  2. Extjs学习笔记--(四,基本函数介绍)

    Ext是Extjs的命名空间,为Extjs框架提供唯一的全局变量 这样做可以避免冲突,便于代码维护 1,apply和applyif方法 apply=function(object, config, d ...

  3. python远程登录服务器(paramiko模块安装和使用)

    转自:http://www.jb51.net/article/46285.htm 一:简介 由paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器 ...

  4. 使用HTML5 的跨域通信机制进行数据同步

    离线应用系统的设计目标就是在网络离线情况下依然可以操作我们的应用系统,并在网络畅通的情况下与服务器进行数据交互. 所以离线应用系统最终会做成类似C/S架构的客户端应用程序.这边基于Chrome或者 S ...

  5. 深入浅出MFC——Win32程序基本概念(一)

    1. Windows程序分为“程序代码”和“UI资源”,下图所示: 2. Windows支持动态链接(应用程序所调用的Windows API函数是在“执行时期”才链接上的).Windows程序调用的函 ...

  6. php学习十二:其他魔术方法

    __clone():克隆的时候会调用__clone方法: __cal:当类里面没有方法的时候会调用__call方法: __toString:当echo的时候会调用__toString方法: __aut ...

  7. NSFileManager和NSFileHandle(附:获取文件大小 )

    本文转载至:http://www.cnblogs.com/pengyingh/articles/2350345.html 天牛 感谢原创作者的硕果 //file 文件操作 NSFileManager  ...

  8. WIN10 X64下通过TLS实现反调试

    目录(?)[-] TLS技术简介 1 TLS回调函数 2 TLS的数据结构 具体实现及原理 1 VS2015 X64 release下的demo 2 回调函数的具体实现 21 使用IsDebugger ...

  9. synchronized将任意对象作为对象监视器

    多个线程调用同一个对象中的不同名称的synchronized同步方法或synchronized(this)同步代码块时,调用的效果就是按顺序执行,也就是同步的,阻塞的.这说明synchronized同 ...

  10. 微信Android热补丁实践演进之路

    版权声明:本文由张绍文原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/81 来源:腾云阁 https://www.qclou ...