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();
}
}