Java中的静态方法、静态变量以及实例方法、实例变量

您所在的位置:网站首页 类方法可以通过类名调用 Java中的静态方法、静态变量以及实例方法、实例变量

Java中的静态方法、静态变量以及实例方法、实例变量

2024-07-13 13:52| 来源: 网络整理| 查看: 265

静态方法(static method) 先从一道笔试题说起

关于Java中的静态方法,下列说法哪些是正确的() A:静态方法是一个属于类而不属于对象(实例)的方法。(√)

静态方法可以在没有创建对象实例的情况下调用,其是可以通过类名引用。

B:静态方法只能访问静态数据。无法访问非静态数据(实例变量)。(√)

它这边的意思是不能直接访问非静态数据(实例变量),因为非静态数据是属于对象属性的,其只有在对象存在的时候才能引用。

C:静态方法只能调用其他静态方法,不能从中调用非静态方法。(√)

这里也是不能直接调用非静态方法,因为非静态方法是属于某个对象的,不先实例化对象,通过对象引用,那么将无法判断具体调用哪个对象(实例)的非静态方法。

D:静态方法不能通过类名直接访问,也不需要任何对象。(×) 静态方法可以直接用类名访问。

类名.静态方法名() 这种方式是可以的,所以静态方法可以直接通过类名进行访问。

简单总结

先总结:

(1)静态方法中不可以直接引用实例方法(非静态方法)或实例成员变量(非静态变量);

静态方法中引用实例方法、实例变量,须先实例化对象,然后通过 对象名.实例变量名 和 对象名.实例方法名( )

(2)静态方法、实例方法(非静态方法)都可以引用静态变量、静态方法; 如果在不同类中,则是通过 类名.静态变量名 和 类名.静态方法名( ) 的方式引用;如果是在同一个类中,则可以省略类名;

当然,要想其他类能引用其静态变量、静态方法,则其不能将这些变量、方法设置为private。

(3)实例方法(非静态方法)中引用实例变量、其他实例方法; 如果在不同类中,则需要先实例化对象,通过对象进行引用;如果在同一个类中,则直接引用即可; (4)引用(调用)静态方法的方式有两种: 类名.静态方法名( )先实例化一个对象,然后通过 对象名.静态方法名( ) (5)静态方法中不能使用 this 和 super ,而实例方法可以; 具体案例

通过下面的案例,可以对上面所述内容有个更加清晰的认识。

StaticMethodTest1 package com.yuan.test; public class StaticMethodTest1 { private static int staticVariable;//静态成员变量 public static int publicStaticVariable; protected static int protectedStaticVariable; private int instanceVariable;//实例成员变量(非静态成员变量) public static void staticMethod1(){ staticVariable = 166;//静态方法中引用静态变量 publicStaticVariable = 101; protectedStaticVariable = 102; System.out.println("StaticMethodTest1's staticVariable ="+staticVariable); /* Non-static field 'instanceVariable' cannot be referenced from a static context 不能从静态上下文中引用非静态变量 */ //instanceVariable = 555; /* Non-static method 'instanceMethod()' cannot be referenced from a static context 不能从静态上下文中引用非静态方法(实例方法)的 */ //instanceMethod1(); staticMethod2();//在当前类中的静态方法中调用当前类的其它静态方法(可省略类名) } public void instanceMethod1(){ // 实例方法(非静态方法)中是可以引用非静态变量(实例成员变量)的 instanceVariable = 100; // 实例方法也可以引用静态变量 staticVariable = 177; } public static void staticMethod2(){ staticVariable = 188; } public static void main(String[] args){ StaticMethodTest1 staticMethodTest1 = new StaticMethodTest1(); staticMethodTest1.instanceMethod1(); // main方法是典型的静态方法,所以引用实例变量须通过实例对象 System.out.println(staticMethodTest1.instanceVariable); System.out.println(staticVariable); staticMethod1();//在当前类中调用静态方法,可以省略类名 System.out.println(staticVariable); System.out.println(publicStaticVariable); System.out.println(protectedStaticVariable); } }

运行后结果为:

100 177 StaticMethodTest1's staticVariable =166 188 101 102 StaticMethodTest2 package com.yuan.test; public class StaticMethodTest2 { private static int staticVariable; public static int publicStaticVariable; public static void staticMethod1(){ // 通过类名直接引用StaticMethodTest1类的静态方法staticMethod1 // 引用其他类的静态方法(类名.静态方法名()) StaticMethodTest1.staticMethod1(); // 修改当前类中的静态变量,可以省略类名 staticVariable = 222; publicStaticVariable = 221; // 修改其它类中的静态变量(类名.静态变量名),注意:其它类的静态变量不能是private的 StaticMethodTest1.publicStaticVariable = 201; StaticMethodTest1.protectedStaticVariable = 202; // 除了可以使用类名直接调用静态方法,还可以通过实例对象调用静态方法 StaticMethodTest1 staticMethodTest1 = new StaticMethodTest1(); staticMethodTest1.staticMethod1();//会将其publicStaticVariable、protectedStaticVariable 的值又改回101、102 } public static void main(String[] args){ staticMethod1(); // 引用其他类的静态变量(类名.静态变量名) System.out.println(StaticMethodTest1.publicStaticVariable); System.out.println(StaticMethodTest1.protectedStaticVariable); // 引用当前类的静态变量 System.out.println(publicStaticVariable); } }

运行结果为:

StaticMethodTest1's staticVariable =166 StaticMethodTest1's staticVariable =166 101 102 221

如果错误,欢迎指正!谢谢!

参考: java 调用静态方法和实例(对象)方法的区别



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3