您的位置:首页 > 理论基础 > 数据结构算法

第十四讲 适配器模式、内部类、递归算法、数据结构之链表、包装类、Eclipse开发环境设置

2017-12-07 15:20 381 查看
导读

适配器模式,也是Java二十三中设计模式之一。让其他的对象可以适应规范,其实这样说是不是觉得很迷糊啊?

我们把适配器模式当做我们家电用的插座,对,就是这样来想就很容易学习和应用了。

内部类:日常开发中用的很少,但它却很重要。

递归算法:方法调用自身的操作,但必须要有一个出口,因为避免进入死循环。

链表:拥有一个pre节点和next节点,element是代表即将存储或者删除的对象。

包装类:就是JDK7.0以上的版本,提供对原生数据的对象化包装。

Eclipse工具的常用设置。对于一般地开发人员,是必须要设置的,因为可以提高开发效率和团队规范化!

一、适配器模式设计代码

public interface Target {

    /**

     * 这是源类Adaptee也有的方法

     */

    public void sampleOperation1(); 

    /**

     * 这是源类Adapteee没有的方法

     */

    public void sampleOperation2(); 

}    

public class Adaptee {

    

    public void sampleOperation1(){}

}

public class Adapter extends Adaptee implements Target {

    /**

         * 由于源类Adaptee没有方法sampleOperation2()

         * 因此适配器补充上这个方法

         */

   

@Override

    public void sampleOperation2() {

        //写相关的代码

    }

}

概念:内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。

定义:内部类可以是静态static的,也可用public,default,protected和private修饰。

(而外部顶级类即类名和文件名相同的只能使用public和default)。

注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。

对于一个名为outer的外部类和其内部定义的名为inner的内部类。

编译完成后出现outer.class和outer$inner.class两类。

所以内部类的成员变量/方法名可以和外部类的相同。


1. 成员内部类

|-
员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。
|- 同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。

public class
Outer { 

    public static void main(String[] args) { 

        Outer outer = new Outer(); 

        Outer.Inner inner = outer.new Inner(); 

        inner.print("Outer.new"); 

        inner = outer.getInner(); 

        inner.print("Outer.get"); 
    } 

 

    // 个人推荐使用getxxx()来获取成员内部类,尤其是该内部类的构造函数无参数时 
    public Inner getInner() { 

        return new Inner(); 



 

    public class Inner { 

        public void print(String str) { 

            System.out.println(str); 

        } 

    } 




2. 局部内部类:局部内部类,是指内部类定义在方法和作用域内。

代码参考如下:
public class Parcel4 { 

    public Destination destination(String s) { 

        class PDestination implements Destination { 

            private String label; 

            private PDestination(String whereTo) { 

                label = whereTo; 

      } 

 

            public String readLabel() { 

                return label; 

            } 

        } 

        return new PDestination(s); 

    } 

 

    public static void main(String[] args) { 

        Parcel4 p = new Parcel4(); 

        Destination d = p.destination("Tasmania"); 

    } 


(一次性用得比较多,记住就好!)
匿名内部类:实现一个接口或者抽象类——

((Button) findViewById(R.id.start)).setOnClickListener(new Button.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
      new Thread() { 

            @Override 

            public void run() { 

                // TODO Auto-generated method stub 

            } 

        }.start(); 

    } 

}); 

递归算法——
代码如下:
public class Fibonacci {  

    /** 

     * time:2012.12.2 

     * author:王金宇 

     * description:用递归实现斐波那契数列,但是此方法是嫉妒危险的,适用于求解比较小的位置数值 

     */  

    public static void main(String[] args) {  

        Fibonacci fibonacci=new Fibonacci();  

        int result=fibonacci.fib(5);  

               System.out.println(result);  

    }  

  

    public int fib(int index){  

        if(index==1||index==2){  

            return 1;  

        }else{  

            return fib(index-1)+fib(index-2);  

        }  

    }  

}  



执行结果示意图——



Java包装类技术——

int是原生类型,与之对应的是Integer类。

对,一个是数值,一个是对象,显然是不同的两种数据类型。

怎么判断呢?其实更简单,对象有属性和方法,而原生的没有,因为原生就本身的意思。直接拿来用就ok了,测试一下就知道了。

代码如下:

int num = 100;

Integer integer = new Integer(num);

这样做的目的,除了可以互相转换之外,还可以增强面向对象对原生数据类型更加优秀的编程方式——

Java中有8种基本数据类型,与之对应的就有八种包装类,一般地说,包装类更方便用于集合或者框架技术配置。

关于如何设置Eclipse开发环境,我这里有一篇博客值得一看。

我们都是学习技术的,分享是我们最大的乐趣,别人怎么想我不晓得,反正宁叔觉得都是中国的IT技术人员;

我们必须要努力,突破技术点,比国外的技术员都要厉害。哈哈~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息