Java中静态方法(上下文)的使用

本文通过示例代码详细解析了Java中静态方法调用变量的规则:静态方法不可直接访问非静态变量,但可以访问静态变量;而非静态方法则能自由地访问静态和非静态变量。

       从书中看了一下Java中静态方法的使用以及使用注意事项,总结下来的注意事项义工有两点:

       1,静态方法中不能够直接调用非静态变量;

       2,非静态方法中可以直接调用静态变量;

       至于其他的情况,之前基本的代码中都做了测试,不再赘述了。接下来写一段代码,主要是为了验证前面的第一点:

public classStaticMethod

{

       int my_num = 123;

 

       public static void main(String[] args)

       {

              StaticMethod obj = newStaticMethod();

              obj.MyStaticFunc();

       }

 

       static void MyStaticFunc()

       {

              System.out.println("staticfunction!");

              System.out.println("my num:" + my_num);

       }

}public classStaticMethod

{

       int my_num = 123;

 

       public static void main(String[] args)

       {

              StaticMethod obj = newStaticMethod();

              obj.MyStaticFunc();

       }

 

       static void MyStaticFunc()

       {

              System.out.println("staticfunction!");

              System.out.println("my num:" + my_num);

       }

}

       编译运行结果;

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>javac StaticMethod.java

StaticMethod.java:14:错误: 无法从静态上下文中引用非静态 变量 my_num

                System.out.println("mynum: " + my_num);

                                               ^

1 个错误

       从上面的错误提示中可以看到比较直接的结论,从静态方法(上下文)中引用非静态变量!修改代码如下:

public classStaticMethod

{

       static int my_num = 123;

 

       public static void main(String[] args)

       {

              StaticMethod obj = newStaticMethod();

              obj.MyStaticFunc();

       }

 

       static void MyStaticFunc()

       {

              System.out.println("staticfunction!");

              System.out.println("my num:" + my_num);

       }

}

       代码编译运行结果:

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>javac StaticMethod.java

 

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>java StaticMethod

static function!

my num: 123

       从上面的结果中可以看出,静态方法(上下文)调用静态变量是没有问题的。至于其他的验证,暂时应该是没有必要了,先前在学习其他的基础时在主函数中都写过类似的功能。简单只测试一下前面的第2点,修改代码如下:

public classStaticMethod

{

       static int my_num = 123;

       int my_normal_num = 456;

 

       public static void main(String[] args)

       {

              StaticMethod obj = newStaticMethod();

              obj.MyStaticFunc();

              obj.TestFunc();

       }

 

       static void MyStaticFunc()

       {

              System.out.println("staticfunction!");

              System.out.println("my num:" + my_num);

       }

      

       void TestFunc()

       {

              System.out.println("normalfunction!");

              System.out.println("my staticnum: " + my_num);

              System.out.println("my normalnum: " + my_normal_num);

       }

}

       代码的编译运行结果:

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>javac StaticMethod.java

 

E:\WorkSpace\02_技术实践\01_编程语言\05_Java\02_Java从入门到精通\05_类和对象>java StaticMethod

static function!

my num: 123

normal function!

my static num: 123

my normal num: 456

       由上面的结果可以看出,非静态方法中对各种变量的调用都是自由的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值