现有构造函数NewPeopleFunction如下:
final class NewPeopleFunction extends AbstractCRMFunction implements
ICustomerConstants {
String s="";
//构造函数
public NewPeopleFunction(EJBFactory factory) {
super(s);
this.factory = factory;
}
}
我想在构造函数之前先执行如下代码,可以吗,该如何实现?
{
if(什么==什么)//先判断一下
s="aaaaaaaaaaaaaa";
else
s="bbbbbbbbbbbbbb";
}
final class NewPeopleFunction extends AbstractCRMFunction implements
ICustomerConstants {
String s="";
//构造函数
public NewPeopleFunction(EJBFactory factory) {
super(s);
this.factory = factory;
}
}
我想在构造函数之前先执行如下代码,可以吗,该如何实现?
{
if(什么==什么)//先判断一下
s="aaaaaaaaaaaaaa";
else
s="bbbbbbbbbbbbbb";
}
游离块是最先加载的final class NewPeopleFunction extends AbstractCRMFunction implements
ICustomerConstants {
String s="";
static{
if(什么==什么)//先判断一下
s="aaaaaaaaaaaaaa";
else
s="bbbbbbbbbbbbbb";
}
//构造函数
public NewPeopleFunction(EJBFactory factory) {
super(s);
this.factory = factory;
}
} 不知道符不符合你的要求
final class NewPeopleFunction extends AbstractCRMFunction implements
ICustomerConstants {
String s="";
{
if(什么==什么)//先判断一下
s="aaaaaaaaaaaaaa";
else
s="bbbbbbbbbbbbbb";
} //构造函数
public NewPeopleFunction(EJBFactory factory) {
super(s);
this.factory = factory;
}
}
这样就可以了。
ICustomerConstants {
String s="";
//构造函数
public NewPeopleFunction(EJBFactory factory) {
super(s);
this.factory = factory;
} static{
if(什么==什么)//先判断一下
s="aaaaaaaaaaaaaa";
else
s="bbbbbbbbbbbbbb";
} }
这里的S是一个成员变量,而不是一个静态变量,要这样使用static肯定不行的,因为static在对象构造之前就会执行,而这时这个成员变量从何而来??!请问?呵呵
ICustomerConstants {
String s="";
//构造函数
{
if(什么==什么)//先判断一下
s="aaaaaaaaaaaaaa";
else
s="bbbbbbbbbbbbbb";
}//不能用静态初始化区域 public NewPeopleFunction(EJBFactory factory) {
super(s);
this.factory = factory;
}
}
//非静态初始化块
}static {// 静态初始化块
}
// Consturctor
public ClzName() {}
final class NewPeopleFunction extends AbstractCRMFunction implements ICustomerConstants { String s = ""; //初始化块:可以有多个,按代码中出现顺序先于构造方法执行。
{
if (什么 == 什么) //先判断一下
s = "aaaaaaaaaaaaaa";
else
s = "bbbbbbbbbbbbbb";
} //构造方法
public NewPeopleFunction(EJBFactory factory) {
super(s);
this.factory = factory;
}}
你说得对,若是这样,用对象初始化块是实现不了。
因为:super(...)永远是第一条语句。
但:可以详细叙述一下你的要求,通过设计,也计可以用 静态初始化块 来解决。
static String s= " ";
//构造函数
public NewPeopleFunction(EJBFactory factory) {
super(s);
this.factory = factory;
} static{
if(什么==什么)//先判断一下
s= "aaaaaaaaaaaaaa ";
else
s= "bbbbbbbbbbbbbb ";
}
{
什么=getFoo(args);//这里调用了一个非静态成员函数foo(args)啊
if(什么==什么)//先判断一下
s="aaaaaaaaaaaaaa";
else
s="bbbbbbbbbbbbbb";
}
我知道静态初始化块里是不能调用非静态成员函数的,怎么办,我是不是应该new啦,真怕又有什么新的问题出现~