引出
1.下面程序段如何执行:
package com.tianju.test;
public class TestWeekDemo2 {
public static void main(String[] args) {
String s1 = "a"+"b";
String s2 = new String(s1);
if (s1==s2){
System.out.println("= = is succeeded");
}
if (s1.equals(s2)){
System.out.println(".equals() is succeeded");
}
}
}
解析:
每次调用String方法都会创建一个新的String,==用来判断两个引用是否指向同一个对象;.equals()方法用来比较值是否相等;
综上,程序的输出为.equals() is succeeded。
2.代码执行顺序
子类A继承父类B, A a = new A();
则父类B构造函数、
父类B静态代码块、
父类B非静态代码块、
子类A构造函数、
子类A静态代码块、
子类A非静态代码块
执行的先后顺序是?
解析:
静态先执行,父类的静态先于子类:
父类B静态代码块 —> 子类A静态代码块;
然后new 子类A的时候,先new 父类B:
父类B的非静态代码块 —> 父类B的构造函数
最后是子类A的代码:
子类A的非静态代码块 —> 子类A的构造函数
类的初始化顺序
最一般的初始化顺序,包含继承 A->B
父类 static 属性/代码块: 只创建一次
子类的static属性/代码块 :只创建一次
父类的代码块/属性
父类的构造方法
子类的代码块/属性
子类的构造方法
3.public static int i的赋值问题
类X代码如下:
package com.tianju.entity;
public class X {
public static int i;
public int j;
}
测试程序代码如下:
package com.tianju.testweek;
import com.tianju.entity.X;
public class TestXDemo1 {
public static void main(String[] args) {
X x1 = new X();
X x2 = new X();
x1.i = 3;
x1.j = 4;
x2.i = 5;
x2.j = 6;
System.out.println(
x1.i + " " +
x1.j + " " +
x2.i + " " +
x2.j);
}
}
输出值为什么?
解析:
静态先执行,所以静态的i为5,j是不同对象的值,因此分别为4,6
答案:5 4 5 6
4.同上
类代码
package com.tianju.entity;
public class Test {
public static int stVar = 100;
public int var = 200;
public String toString(){
return var + " :" + stVar;
}
}
测试用例:
package com.tianju.testweek;
import com.tianju.entity.Test;
public class TestTestDemo2 {
public static void main(String[] args) {
Test t1 = new Test();
t1.var = 300;
System.out.println(t1);
Test t2 = new Test();
t2.stVar = 300;
System.out.println(t2);
}
}
解析:略
答案:
300 :100
200 :300
4.要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )
A.让该类不使用任何关键字
B.使用orivate:关键字
C.使用orotected关键字
D.使用void关键字
答案:A
总结
刷题是可以是手段,做题不是目的,看题是为了检验掌握相关知识
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/165165.html