首页 >> 方法大全

静态方法和非静态方法区别?(优/缺点)

2022-05-14 方法大全 260 作者:考证青年

静态方法(类方法)和非静态方法(实例方法)的区别:

主要有以下三种方法:

1.构造函数

2.非静态方法(普通方法/实例方法)

3.静态方法(类方法)

一、静态方法和非静态方法的区别(调用对象和引用变量不同)

静态方法:是用关键字修饰的方法,也称为类方法。它属于类,而不属于对象。在实例化对象之前,可以通过类名调用静态方法。方法名称。(静态属性和静态方法属于类,可以通过类名直接调用)。

A. 在静态方法中,可以调用静态方法。

B. 在静态方法中,不能调用非静态方法。

C. 在静态方法中,可以引用类变量(即修饰变量)。

D. 在静态方法中,成员变量(即没有修饰的变量)不能被引用。

E. 在静态方法中,不能使用 super 和 this 关键字

非静态方法:是一种没有关键字修饰的普通方法,也称为实例方法和成员方法。属于对象,不属于类。(成员属性和成员方法属于对象,必须通过new关键字创建对象,然后通过对象调用)。

A. 在普通方法中,可以调用普通方法。

B. 在普通方法中,可以调用静态方法

C.在普通方法中,可以引用类变量和成员变量

D. 在普通方法中,可以使用 super 和 this 关键字

二、静态方法和非静态方法的区别(调用方法不同)

静态方法可以通过类名和对象直接调用。(类名。方法名/对象名。方法名)

但是非静态方法只能从对象中调用。(对象名。方法名)

三、静态方法和非静态方法的区别(生命周期不同)

静态方法的生命周期与对应的类一样长,静态方法和静态变量随着类的定义被分配和加载到内存中。在线程结束之前,静态属性和方法不会被销毁。(即静态方法属于类)

非静态方法的生命周期与类的实例化对象一样长。只有当类实例化一个对象时,才会创建非静态方法,而当对象被销毁时,非静态方法会立即被销毁。(即非静态方法属于对象)

总结:类方法可以通过类名直接调用。实例方法必须先实例化类,再初始化对象,再通过类的实例对象调用。

例子:

XYZ类{

public static void main(String[] str){
      XYZ.testStatic();         //直接通过类调用
      XYZ a = new XYZ();        //实例化,然后构造方法会初始化
      a.testMethod();           //对象调用方法
}
public static void testStatic(){
	 System.out.println("This is static method");
 }
public void testMethod(){
 	 System.out.println("This is instance method");
 }

}

静态变量/方法是在类加载时初始化的方法,在内存中只存在一份,所以可以看成是全局变量/方法。

优点属于类级别,不用创建对象就可以直接使用。它是全局唯一的,在内存中唯一,静态变量可以唯一标识某些状态。类加载时初始化,驻留在内存中方法,调用方便快捷。

应用场景:

1. 静态方法最适合工具类中方法的定义;如文件操作、日期处理方法等。

2. 静态方法适用于入口方法的定义;比如单例模式,因为无法从外部获取构造函数,所以需要定义静态方法来获取对象。

3. 静态变量适用于全局变量的定义。(例如,布尔静态成员变量用作控制符号)

缺点静态方法不能调用非静态方法和变量。(非静态方法可以任意调用静态方法/变量)不能使用this和super关键字(属于类级别,this/super不创建对象签名不可用)

摘自csdn

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了