一些引人思考java小程序
来源:互联网 发布:澳洲金融专业知乎 编辑:程序博客网 时间:2024/05/01 12:02
整理了一下以前做过的几个java小程序,希望这些小例子能带给正在学java的你一些更深层次的理解·····
1.关于对象跟对象引用,以及equals()跟==的用法:
public class Eq {public static void main(String[] args) {Integer n1=new Integer(47);Integer n2=new Integer(47);System.out.println(n1==n2);System.out.println(n1!=n2);}}
好,在打印出结果之前先花十秒思考下输出结果会是什么吧······
你可能会以为输出的结果先是true,再是false,但是事实却刚好相反!!!为什么呢?其实,尽管对象的内容是相同的,然而对象的引用确是不同的,而==和!=比较的是对象的引用。
那么问题来了,想要比较两个对象的实际内容是否相同,,又该如何操作呢?这时可以使用equals(),但是这个方法不适合基本类型,对基本类型用==和!=即可。
public class Eq2 {public static void main(String[] args) {Integer n1=new Integer(47);Integer n2=new Integer(47);System.out.println(n1.equals(n2));}}这次结果就是true了。
然而事实却并非这么简单假使我创建了自己的类,就像下面:
class Value{int i;}public class Eq3 {public static void main(String[] args) {Value v1= new Value();Value v2= new Value();v1.i=v2.i=100;System.out.println(v1.equals(v2));}}输出结果是false!!!
那么这是为什么呢?
这是由于equals()的默认行为是比较引用。所以除非在自己的新类中覆盖equals()方法,否则不可能出现我们所期待的结果。
2.赋值问题与别名现象
class Tank{int level;}public class test1{public static void main (String[] args){Tank t1=new Tank();Tank t2=new Tank();t1.level=9;t2.level=47;System.out.println("1:t1.level:"+t1.level+",t2.level:"+t2.level);t1=t2;System.out.println("2:t1.level:"+t1.level+",t2.level:"+t2.level);t1.level=27;System.out.println("3:t1.level:"+t1.level+",t2.level:"+t2.level);}}还是老规矩,清先花十秒想想t1,t2的值是什么···
输出结果是:
这个程序里面,赋值操作的是一个对象的引用,所以修改t1的同时也修改了t2!这是因为t1和t2包含的是相同的引用,指向同一个对象(原来t1指向9的引用被覆盖后丢失了,被java垃圾回收了)。这种现象就称为“别名现象”。想避免t1和t2指向同一个对象的麻烦,可以改为:t1.level=t2.level。
3.foreach的使用:
public class ForEachString {public static void main(String[] args) {for(char c:"An African Swallow".toCharArray())System.out.println(c+"");}}结果:
说明:将“An African Swallow”的每一个字符都赋值给c,依次输出。
4.构造器的继承
先上代码:
父类Professer默认构造方法:
class Professer(){ private string name; private int number; public Professer(string n,int no){ name=n; number=no; } public teach(){} }子类:
class OldProfesser(){ private string name; private int number ; private int age; public do(){} }继承:
class OldProfesser extends Professer(){ private string name; private int number ; private int age; public do(){} public static void mian(string[] args){ OldProfesser o=new OldProfesser(); }运行程序,这时报错了!!!
怎么会这样?!其实原因是这样的:在java中,父类构造器默认无参构造器的情况下,默认先查找父类构造器,再调用子类构造器,但父类的默认构造器这时java不认账,所以报错了。
解决办法是在子类中使用super(x···y)方法,记住放在子类第一行哦,不然又要报错了····
5.组合应用
class WaterSource{private String s;WaterSource(){System.out.println("WaterSource()");s="Constructed";}public String toString(){return s;}}public class SprinklerSystem {private String value1,value2,value3,value4;private WaterSource source=new WaterSource();private int i;private float f;public String toString(){return "value1="+value1+" "+"value2="+value2+" "+"value3="+value3+" "+"value4="+value4+"\n"+"i="+i+""+"f="+f+" "+"source="+source;}public static void main(String[] args) {SprinklerSystem sp=new SprinklerSystem();System.out.println(sp);}}结果:
好了,经过上述四道题目的测试,是不是觉得java还有很多高深的地方呢?那就一起努力,钻研编程语言的艺术吧···
以后这篇博客会不定时更新有趣例子的···如果你有什么有趣的,纠结的例子,欢迎在评论里留下你的代码和大名,大家一起探讨探讨。
- 一些引人思考java小程序
- 一些java小程序
- java的一些小程序!
- 程序小思考(一)
- 一些入门的java小程序
- 一些简单得JAVA小程序
- java的一些小程序例子--2
- java的一些小程序例子--3
- Cookie的一些小思考
- 程序开发的一些思考
- 一些c小程序
- 一些小程序
- 一些效果+++小程序
- 关于小白程序员的一些思考。
- 关于拖延症的一些小思考
- 一些需要思考的小故事
- java的一些小程序的例子--1
- java语言的一些思考
- java中抽象类,接口,多态!
- 一个md5类
- UVA - 10115 Automatic Editing
- Python 正则表达式decode xml entities
- 提高开发效率的十五个 Visual Studio 使用技巧
- 一些引人思考java小程序
- Java开发中的23种设计模式详解
- Coming Back 2
- 朴素贝叶斯分类算法
- Oracle Instant Client(即时客户端)pl/SQL连接远程oracle客户端 安装与配置
- MongoDB安装
- FragmentTabHost切换Fragment时避免重复加载UI
- ios UITextField UITextView 限制内容长度
- Copy List with Random Pointer复制带有随机指针的链表