Welcome

首页 / 软件开发 / C++ / 探秘static:类不需实例化就能用?

探秘static:类不需实例化就能用?2015-05-03一般情况下,需要用到某个类的时候,都必须先实例化这个类,才能对其进行调用。在编程过程中发现,有些类不用实例化就可以直接拿来使用,使用它的字段、方法等等。

这时候,靠的就是static作用。static英文意思为“静止的,静态的”,在OOP中可以作为修饰符,类、字段、属性、方法等被static修饰后,变为静态类、静态字段、静态属性、静态方法……

static修饰的类成为静态类,静态类中只能包含静态成员(被static修饰的字段、属性、方法),不能被实例化,不能被继承;非静态中可以包含静态成员。  

1、被调用时必须先实例化的情况:

被调用成员为非静态成员(此时它所属的类肯定为非静态类)。如下小例子:

public class ClassA//ClassA类(非静态类){public ClassA() { }//构造函数public void Fun() { }//ClassA类中的方法(非静态方法)}public class ClassB //需要调用ClassA类中方法的ClassB类{public ClassB() { }//构造函数public void Fun(){ClassA a = new ClassA();//调用ClassA类中的方法需要先实例化a.Fun();}}
说明:ClassA类为非静态类,其中的方法Fun()也为非静态方法,所以在ClassB中调用时需要先实例化ClassA类。

2、被调用时不需要实例化的情况:

被调用成员为静态成员(此时它所属的类为静态类或非静态类)。如下小例子:

(1)被调用类为非静态类:

public class ClassA//ClassA类(非静态类){public ClassA() { }//构造函数public static void Fun() { }//ClassA类中的方法(静态方法)}public class ClassB //需要调用ClassA类中方法的ClassB类{public ClassB() { }//构造函数public void Fun(){ClassA.Fun();//调用ClassA类中的方法直接调用:类名.成员}}
说明:ClassA类为非静态类,但其中的方法Fun()为非静态方法,所以在ClassB中调用时不实例化ClassA类(而且不能实例化),直接调用其成员,语法为“类名.成员”。

(2)被调用类为静态类:

public static class ClassA//ClassA类(静态类){//当然静态类中不能存在构造函数public static void Fun() { }//ClassA类中的方法(静态方法)}public class ClassB //需要调用ClassA类中方法的ClassB类{public ClassB() { }//构造函数public void Fun(){ClassA.Fun();//调用ClassA类中的方法直接调用:类名.成员}}
说明:ClassA类为静态类,其中的方法也Fun()为非静态方法,所以在ClassB中调用时不实例化ClassA类(而且不能实例化),直接调用其成员,语法为“类名.成员”。