System.out.print(str.charAt(check -= 1) + ” “);
} else {
System.out.print(str.charAt(0) + ” “);
}
}
}53、静态内部类的测试题与详细分析
代码
public class T {
static class t1 {
int i = 5; public int printA() {
return i;
}
} static class t2 extends t1 {
int i = 100; public int printB() {
return i;
} public void printC() {
{
System.out.println(super.i);
}
}
} public static void main(String… args) {
t1 t = new t1();
t2 tt = new t2();
tt.printC();
System.out.println(tt.printB());
System.out.println(t.printA());
System.out.println(tt.printA());
t1 ttt = (t1) tt;
System.out.println(ttt.printA());
}}
问题
请写出它的输出结果:
先把结果写下,在自己编译运行看看正确与否……
答案:
5
100
5
5
5
分析:
tt.printC();
System.out.println(tt.printB());
//这个调用子类方法,输出i, 所以为 100
System.out.println(t.printA());
// 这个是父类的方法,当然输出5
System.out.println(tt.printA());
// 这个是子类调用了继承自父类的方法,不过里面的i并没有继承关系,所以
// 代码里使用的依然是父类的 i,所以输出依然是5
t1 ttt = (t1) tt;
System.out.println(ttt.printA());
// 多态的表现
// 但是变量 i 并没有继承关系,所以 父类的方法依然使用的是自己的变量i
// 输出还是5 54、编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式:定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类
初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些