Java中静态方法与非静态方法的区别?

Python025

Java中静态方法与非静态方法的区别?,第1张

静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。

如:

public  class Per{

public static String  getType(){

return "人类"

}

public  String getName(){

return "张三"

}

}

上面这个类中的getType方法,在没有new对象前这就可以这样用:

String type=Per.getType()//type="人类"

而getName方法则不能这样使用,编译都不会通过

getName必须这样:

Per p=new Per()

String name=p.getName()//name="张三"

当然,getType方法也可能通过对象调用:

String type=p.getType()//type="人类"

静态类和非静态类的主要区别:

主要区别在于静态类不能实例化,静态类编译器能够执行检查确保不是偶然的添加实例成员,C#编译器会自动把它标记为sealed,静态类中不能创建非静态的方法,即静态方法中只能创建静态方法,但在非静态类中可以调用静态方法。

静态类的主要特性:

1:仅包含静态成员。

2:无法实例化。

3:是密封的。

4:不能包含实例构造函数。

5:非静态类可以包含静态的方法、字段、属性或事件;

6:静态方法和属性不能访问其包含类型中的非静态字段和事件

7:静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员;

8:C# 不支持静态局部变量(在方法内部定义静态变量)。

非静态类在使用时必须要实例化,每次使用时都要进行实例化,一般情况下使用比较频繁的类,可以使用静态类,比如LogClass,ConfigClass等等。

由static

关键修饰的内容

为静态

反之

,为非静态

静态变量

属于

,为所有对象共有

分静态变量

属于

对象

每个对象都可以有且属性值可以各异

静态变量优于非静态变量加载,故

静态代码块中不能引用非静态成员,会报错