刷题的狂欢-----JAVA每日三练-----第三天

Posted 敲代码的xiaolang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题的狂欢-----JAVA每日三练-----第三天相关的知识,希望对你有一定的参考价值。

努力刷题,每日三题,题目来源于《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。

仰天长啸无人畏,长枪策马平天下。

以上是关于刷题的狂欢-----JAVA每日三练-----第三天的主要内容,如果未能解决你的问题,请参考以下文章

刷题的狂欢-----JAVA每日三练-----第十八天

刷题的狂欢-----JAVA每日三练-----第十六天

刷题的狂欢-----JAVA每日三练-----第十五天

刷题的狂欢-----JAVA每日三练-----第七天

刷题的狂欢-----JAVA每日三练-----第八天

刷题的狂欢-----JAVA每日三练-----第十天