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 )
{
}
}