java 类 签名_Java方法签名与方法块

Java方法签名

Java的方法签名不包括返回值。

public Object fuck() {

return new Object();

}

//wrong !!

public String fuck() {

return "fuck";

}

Java的方法签名包括:方法名和参数。不包括方法返回值。所以由于fuck()这个函数已经定义,第二次定义就失败了。

但可以在子类中重写(overwrite)该方法。

/** Base.java **/

public class Base {

public Object fuck() {

return new Object();

}

}

/** Sub.java **/

public class Sub {

@Override

public String fuck() {

return "fuck";

}

}

子类重写父类方法,方法签名一致,返回值不同,称之为:协变返回类型。

方法块

public class Program {

{

System.out.println("begin class A");

class A {

{

System.out.println("that's ok");

}

private void f() {

System.out.println("in f()");

}

}

new A().f();

// new Program().fuck();

}

{

System.out.println("another block");

}

static {

System.out.println("static block");

}

public Program() {

System.out.println("this is program");

}

public void fuck() {

System.out.println("I don't give a fuck");

}

public static void main(String[] args) {

Program program = new Program();

}

}

先看输出:

static block

begin class A

that's ok

in f()

another block

this is program

总体思路是:

static方法块在类加载时执行

非static方法块在类实例化之前执行

方法块执行顺序与在代码中的顺序有关

不可以在方法块里面定义方法,但可以定义类

如果在方法块里面实例化类,会导致:java.lang.StackOverflowError,相当于递归般的创建对象但没有终止出口,所以public void fuck()这个方法始终没有执行到。

可以在方法块里面执行类实例的方法:

{

fuck();

}

HA! HA!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值