java中static变量和方法的总结

转自:http://blog.csdn.net/haobo920/article/details/5921621

java中一切皆是对象

一个类中对象的定义一般都是分一下的两步来进行的:
1/    A a;                                     //定义了一个类A的引用
2/    a=new A("10","2563");        //真正地建立了对象a,也就是a指向了内存中一块连续的区域

也就是说通常我们说的创建了一个类,只是指出了这个类的外观和行为,除非用new 创建那个类的一个对象,否则的话,实际上并未得到任何的东西。只有执行了new以后,才会正式生成数据存储空间,并可使用相应的方法。
        但是如果我们要只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象。或者我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法。为满足这两方面的要求,可使用static(静态)关键字。

一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起。所以尽管从未创建那个类的一个对象,仍能调用一个static方法,或访问一些static数据。而非静态的方法或者变量就必须知道它们操作的具体对象

下面是java编程思想中的例子和解释:

例如,下述代码能生成一个static数据成员,并对其初始化:

class StaticTest { 
Static int i = 47; 
}

现在,尽管我们制作了两个StaticTest对象,但它们仍然只占据StaticTest.i的一个存储空间。这两个对象都共享同样的i。请考察下述代码: 
StaticTest st1 = new StaticTest(); 
StaticTest st2 = new StaticTest(); 
此时,无论st1.i还是st2.i都有同样的值47,因为它们引用的是同样的内存区域。 
有两个办法可引用一个static变量。正如上面展示的那样,可通过一个对象命名它,如st2.i。亦可直接用它的类名引用,而这在非静态成员里是行不通的(最好用这个办法引用static变量,因为它强调了那个变量的"静态"本质)。 
StaticTest.i++; 
其中,++运算符会使变量增值。此时,无论st1.i还是st2.i的值都是48。 
类似的逻辑也适用于静态方法。既可象对其他任何方法那样通过一个对象引用静态方法,亦可用特殊的语法格式"类名.方法()"加以引用。静态方法的定义是类似的: 
class StaticFun { 
static void incr() { StaticTest.i++; } 

从中可看出,StaticFun的方法incr()使静态数据i增值。通过对象,可用典型的方法调用incr(): 
StaticFun sf = new StaticFun(); 
sf.incr(); 
或者,由于incr()是一种静态方法,所以可通过它的类直接调用: 
StaticFun.incr(); 
尽管是"静态"的,但只要应用于一个数据成员,就会明确改变数据的创建方式(一个类一个成员,以及每个对象一个非静态成员)。若应用于一个方法,就没有那么戏剧化了。对方法来说,static一项重要的用途就是帮助我们在不必创建对象的前提下调用那个方法。正如以后会看到的那样,这一点是至关重要的——特别是在定义程序运行入口方法main()的时候。 
和其他任何方法一样,static方法也能创建自己类型的命名对象。所以经常把static方法作为一个"领头羊"使用,用它生成一系列自己类型的"实例"。

测试例子:
package moonsoft.test.testDataStructure;

public class TestDriver 

public TestDriver() 


public static void main(String []args) 

TestDriver td=new TestDriver(); 
String month=td.monthName(3);//通过对象调用static method,不建议使用 
month=TestDriver.monthName(4);//标准的调用static method 
String month1=td.monthName1(3);//通过对象调用非static method    如果需要访问非静态方法的话,可以这样使用
month1=TestDriver.monthName1(4); //此处会出错
/*不通过对象调用非static method: 
month1=monthName1(4);// 会出错。。。。。
* Error(14,23): non-static method monthName1(int) cannot be referenced from a static context*/ 
System.out.println(month+a);//静态方法调用静态变量 
System.out.println(month1+a);//静态方法调用静态变量 
System.out.println(month+a1); 
/*静态方法调用非静态变量 
*Error(17,30): non-static variable a1 cannot be referenced from a static context*/


public static String monthName(int month)//static method 

switch ( month) 

case 1: return "Jan"; 
case 2: return "Feb"; 
case 3: return "Mar"; 
case 4: return "Apr"; 
case 5: return "May"; 
case 6: return "Jun"; 
default: return "others";



public String monthName1(int month)//not a static method 

switch ( month) 

case 1: return "Jan"; 
case 2: return "Feb"; 
case 3: return "Mar"; 
case 4: return "Apr"; 
case 5: return "May"; 
case 6: return "Jun"; 
default: return "others";



public static int add(int t) 

int s=t; 
s++; 
return s; 

public static double a; 
public double a1;

}

时间: 2024-08-04 03:49:50

java中static变量和方法的总结的相关文章

Java中static变量作用和用法详解

static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是

转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性

原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它们只能访问static数据. 它们不能以任何方式引用this 或super. 无论是static修饰的变量,还是static修饰的方法,我们都知道他们是属于类本身的,不是属于某一个对象的,当声明一个对象时,并不产生sta

java执行程序的内存分析系列专栏二之static变量和方法内存分析

昨天写了简单的聊了下java执行程序时简单的内存划分,今天我们接着往下聊,聊聊static变量和方法的内存分析. 1.static变量和方法的第一个特性内存分析 statiic变量和方法的第一个特性能通过类名.static变量和类名.static方法的形式调用,而普通只能对象的形式调用.但具体为什么是这样的,这得分析static变量和方法他们在内存中怎样分配的,因此在这里我首先建立一个学生类,里面有一个普通成员变量和一个静态成员变量以及一个普通方法和一个成员方法,然后建立了一个测试学生的类. 1

Java知识点整理(9)——static变量和方法

1.在类中,用static变量声明的成员变量叫静态变量,或者叫做类属性.类变量.它为该类的公有变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化. 2.类变量是类的公有变量,属于类,被该类的所有实例共享,当类被载入时显式初始化. 3.可以使用“对象.类属性”来调用.不过,一般都使用“类名.类属性”. 4.static变量置于方法区中. 5.用static声明的方法称为静态方法.不需要对象就可以调用(类名/方法名). 6.static方法只能使用static变量,非static方法可以使

java中static作用详解

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类

java中static的使用

我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,有时候,我们希望该类的所有成员共享一个成员.这时可以用static来修饰. Java中static作为修饰符,可以用来修饰变量.方法.代码块. 1.静态方法 被static修饰的变量成为静态变量,又可以成为静态成员或类成员.它属于整个类所有,而不是某个对象所有,被类的所有对象共享.类变量在类加载的时候初始化分配空间,而且只被初始化一次,直到该类被卸载时才将资源回收. 静态成员可以使用类名直接访问,也可以使用对象进行访问.在程序中任何

Java中vector的使用方法

Vector的使用 vector类底层数组结构的,它包含可以使用整数索引进行访问的组件.不过,vector的大小可以根据需要增大或缩小,以适应创建vector后进行添加或移除项的操作,因此不需要考虑元素是否越界或者会不会浪费内存的问题. 由vector的iterator和listIterator方法所返回的迭代器是快速失败的:也即是它不能并发执行操作.如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的remove或add方法之外的任何其他方式),则迭代器将抛出ConcurrentM

Java中static、final用法小结(转)

一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变.其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中.这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值. 当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的

java中static关键字总结

Java中,static关键字一般情况下有四种用法: 用来修饰一个变量. 用来修饰一个方法. 用来修饰一个内部类. 用来修饰一段代码块. 1 public class Student{ 2 String name; 3 static int count;//static修饰的变量 4 static{//static修饰的代码块 5 count=0; 6 } 7 public static void playGame(){//static修饰的方法 8 System.out.println("我爱