public class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("多线程");
}
}
public class LambdaDemo {
public static void main(String[] args) {
//方法1:重写Runnable类的run()方法
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
public class LambdaDemo {
public static void main(String[] args) {
//方法2:匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("多线程");
}
}).start();
}
}
public class LambdaDemo {
public static void main(String[] args) {
//方法3:lambda表达式
new Thread(() -> {
System.out.println("多线程");
}).start();
}
}
public interface Eatable {
void eat();
}
public class EatableImpl implements Eatable {
public void eat() {
System.out.println("用手吃饭");
}
}
public class EatableDemo {
public static void main(String[] args) {
Eatable eatable = new EatableImpl();
useEatable(eatable);
}
public static void useEatable(Eatable e) {
e.eat();
}
}
public class EatableDemo {
public static void main(String[] args) {
Eatable eatable = new EatableImpl();
useEatable(eatable);
//方法2:匿名内部类方法实现
useEatable(new Eatable() {
@Override
public void eat() {
System.out.println("用叉子吃饭");
}
});
//方法3:lambda表达式实现
useEatable(() -> {
System.out.println("用筷子吃饭");
});
}
public static void useEatable(Eatable e) {
e.eat();
}
}
public interface Flyable {
void fly(String s);
}
public class FlyableDemo {
public static void main(String[] args) {
useFlyable(new Flyable() {
@Override
public void fly(String s) {
System.out.println(s);
System.out.println("使用直升机飞翔天际");
}
});
}
public static void useFlyable(Flyable f) {
f.fly("飞");
}
}
public interface Flyable {
void fly(String s);
}
public class FlyableDemo {
public static void main(String[] args) {
useFlyable((String s) -> {
System.out.println(s);
System.out.println("使用滑翔翼飞翔");
});
}
public static void useFlyable(Flyable f) {
f.fly("飞");
}
}
public interface Addable {
int add(int a,int b);
}
public class AddableDemo {
public static void main(String[] args) {
useAddable((int a, int b) -> {
return a + b;
});
}
public static void useAddable(Addable a) {
int x = a.add(10, 20);
System.out.println(x);
}
}
public interface Flyable {
void fly(String s);
}
public interface Addable {
int add(int x, int y);
}
public class LambdaDemo {
public static void main(String[] args) {
useAddable((int x, int y) -> {
return x + y;
});
//参数类型可以省略,如果有多个参数,不能只省略一个
useAddable((x, y) -> {
return x + y;
});
//如果参数只有一个,小括号可以省略
useFlyable(s -> {
System.out.println(s);
});
//如果代码块语句只有一条,可以省略大括号和分号。如果该条语句是return语句,return也要省略。
useAddable((x, y) -> x + y);
useFlyable(s -> System.out.println(s));
}
private static void useFlyable(Flyable f) {
f.fly("翱翔于天际");
}
private static void useAddable(Addable a) {
int num = a.add(10, 20);
System.out.println(num);
}
}
public interface Inter {
void show();
// void method();
}
public class LambdaDemo {
public static void main(String[] args) {
useInter(() -> System.out.println("hello"));
//匿名内部类,必须要有上下文环境
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类");
}
}).start();
//根据局部变量的赋值得知lambda对应的接口
Runnable r = () -> System.out.println("Lambda表达式");
new Thread(r).start();
//根据调用方法的参数得知lambda对应的接口
new Thread(() -> System.out.println("Lambda表达式")).start();
}
private static void useInter(Inter i) {
i.show();
}
}
public interface Inter {
void show();
default void method(){
System.out.println("默认方法");
}
public static void test(){
System.out.println("静态方法");
}
}
public interface Flyable {
public static void test(){
System.out.println("FLyable静态方法");
}
}
public class InterImpl implements Inter, Flyable {
@Override
public void show() {
System.out.println("重写show");
}
}
public class InterDemo {
public static void main(String[] args) {
Inter i=new InterImpl();
i.show();
i.method();
// i.test();//错误
Inter.test();
Flyable.test();
}
}
public class InterImpl implements Inter{
}
public interface Inter {
default void show1() {
System.out.println("show1开始");
show();
method();
System.out.println("show1结束");
}
default void show2() {
System.out.println("show2开始");
show();
method();
System.out.println("show2结束");
}
private void show(){
System.out.println("java");
System.out.println("python");
System.out.println("golang");
}
static void method1() {
System.out.println("method1开始");
method();
System.out.println("method1结束");
}
static void method2() {
System.out.println("method2开始");
method();
System.out.println("method2结束");
}
private static void method(){
System.out.println("java");
System.out.println("python");
System.out.println("golang");
}
}
public class InterDemo {
public static void main(String[] args) {
Inter i = new InterImpl();
i.show1();
i.show2();
Inter.method1();
Inter.method2();
}
}
public interface Printable {
void printString(String s);
}
public class PrintableDemo {
public static void main(String[] args) {
usePrintable((String s) -> {
System.out.println(s);
});
usePrintable(s -> System.out.println(s));
//方法引用符::
usePrintable(System.out::println);
}
public static void usePrintable(Printable p) {
p.printString("java");
}
}
public interface Converter {
int convert(String s);
}
public class ConverterDemo {
public static void main(String[] args) {
useConverter((String s)->{
return Integer.parseInt(s);
});
useConverter(Integer::parseInt);
}
private static void useConverter(Converter c){
int number =c.convert("666");
System.out.println(number);
}
}
public class PrintString {
public void printUpper(String s){
String result = s.toUpperCase();
System.out.println(result);
}
}
public interface Printer {
void printUpperCase(String s);
}
public class PrinterDemo {
public static void main(String[] args) {
userPrinter((String s) -> {
System.out.println(s.toUpperCase());
});
//lambda表达式被对象的实例方法替代的时候,它的形式参数全部传递给该方法作为参数
PrintString printString = new PrintString();
userPrinter(printString::printUpper);
}
private static void userPrinter(Printer p) {
p.printUpperCase("hello");
}
}
public interface MyString {
String mySubString(String s, int x, int y);
}
public class MyStringDemo {
public static void main(String[] args) {
useMyString((String s, int x, int y) -> {
return s.substring(x, y);
});
useMyString((s, x, y) -> s.substring(x, y));
//lambda表达式被类的实例方法替代时,第一个参数作为调用者,其余的参数全部传递给方法作为形参
useMyString(String::substring);
}
private static void useMyString(MyString myString) {
String s = myString.mySubString("Hello", 2, 5);
System.out.println(s);
}
}
public class Student {
private String name;
private int age;
public Student() {}
public Student(String name, int age) {this.name = name;this.age = age;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
}
public interface StudentBuilder {
Student build(String name, int age);
}
public class StudentDemo {
public static void main(String[] args) {
useStudentBuilder((String name, int age) -> {
Student student = new Student(name, age);
return student;
});
useStudentBuilder((name, age) -> new Student(name, age));
//lambda表达式被构造器替代时,形式参数全部传递给构造器作为参数
useStudentBuilder(Student::new);
}
private static void useStudentBuilder(StudentBuilder s) {
Student stu = s.build("张三", 24);
System.out.println(stu.getName() + ":" + stu.getAge());
}
}