由关键字static所定义的变量与方法,分别称为静态变量和静态方法,它们又都被称为静态成员

1.静态方法

  无需本类的对象也可以调用此方法,调用形式为“类名.方法名”,静态方法常常为其他类提供一些方法而被定义。但是静态方法和非静态方法在定义时有两个需要注意的点

  (1)静态方法只能访问静态数据,而非静态方法既能访问静态数据也能访问非静态数据。

  (2)静态方法中只能访问静态方法,而非静态方法既能访问静态方法也能访问非静态方法。

造成原因:

  静态方法会随着类的定义而分配和装载进内存中,而且只被分配了一个内存空间,因此类的实例调是共享这个静态方法的内存的。也是因此,静态方法如果引用了非静态的,它无法从内存中找到非静态的代码段。

2.静态变量

  静态变量与静态方法类似,由于在类被定义和装载时,只分配了一块存储空间,因此所有此类的实例共享该静态变量的内存。进而导致只要一个实例中静态变量发生改变,所有此类的实例所调用的静态变量都会发生改变。

  需要特别注意一点:static定义的变量会优先于任何其他非static变量定义,在static后跟{}并在其中定义变量,那么这些变量会优先static之前的非static变量定义,这种方法称为显式的静态变量初始化,只会在类第一次被装载的时候初始化一次。

额外点:还有用static定义的类,但是这种类只能是一个内部类(即在其他类的内部定义),但是一旦被定义为静态类之后,这个类就能类似于一个普通类搬直接被使用,不需要先实例一个外部类。声明的形式为    外部类名.静态的内部类名  实例名 = new  外部类名.静态的内部类名();

Java中的静态变量、静态方法问题的更多相关文章

  1. java中的静态变量、静态方法与静态代码块详解与初始化顺序

      我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...

  2. Java中的静态变量、静态方法、静态代码块

    转载自http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html (一)静态方法(1)在Java里,可以定义一个不需要创建对 ...

  3. java中的静态变量,静态方法与静态代码块详解

    java中的类的生命周期分为装载,连接,初始化,使用,和卸载五个过程. 而静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...

  4. java中的静态变量---static

    用static修饰符修饰的数据成员,并不是属于那个对象的,而是属于类.静态数据成员在定义的时候已经分配了内存,而此时对象还没有建立好. 当然它也是被保存到类的方法中的,而不是对象内存中,大家都是可以访 ...

  5. java中的静态变量

    大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 static 大显身手的时候了!! Java 中 ...

  6. Java中的静态变量static

    package com.wangcf; public class Test { String name="你好"; static String sex="男"; ...

  7. Java 中(静态)变量、(静态)代码块的执行顺序

    Java 中(静态)变量.(静态)代码块的执行顺序 非原创 本文讨论 Java 中(静态)变量.(静态)代码块的执行顺序 首先创建 3 个类 1.Foo 类 public class Foo { pu ...

  8. Java中的静态和枚举

    一.静态成员 对静态成员最简单的解释,静态成员属于整个类而不属于某个对象,所以又叫做类变量.一个类不管创建多少个实例对象,静态变量在内存中有且只有一个(调用方法用类名调用). 通常的非静态变量称为实例 ...

  9. java 类的静态变量

    主要是记录一个奇葩的现象,java类中的静态变量,不仅可以通过类名称直接调用,而且还可以通过类的实力对象调用,java是不存在静态类的,如果非要用静态的类那就是内部类. 类中的静态变量是存储在JVM方 ...

随机推荐

  1. SPOJ - AMR11B

    题目链接:https://www.spoj.com/problems/AMR11B/en/ 题目大意就是要你求图形覆盖的格点数,标记每个图形里的未标记格点(包括边界),总标记数就是覆盖的总格点数. # ...

  2. javaScript 字符串

    var name = '小明'; var age = 20; var message = '你好, ' + name + ', 你今年' + age + '岁了!'; alert(message) 要 ...

  3. PHP幸运大转盘源码,支持ThinkPHP

    原理 先看图 可以看到1-6等奖都只有1个 ,7等奖有6个.指针默认指向上图位置,记为0°. 每个奖项对应不同的角度,圆的角度为360°,分成12块,所以每块为30°. 为了防止指针指着相邻两个将向之 ...

  4. Html5与Css3知识点拾遗(七)

    布局 实例:规范的命名和编排 <body> <div class="page"><!--page开始--> <header class=& ...

  5. python 在unix下json格式显示结果

    在使用命令号输出接口测试结果,发现无法按照期望的json格式进行显示.查阅资料发现python自带强大的工具. 直接上代码: import os,requests url = XXXXXX conte ...

  6. PHP字符串函数之 sscanf echo print sprintf vsprintf printf vprintf fprintf vfprintf

    sscanf – 根据指定格式解析输入的字符 echo – 输出一个或多个字符串 print – 输出字符串 sprintf – 返回格式化字符串 vsprintf – 返回格式化字符串 (参数为数组 ...

  7. OpenCV基础知识介绍

    1.图像与矩阵 一般来说,图像是一个标准的矩形,有着宽度(width)和高度(height).而矩阵有着行(row)和列(column),矩阵的操作在数学和计算机中的处理都很常见且成熟,于是很自然的就 ...

  8. Lambda表达式where过滤数据

    使用Lambda的表达式来过滤符合条件的数据.下面的代码实现,是把字符阵列中,把名字长度等于3元素找出来. class Bv { public void LambdaExpression() { st ...

  9. IOS - 修改APP桌面名称为中文名称!

    1,修改“Display Name”为想要的中文. 2,修改“bundle display name”为想要的中文.

  10. 一道面试题(C语言)

    题:输入一个数,列出所有加和等于该数的式子. 分析: 以 6 为例: 从上面的分析就比较容易找到规律了. C语言代码: #include <stdio.h> int main() { in ...