Java静态方法不用传参,Java 静态块可否实现传参

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.csdn.net/xiaohulunb/article/details/26264841

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值