黑马程序员之模版方法模式
昨天看的毕老师视频,毕老师写的时候程序主要的作用是查看某些方法的执行速度,这个方法很好用、很实用。不过当时发现了一个问题那就是 抽象的方法和super类中的相关方法耦合度很低,根本没牵涉到数据的传递之类的。
今天就突发奇想 写个耦合度高点的 本人技术有限有几个地方没处理好 欢迎指正。
需求:有在某个地方看到过说在内存中有一个字符串池,当你申明一个字符串时,它会先在字符串池中找,如果找到就直接用,如果找不到就重新自己创建
ps:这句话好像是学.net的时候听过的 现在就想起来了测试下,想起来张孝祥老师说过有个设计模式叫享元模式看看是不是String已经是在用了 。
代码如下
1 abstract class MotherMoth{//创建一个抽象的super类 2 public final void bijiao(String a,String b){//创建super的比较函数 3 System.out.println("参数:"+a+"\t\t=\t\t参数:"+b+"\t的值为:"+(a==b)); 4 System.out.println("参数:"+a+"\t\tEquals\t\t参数:"+b+"\t的值为:"+a.equals(b)); 5 } 6 7 8 9 public abstract String[] function();//这是个方法在我的计划中是提供数据用的 不过因为是比较用的 所以需要两个字符串 所以就返回数组了 10 //可惜返回的数组长度在本抽象方法中没法控制长度 如果有更好的解决方法请留言 11 12 public final void kaishi(){//定义暴露出来的类 final是因为不想让子类修改 上面的以一样 13 String[] agrs=function();//从抽象函数中获取数组 14 if (agrs!=null&&agrs.length>0) {//本来在我的测试中根本没写这个判断 发表博客的时候才加上的 还有个问题问大家 在这句语句中有个 15 //agrs!=null 我以前看到过别人写的是 null!=agrs 好像这个还牵涉什么性能问题 16 // 现在忘了 网大家指点下 17 bijiao( agrs[0], agrs[1]);//调用 18 }else 19 System.out.println("传入的数组不符合父类的要求"); 20 21 } 22 } 23 24 class Function extends MotherMoth { 25 26 @Override//预编译命令 27 public String[] function() {//重写父类的抽象 28 29 String[] str = new String[2];//声明String数组 返回数据用 30 bijiao("ab","ab");//因为本类集成了MotherMoth类 所以就有了bijiao方法 调用bijiao函数(直接传入双引号定的数据) 31 str[0]=new String("ab");//用String类型的数据初始化数组 32 str[1]=new String("ab"); 33 return str;//返回数组 34 } 35 36 public static void main(String[] args) {//main方法 37 new Function().kaishi();//用本类的匿名对象访问从父类继承下来的kaishi()方法 38 } 39 }
总结:用String创建的实例存放在堆中 变量名称存放的只是引用 。用双引号直接创建的String对象好像就是用了享元模式 或者说相同的就是同一个