java静态变量和静态方法_Java静态变量和静态方法

TEST1

/**

* 测试静态变量和静态方法

* @author Jasmine

*/

public class TestStatic

{

static String ss = "lily";

static void changeStr(String str)

{

System.out.println("str2:" + str);

str = "welcome";

System.out.println("str3:" + str);

}

static void changeStr()

{

System.out.println("ss2:" + ss);

ss = "lucy";

System.out.println("ss3:" + ss);

}

public static void main(String[] args)

{

String str = "hello";

System.out.println("str1:"+str);

TestStatic.changeStr(str);

System.out.println("str4:"+str);

System.out.println("ss1:"+ss);

TestStatic.changeStr();

System.out.println("ss4"+ss);

}

}

输出

str1:hello

str2:hello

str3:welcome

str4:hello

ss1:lily

ss2:lily

ss3:lucy

ss4lucy

这里虽然是一个静态方法,但是里面的变量是一个局部变量,所以这里不因为是静态方法,就误认为里面的变量也是静态变量了。

TEST2

public class TestStringNull

{

static boolean foo(char c)

{

System.out.println(c);

return true;

}

public static void main(String[] argv)

{

int i = 0;

for (foo('A'); foo('B') && (i 

{

i++;

foo('D');

}

}

}

输出:ABDCBDCB

分析: FOR 循环里面讲究的条件要为真,与你的判断式是什么没有关系

就像这里,虽然是打印的字母,但是却不是 false ,所以可以执行

第一次进行循环:

首先执行for循环初始条件foo('A'), 打印字母 A ,(注:这里不是 false 条件就默认为 true 条件)

然后执行判断foo('B') 打印字母 B , i=0, 比较 (i < 2) ,条件为 true ,进行循环体,

然后执行循环体内部操作foo('D') 打印 D

然后是循环变量增(降)值foo('C') 打印字母 C

第二次循环:

foo('B') 打印 B , i=1, 比较 (i < 2) 为 true ,进行循环体, foo('D') 打印 D

foo('C') 打印字母 C

第三次循环:

foo('B') 打印字母 B , i=2 ,比较 (i < 2) 为 false ,退出循环,得结果

TEST3

public class A

{

protected int method1(int a, int b)

{

return 0;

}

}

public class B extends A

{

//这里是写了一个重载方法,因为参数类型不一致,不会报错

private int method1(int a, long b)

{

return 0;

}

//可见性可以增大,但是不能够缩小,正确

/**

*

* @param a

* @param b

* @return

*/

@Override

public int method1(int a, int b)

{

return 0;

}

//error 比类A中继承的该方法的可见性降低(proctect降到了private)

//    private int method1(int a, int b)

//    {

//        return 0;

//    }

//error 与类A中继承的该方法的返回类型不同

//    public short method1(int a, int b)

//    {

//        return 0;

//    }

//error 静态方法不能够隐藏继承于A的实例

//    static protected int method1(int a, int b)

//    {

//        return 0;

//    }

}

总结:类的继承中,如果要想重载父类的方法,必须要和父类中的返回类型、可见性等等都要保持一致。

否则,程序就会报错。一定遵守子类要遵从于父类的原则

TEST4

public class Outer

{

public void someOuterMethod()

{

// Location A

Inner i = new Inner();

}

public class Inner

{

}

public static void main(String[] argv)

{

Outer o = new Outer();

// Location B

//error 因为类Inner不是静态的

// Inner i = new Inner();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值