标题: java中静态变量和静态方法 [打印本页] 作者: 陈郊 时间: 2012-9-26 08:43 标题: java中静态变量和静态方法 什么是静态方法和静态变量?
java中静态变量和静态方法分别有什么特点?作者: 陈郊 时间: 2012-9-26 08:43
求解答!急!作者: 汪小照 时间: 2012-9-26 08:54
java中的静态方与静态变量指的是用static修饰符来修饰的就是静态的。
静态方法不能访问非静态成员变量和方法。
非静态方法即可以访问静态成员变量和静态方法,也可以访问非静态的成员变量和方法。
这两句话就是学静态时必须掌握的两句话。作者: 唐学松 时间: 2012-9-26 09:04
用static 修饰的变量和方法,称为静态变量和静态方法,
静态变量和方法,与类共存亡, 作者: 刘进朝 时间: 2012-9-26 09:12
静态变量、静态方法、静态代码块、非静态变量及非静态方法的简单介绍
静态变量
静态变量是类中的一种特殊变量,他在运行是可以说是从属于类,也就是说由该类定义生成的所有对象共用同一个静态变量,内存中只有一个版本。这对于要求在程序运行过程中,只有一个对象副本存于内存非常重要,如在实现单例模式时,为了实现只有一个类对象存于内存中,我们把内对象定义为一个静态变量;为了确保这个执行过程中,只有一个Connection对象村与内存中,我们把Connection定义为类静态变量。
静态代码块
静态代码块是以变量static表示的一段代码块,他是在第一次创建该类对象或第一次调用该类静态方法时执行,整个程序运行过程中最多执行一次。
静态方法
静态方法跟静态变量有点类似,也可以说是从属于类的方法,不用定义类实例对象就可以通过类名调用该方法。因此,我们也很容易知道,静态方法只能操作类的静态成员(包括静态变量和静态方法)或者其自己定义的内部成员。
非静态变量
非静态变量是属于特定类实例对象的,每个对象都有一个自己的副本。区别于静态变量的所有对象共用一个副本
非静态方法
非静态方法也可以说是属于对象的,只有类定义的对象才可以调用它,非静态方法可以操作静态变量,非静态变量及静态方法。
为了更好的理解以上内容,我将会给出一个实例程序,分析其在内存中的相关情况:
public class ClassA {
private int a;
private static int sa;
static
{
System.out.println("ClassA中的静态代码块开始");
sa=11;
System.out.println("ClassA中的静态代码块结束");
}
public ClassA()
{
System.out.println("ClassA中的构造函数开始");
a=1;
sa=10;
System.out.println("ClassA中的构造函数结束");
}
public void nonStaticPrintA()
{
System.out.println("ClassA中的非静态方法开始");
System.out.println("非静态变量a:"+a+"n静态变量sa:"+sa);
System.out.println("ClassA中的非静态方法结束");
}
public void staticPrintA()
{
System.out.println("ClassA中的静态方法开始");
System.out.println("不能调用非静态变量或非静态方法n静态变量sa:"+sa);
System.out.println("ClassA中的非静态方法结束");
}
}
public class ClassB extends ClassA {
private int b;
private static int sb;
static {
System.out.println("ClassB中的静态代码块开始");
sb = 111;
System.out.println("ClassB中的静态代码块结束");
}
public ClassB() {
System.out.println("ClassB中的构造函数开始");
b = 1;
sb = 10;
System.out.println("ClassB中的构造函数结束");
}
public void nonStaticPrintB() {
System.out.println("ClassB中的非静态方法开始");
System.out.println("非静态变量b:" + b + "n静态变量sb:" + sb);
System.out.println("ClassB中的非静态方法结束");
}
public void staticPrintB() {
System.out.println("ClassB中的静态方法开始");
System.out.println("不能调用非静态变量或非静态方法n静态变量sb:" + sb);
System.out.println("ClassB中的非静态方法结束");
}
}
public class Main {
public static void main(String[] args) {
// TODO code application logic here
ClassA a=new ClassA();
//ClassB b=new ClassB();
}
}
结果1
public class Main {
public static void main(String[] args) {
// TODO code application logic here
//ClassA a=new ClassA();
ClassB b=new ClassB();
}
}
结果2
public class Main {
public static void main(String[] args) {
// TODO code application logic here
ClassA a=new ClassA();
ClassB b=new ClassB();
}
}
结果3