Java方法簽名
Java的方法簽名不包括返回值。
public Object fuck() {
return new Object();
}
//wrong !!
public String fuck() {
return "fuck";
}
Java的方法簽名包括:方法名和參數(shù)。不包括方法返回值。所以由于fuck()這個函數(shù)已經(jīng)定義,第二次定義就失敗了。
但可以在子類中重寫(overwrite)該方法。
/** Base.java **/
public class Base {
public Object fuck() {
return new Object();
}
}
/** Sub.java **/
public class Sub {
@Override
public String fuck() {
return "fuck";
}
}
子類重寫父類方法,方法簽名一致,返回值不同,稱之為:協(xié)變返回類型。
方法塊
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方法塊在類加載時執(zhí)行
- 非static方法塊在類實例化之前執(zhí)行
- 方法塊執(zhí)行順序與在代碼中的順序有關
- 不可以在方法塊里面定義方法,但可以定義類
如果在方法塊里面實例化類,會導致:java.lang.StackOverflowError,相當于遞歸般的創(chuàng)建對象但沒有終止出口,所以public void fuck()這個方法始終沒有執(zhí)行到。
可以在方法塊里面執(zhí)行類實例的方法:
{
fuck();
}
HA! HA!