java中static变量和方法的总结

news/2024/7/5 9:34:29

java中static变量和方法的总结

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;

}

 


http://www.niftyadmin.cn/n/3978531.html

相关文章

Java/JSP中文乱码问题解决

Java/JSP中文乱码问题解决 自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。 一、Java中文问题的由来 Java的内核和class文件是基于unicode的,这使Java程序具…

JAVA简单考试题

JAVA考试题一、 填空题:(15个2)1、 面向对象的特征有(至少写出三个): 封装、继承、多态 2、 Map采用 哈希算法 机制放置数据。3、 …

Collection接口和Map接口的主要实现类

Collection接口和Map接口的主要实现类 Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java …

在Linux下使用MySQL简介

在Linux下使用MySQL简介一、安装Mysql1、下载MySQL的安装文件安装MySQL需要下面两个文件:MySQL-server-4.0.16-0.i386.rpm   MySQL-client-4.0.16-0.i386.rpm下载地址为:http://www.mysql.com/downloads/mysql-4.0.html,打开此网页&#x…

三道编程题

四、 编程题1. 构造一个类来描述屏幕上的一个点,该类的构成包括点的x和y两个坐标,以及一些对点进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并对其进行操作。 2. 编写…

海信的笔试题

数字推理题和逻辑推导题(供参考) 一:数字推理 答题说明:请对题项中给出的数列进行观察和分析,并根据其排列规律推导出空缺位置上的数字,做出选择,测试时间15分钟。 第1题:1, 3, 3, 9, ( ) A.18 B.21 C.27 D.81 第2题:在面积相等的…

UML 实践——用例图、顺序图、状态图、类图、包图、协作图

文章分类:综合技术 UML 实践——用例图、顺序图、状态图、类图、包图、协作图 面向对象的问题的处理的关键是建模问题。建模可以把在复杂世界的许多重要的细节给抽象出。许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的…

泛化-关联-依赖-聚合

http://www.javaeye.com/topic/37302 类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。类与类之间存在以下关系:(1)泛化(Generalization)(2)关联(Association)(3)依赖(Dependency)(4)聚合…