1、简述final修饰符的功能
①修饰类:该类不能被继承
②修饰变量 :该变量就是常量(一旦被初始化,就不可以修改)
③修饰方法 :该方法不能被重写
2、写出程序结果 (仔细认真)
public class MyClass {
static int x,y;
static{
int x=5;
x--; //x是局部变量
}
static{
x--; //x=-1
}
public static void main(String[] args) {
x--; //x=-2
myMethod();
System.out.println(x+y+ ++x);//0 + -2 + 1 =-1
}
public static void myMethod() {
y=x++ + ++x;//y = -2 + 0 y=-2 x=0
}
}
分析:有两个静态初始化块,第一个静态初始化快里面定义了一个局部变量x;值得注意的是静态变量也声明了一个下,两者不是同一个,分析的时候按顺序分析,最后的结果应该为-1.
3.程序阅读
public class Test06 {
public static void main(String[] args) {
Sub s = new Sub();
}
}
class Base{
Base(){
this.method(100);
}
{
System.out.println("base");
}
public void method(int i){
System.out.println("base : " + i);
}
}
class Sub extends Base{
Sub(){
super();
super.method(70);
}
{
System.out.println("sub");
}
public void method(int j){
System.out.println("sub : " + j);
}
}
执行步骤:父类的类初始化块-->子类的类初始化块-->父类的实例化初始快--父类构造器-子类实例化初始快-->子类构造器。变量看实际类型,方法看实际对象。
执行结果应该为:
base? ?
sub:100? ?
sub
base :70
4.程序阅读题
class HelloA{
public HelloA(){
System.out.println("HelloA");
}
{
System.out.println("I'm A Class");
}
static{
System.out.println("static A");
}
}
public class HelloB extends HelloA{
public HelloB(){
System.out.println("HelloB");
}
{
System.out.println("I'm B Class");
}
static{
System.out.println("static B");
}
public static void main(String[] args) {
new HelloB();
}
}
执行结果:
?static? A
?static? B
I'm A Class
Hello A
I'm B?Class
Hello B
|