内部类、匿名类、Lambda表达式

1.内部类:在其它类中的类
(a)定义:1.类的定义直接置入2.内部类不能与外部类同名
(b)使用:1.内部使用:普通类使用方法相似 2.冠以外部类名字

class test{
    public static void main(String[] args){
        Parcel p = new Parcel();
        p.testship();

        Parcel.Contents c=p.new Contents(33);
        Parcel.Destination d=p.new Destination("H");
        p.set(c,d);
        p.ship();
    }
}
class Parcel{
    private Contents c;
    private Destination d;
    class Contents{
    }
    class Destination{
    }
    void set(Contents c,Destination d)
    {
    }
    void ship()
    {
    }
    public void testShip()
    {
        ship();
    }

}

(c)使用外部类:直接访问字段和方法,private也可以
(d)修饰符

(e)局部类:一个方法中的类

2.匿名类:
(a)定义:特殊的内部类,无类名,定义时生成该对象的一个实例
(b)使用:1.无类名(父类或接口名)2.定义同时创建实例3.构造时调用父类方法

class test{
    public static void main(String[] args)
    {
        Object obj = new Outer.Outerfun(12);
        System.out.println("Hello!" + obj.infun());
    }
}

class Outer
{
    private int outnum = 5;
    public Object Outerfun(int localVar)
    {

        final int finalLocalVar = 99;
        return new Object{
            public String infun(){
                return ("outnum: " + outnum + "finalLocalVar: " + finalLocalVar);
            }
        };
    }
}

(c)应用:1.界面事件处理
2.排序(比较书的价格并打印)

import java.util.Arrays;
import java.util.Comparator;
class Test
{
    public static void main(String[] args)
    {
        Book[] books = new Book[10];
        for(int i=0;i<books.length;i++)
        {
           books[i] = new Book((int)(Math.random()*100));
        }
        dump(books);
        Arrays.<Book>sort(books, new Comparator<Book>(){
        public int compare(Book book1,Book book2)
        {
            return book1.getprice()-book2.getprice();
        }
        });
        dump(books);
    }
   static void dump(Book[] books)
   {
       for(int i=0;i<books.length;i++)
       {
           System.out.print(books[i]+"");
       }
       System.out.println();
   } 
}

class Book
{
   private int price;
   Book(int price){this.price = price;}
   int getPrice() {return price;}
}

3.lambda是匿名类的一个实例
接口或者说是接口函数的简写
将代码也当成了数据(积分例子,排序例子)

(参数)->结果

x->x*x

起因:

class LambdaRunnable  {
    public static void main(String argv[]) {
        Runnable doIt =  new Runnable(){
            public void run(){ 
                System.out.println("aaa");
            }
        };
        new Thread( doIt ).start();

        Runnable doIt2 = ()->System.out.println("bbb");
        new Thread( doIt2 ).start();

        new Thread( ()->System.out.println("ccc") ).start();

    }
}

积分例子:

interface Function{ double fun( double x);}

public class MyDate {
    public static void main(String[] args)
    { 
        double d = Integral(new Function()
                         {public double fun( double x)
                                  {return Math.sin(x);}
                                }, 0, Math.PI, 1e-5);

         d = Integral(x->Math.sin(x), 0, Math.PI, 1e-5);
         System.out.println(d);
    }

    static double Integral(Function f, double a,    
                           double b, double eps )
    {

    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值