一、Java方法
方法引用通过方法的名字来指向一个方法。方法引用可以使语言的构造更紧凑简洁,减少冗余代码。方法引用使用一对冒号 :: 。
下面,我们在 Car 类中定义了 4 个方法
作为例子来区分 Java 中 4 种不同方法的引用。
例:
package com.runoob.main;
@FunctionalInterface
public interface Supplier<T> {
T get();
}
class Car {
//Supplier是jdk1.8的接口,这里和lamda一起使用了
public static Car create(final Supplier<Car> supplier) {
return supplier.get();
}
public static void collide(final Car car) {
System.out.println("Collided " + car.toString());
}
public void follow(final Car another) {
System.out.println("Following the " + another.toString());
}
public void repair() {
System.out.println("Repaired " + this.toString());
}
}
构造器引用:它的语法是
Class::new,或者更一般的
Class< T >::new
例:
final Car car = Car.create( Car::new );
final List< Car > cars = Arrays.asList( car );
静态方法引用:它的语法是
Class::static_method
例:
cars.forEach( Car::collide );
特定类的任意对象的方法引用:它的语法是
Class::method
例:
cars.forEach( Car::repair );
特定对象的方法引用:它的语法是
instance::method
例:
final Car police = Car.create( Car::new );
cars.forEach( police::follow );
方法引用实例
Java Tester.java 文件
import java.util.List;
import java.util.ArrayList;
publi c class Test {
public static void main(String args[]){
List names = new ArrayList();
names.add("Google");
names.add("Runoob");
names.add("Taobao");
names.add("Baidu");
names.add("Sina");
names.forEach(System.out::println);
}
}
实例中我们将
System.out::println 方法作为静态方法来引用。
运行结果:
二、重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
1.被重载的方法必须改变参数列表(参数个数或类型不一样);
2.被重载的方法可以改变返回类型;
3.被重载的方法可以改变访问修饰符;
4.被重载的方法可以声明新的或更广的检查异常;
5.方法能够在同一个类中或者在一个子类中被重载。
6.无法以返回值类型作为重载函数的区分标准。
例:
public class Test{
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
//以下两个参数类型顺序不同
public String test(int a,String s){
System.out.println("test3");
return "returntest3";
}
public String test(String s,int a){
System.out.println("test4");
return "returntest4";
}
public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}
运行结果:
三、java递归方法
1)有反复执行的过程(调用自身)
2)有跳出反复执行过程的条件(递归出口)
例 :
public class Test {
public static void hanoi(int n,int p1,int p2,int p3){
if(1==n)
System.out.println("盘子从"+p1+"移到"+p3);
else
{
hanoi(n-1,p1,p3,p2);
System.out.println("盘子从"+p1+"移到"+p3);
hanoi(n-1,p2,p1,p3);
}
}
public static void main(String[] args) {
hanoi( 4, 1, 2, 3);
}
}
运行结果: