努力刷题,每日三题,题目来源于《Java课后实战训练手册》----清华大学出版社。
第一题
设计数据库连接类,在首次创建类对象时,会自动加载数据库的驱动程序,之后创建的所有类对象都不需要重复加载驱动了,实现效果如图所示。
//本题不会,这里附上了标准答案
public class Demo {
static {
System.out.println("开始加载数据库的驱动程序。");
System.out.println("成功加载数据库的驱动程序。");
}
public Demo() {
System.out.println("创建数据库连接对象");
}
public static void main(String[] args) {
Demo conMySQL = new Demo();
Demo conOracle = new Demo();
}
}
第二题
设计人类,定义年龄属性,重写 toString ()方法,在方法中判断此人类对象是否大于或等于18岁,如果大于或等于18岁,则输出“我XX 岁,我是成年人。”﹔否则输出“我XX 岁,我是未成年人。”,实现效果如图示。
class People {
int age;
public People(int age) {
this.age = age;
}
@Override
public String toString() {
if (this.age >= 18) {
return "我" + this.age + "岁,我是成年人。";
} else {
return "我" + this.age + "岁,我是未成年人。";
}
}
}
public class Adult {
public static void main(String[] args) {
People people = new People(18);
System.out.println(people);
}
}
第三题
张三、李四去饭店吃饭,饭后结账时,张三、李四各拿出100元人民币,几经推操,最后收款员接过了李四的100元人民币。判断张三和李四的100元人民币是不是同一张钞票? 李四和收款员手中的100元RMB是不是同一张钞票?张三和收款员手中的100元人民币是不是同一张钞票?,运行结果如下图所示。
public class Payment {
public static void main(String[] args) {
Integer zsMoney = new Integer(100); // 张三的100元RMB
Integer lisiMoney = 100; // 李四的100元RMB
if (zsMoney == lisiMoney) {
System.out.println("张三和李四的100元RMB是同一张钞票!");
} else {
System.out.println("张三和李四的100元RMB不是同一张钞票。");
}
Integer cashierMoney = 100; // 收款员手中的100元RMB
if (cashierMoney == lisiMoney) {
System.out.println("李四和收款员手中的100元RMB是同一张钞票。");
} else {
System.out.println("李四和收款员手中的100元RMB不是同一张钞票!");
}
if (cashierMoney == zsMoney) {
System.out.println("张三和收款员手中的100元RMB是同一张钞票!");
} else {
System.out.println("张三和收款员手中的100元RMB不是同一张钞票。");
}
}
}
这里补充Integer类的知识点,Integer类在对象中包装了一个基本类型int的值。该类的对象包含一个int类型的字段。此外,该类提供了多种方法,能在int类型和String类型之间互相转换,同时提供了其他的一些处理int类型时非常有用的常量和方法。
然后我们看几个栗子,可以先思考一下结果是什么:
Integer i = 100;
Integer j = 100;
System.out.println(i == j);
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
Integer m = new Integer(100);
Integer n = new Integer(100);
System.out.println(m == n);
如上所示,我们先看第一组:
Integer i = 100;
Integer j = 100;
System.out.println(i == j);
在 i >= -128 并且 i <= 127 的时候,第一次声明会将 i 的值放入缓存中,第二次直接取缓存里面的数据,而不是重新创建一个Ingeter 对象。那么第一个打印结果因为 i = 100 在缓存表示范围内,所以为 true。
我们再看看第二组:
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
128是不在-128到127之间的(我们存储数据的范围是-128~127),所以第一次创建对象的时候没有缓存,第二次创建了一个新的Integer对象,但也没有被缓存进去。故打印结果为false。
最后再看一下第三组:
Integer m = new Integer(100);
Integer n = new Integer(100);
System.out.println(m == n);
因为这个虽然值为100,但是是通过 new 关键字来创建的两个对象,是不存在缓存的概念的。两个用new关键字创建的对象用 == 进行比较,结果必定为 false。
仰天长啸无人畏,长枪策马平天下。