A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 向阳泪无痕 高级黑马   /  2014-3-30 12:07  /  1407 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 向阳泪无痕 于 2014-4-1 18:18 编辑

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

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

4 个回复

倒序浏览
直接访问肯定是不可以的,但通过在静态方法的内部创建对象(或形式参数来传递的对象)来间接访问是完全可以的.

  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
阳春烟景 发表于 2014-3-30 12:19
直接访问肯定是不可以的,但通过在静态方法的内部创建对象(或形式参数来传递的对象)来间接访问是完全可以的. ...

你说的这个  我知道   我想的是怎么拿去 b  而不是去调用方法
回复 使用道具 举报
想要拿到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本身就是一个局部变量,作用域只限于该方法内,和是不是在静态方法内无关

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
刘望望 发表于 2014-3-30 13:36
想要拿到b,只能在method方法中返回b,然后在method2方法中调用method方法获取返回值。
class A
{

OK                        
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马