C#中类内直接访问服务类变量报错,方法内访问正常的问题
为啥类直接访问变量报错,方法里就正常?
这问题我太懂啦!咱们来一步步搞清楚原因,再给你解决办法~
核心原因:Java类的语法规则限制
Java对类的结构有明确要求:类的顶级区域(方法、构造器之外的地方)只能放成员变量声明、初始化表达式,或者静态/实例代码块,不能直接写可执行的逻辑语句(比如单独的赋值操作variable.member = 10;)。
看报错的代码:
public class Sample { ServiceName.ServiceClass variable = new ServiceName.ServiceClass(); variable.member = 10; //此处报错:variable未定义 }
这里的variable.member = 10;是一条独立的执行语句,直接放在了类的成员区域,完全不符合Java的语法规范,编译器根本不知道该什么时候执行这条语句,所以会报错说“variable未定义”(本质是语法不合法)。
再看正常工作的代码:
public class Sample { public void methodName() { ServiceName.ServiceClass variable = new ServiceName.ServiceClass(); variable.member = 10; //此处可正常赋值 } }
方法本身就是用来封装可执行逻辑的容器,当你调用methodName()的时候,方法里的代码会按顺序执行,所以这条赋值语句完全符合语法,自然能正常工作。
修复第一个类的几种方法
方法1:用实例初始化块
把赋值逻辑放到实例初始化块里,它会在创建类实例的时候自动执行:
public class Sample { ServiceName.ServiceClass variable = new ServiceName.ServiceClass(); // 实例初始化块,创建对象时执行 { variable.member = 10; } }
也可以用双大括号的初始化语法(本质也是实例初始化块的简写):
public class Sample { ServiceName.ServiceClass variable = new ServiceName.ServiceClass() {{ member = 10; }}; }
方法2:把逻辑放到构造方法里
构造方法是创建对象时的入口,把变量初始化和赋值都放在这里也很规范:
public class Sample { ServiceName.ServiceClass variable; public Sample() { variable = new ServiceName.ServiceClass(); variable.member = 10; } }
内容的提问来源于stack exchange,提问作者Harsh Parmar
相关产品推荐
相关产品推荐

