Java类-toString,equal,

Java类的一些笔记:
1、toString方法
Java中所有的类都是Object的子类,因此都拥有toString方法,如果不重写toString类的话,打印出来的是类名@hashCode,而在使用中如果有Person类

Person p = new Person();
System.out.println(p);
System.out.println(p.toString());

的执行效果是一样的。实际上,这两个方法可以理解成“自我描述”的方法,因此我们可以重写这个这个类。

2、==和equals比较运算符
对于==运算符,对于基本类型变量和引用型的变量,其实际的效果是不一样的。
对于基本类型变量,其值相等,则==返回true。
对于引用类型变量,当两个变量指向同一个对象的时候,才会返回true。
对于引用类型的变量,我们想要判断其值是否相等的话,我们应该重写equals()方法,最常用的例子是String,下面写一个demo

class Temp{
	public boolean equals(Object obj)
	{
		if(((String)obj).equals("Test"))
			return true;
		else
			return false;
	}
}
public class TestEqual{
	public static void main(String[] args)
	{
		Temp temp=new Temp();
		System.out.println(temp.equals("test")?"True":"False");

	}
}

3、单例类(Singleton)类
单例类其目的在于保证该类只有一个对象,比如只允许一个数据库引擎访问节点等等。
方法:将该类的构造器隐藏起来,同时提供一个使用static修饰的public方法,在该方法中检测是否已经有实例,如果有,则直接返回,如果没有,则创建新的实例。例子

class Singleton
{
	private static Singleton instance;
	private Singleton(){}

	public static Singleton getInstance()
	{
		if(instance==null)
		{
			instance=new Singleton();
		}
		return instance;
	}
}

public class TestSingleton{

	public static void main(String[] args)
	{
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		System.out.println(s1==s2);
	}

}

运行结果为

true

这种思想要记住一下,会很有用。

3、闭包(Closure)和回调
书中举了这样一个例子,有一个Teachable接口和一个Programmer基类,都提供了一个work的方法,方法签名完全相同,但实现的功能不相同,此处有这样一个问题,如果一个人,既是程序员,又是教师,那么该怎么去调用?如果传统的使用方法
创建新类 class TeachableProgrammer extends Programmer implements Teachable的话,在该类中重写work方法,那么只会实现一种办法,为了解决这个问题,使用闭包和回调来完成。

abstract class Programmer{
	public void work()
	{
		System.out.println("I am a Programmer");
	}
}
interface Teachable{
	public void work();
}
class TeachableProgrammer extends Programmer
{
	String name;
	public TeachableProgrammer()
	{
	}	
	public TeachableProgrammer(String name)
	{
		this.name=name;
	}
	public void teach()
	{
		System.out.println("I am a teacher");
	}

	private class Closure implements Teachable{
		public void work()
		{
			teach();
		}
	}
	public Teachable getCallbackReference()
	{
		return new Closure();
	}
}

public class TestClosure{
	public static void main(String[] args)
	{
		TeachableProgrammer tp = new TeachableProgrammer("Name");
		tp.work();
		tp.getCallbackReference().work();
	}
}

运行结果为

I am a Programmer
I am a teacher

其本质就在于在类TeachableProgrammer中新建了一个内部类,该内部类继承了Teachable接口,然后在内部类中重写重复的方法,在这个方法调用TeachableProgramer中的方法,解决方法名、实现完全一样的情况。

About: happyhls


发表评论

电子邮件地址不会被公开。 必填项已用*标注