黑马程序员技术交流社区

标题: 关于静态的问题 [打印本页]

作者: 向阳泪无痕    时间: 2014-3-30 12:07
标题: 关于静态的问题
本帖最后由 向阳泪无痕 于 2014-4-1 18:18 编辑

我知道静态方法中无法访问非静态的变量或方法。
但现在我就是想完成这一操作
在静态方法中如何访问非静态方法中的局部变量呢?
如:
class A
{
   public void method()
   {
        final int b = 8;
   }
   public static void method2()
  {
         //在这里怎么去访问 b = 8 呢?
   }
}

作者: 阳春烟景    时间: 2014-3-30 12:19
直接访问肯定是不可以的,但通过在静态方法的内部创建对象(或形式参数来传递的对象)来间接访问是完全可以的.

  1. public class test {
  2.     public static void main(String[] args) {
  3.     c2.method2(new c2());
  4.     }
  5. }

  6. interface I1 {
  7.     void method();
  8. }

  9. class c2 implements I1{
  10.     public void method() {
  11.               final int b = 8;
  12.         System.out.println("b="+b);
  13.         }
  14.    
  15.     static void method2(I1 o) {
  16.             o.method();
  17.     }
  18. }
复制代码

作者: 向阳泪无痕    时间: 2014-3-30 12:47
阳春烟景 发表于 2014-3-30 12:19
直接访问肯定是不可以的,但通过在静态方法的内部创建对象(或形式参数来传递的对象)来间接访问是完全可以的. ...

你说的这个  我知道   我想的是怎么拿去 b  而不是去调用方法
作者: 刘望望    时间: 2014-3-30 13:36
想要拿到b,只能在method方法中返回b,然后在method2方法中调用method方法获取返回值。
class A
{
   public int method()
   {
        final int b = 8;
        return b;
   }
   public static void method2()
  {
         //在这里怎么去访问 b = 8 呢?
         A a = new A();
         int b = a.method();
   }
}
或者修改method2方法接收int类型参数,在method方法中调用method2方法,将b传进去
class A
{
   public void method()
   {
        final int b = 8;
        A.method2(b);
   }
   public static void method2(int b)
  {
         //在这里怎么去访问 b = 8 呢?
         int b = b;
   }
}
如果要想把b直接拿过来用是不现实的,因为b本身就是一个局部变量,作用域只限于该方法内,和是不是在静态方法内无关
作者: 向阳泪无痕    时间: 2014-3-30 14:01
刘望望 发表于 2014-3-30 13:36
想要拿到b,只能在method方法中返回b,然后在method2方法中调用method方法获取返回值。
class A
{

OK                        




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2