Java 静态块能否实现传参?
如题,想要给静态块传递参数,整了半天没整出来,这个需求是否可行?代码如下:public class Static {
private static String fileName;
public Static(String string) {
this.fileName = string;
}
static{
System.out.println(fileName);
}
public static void main(String[] args){
new Static("test"); //输出是null,怎么实现静态块的传参?还是根本没办法实现?
}
}
------解决方案--------------------
静态块会在main方法之前先执行的
------解决方案--------------------
引用:Quote: 引用:静态块又不是方法,何来参数一说
没这个搞法,思路有问题,换个思路吧
就是说Static块里面的东西都是死的是吗?
正确。
这样写吧:
public Static(String string) {
this.fileName = string;
init(string);
}
public static init(String string) {
do something
}
------解决方案--------------------
静态方法也是一种静态块,何不用静态方法?
------解决方案--------------------
static{
System.out.println(fileName);
}
你这段代码在类加载的时候就已经执行了。类加载先行于类使用。
而你这段代码却是在类实例创建的时候执行的,static 变量的值其实赋值成功了,但是这段代码在时间顺序上是不可能早于打印语句的。因此返回永远是null。
new Static("test");
------解决方案--------------------
static{
System.out.println(fileName);
}
static{}会在初始化一个class时优先初始化。
可以考虑使用静态方法实现楼主的要求。
------解决方案--------------------
package csdn;
public class StaticTest {
private static String filename;
StaticTest(String filename){
this.filename = filename;
}
static {
System.out.println("first");
System.out.println(filename);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("second");
new StaticTest("Hello,World");
}
}
运行结果:
first
null
second
是static块里先执行了,即使传了值也打印不出来
------解决方案--------------------
引用:Quote: 引用:一般来说 static块里是定义一些初始化的数据, 而这些数据是需要早于其他变量出现的。
打印为null因为,在classloader的时候先执行的静态块, 后才会走main方法的。
考虑其他的办法吧。
只能考虑其他方法了
但是例子中的“fileName”又不能写死,请问你有什么办法呢?
恩 知道其实你就是想做到不写死, 但主要还是要看你的 fileName 是干什么用的, 哪个时点用的?
而且是容器启动的时候配置呢 , 还是接收界面传参 或者 其他的情况呢?
需求描述下,不要纠结帖子的问题, 然后大家给你点点子。
------解决方案--------------------
public class Static {
private static String fileName;
public Static(String string) {
this.fileName = string;
}
static{
new Static("test"); // ---提前到这里试试
System.out.println(fileName);
}
public static void main(String[] args){
//输出是null,怎么实现静态块的传参?还是根本没办法实现?
}
}
------解决方案--------------------
觉得楼主应该知道哪个先执行,你这段程序执行顺序是这样的
静态的先执行,然后是主函数,如果楼主明白了,就不会出现这种问题了,对吗?
------解决方案--------------------
啥也不说了。
看看我研究后的。
自己动动手就明白了。
不动手就不要说了
透析Java本质-类的初始化顺序
http://blog.youkuaiyun.com/xiaohulunb/article/details/26264841