10.方法和方法重载

1. 方法概述

在面向过程出现的时候,方法就出现了。在程序中要存储数据,会采用变量来存储,以方便我们复用。而方法的出现使为了存储程序中的功能代码,以方便我们复用。

例如:为了方便我们反复使用键盘录入功能,Scanner 类提供了一个 nextXX(),每次使用键盘录入直接调用该方法即可。

2. 方法的语法和分类

语法

// 方法声明
[访问权限修饰符] [其他修饰符] 返回值类型 方法名([方法的参数列表]) {
    // 方法体
    // 功能代码....
    [return 返回值;]
} 

访问权限修饰符:目前先认识一个 public ,代表公共的,意味着在项目中可以被使用。

其他修饰符:目前先认识一个 static ,代表静态的,后面专门讲。

返回值类型:一个方法,一个功能在执行完之后返回的数据的类型。 例如:nextInt() : int,因为你要获取到输入的数据,所以必须定义返回值,因为要得到的返回数据是整数所以返回值类型是int。

方法名:为了方便下次再使用,要起名。命名规范与变量名一致。

方法参数列表: 一个方法内部要执行的功能,有些时候是要进行某些数据处理,但是要处理的数据必须由你来提供给它,所以它需要提前规范好需要什么数据。例如:Arrays.toString(数组) : String

return:结束方法,并将返回结果返回到调用者位置。调用者可以将结果存储为变量或者直接输出等方式来使用。

把方法理解为榨汁机。

分类

以后学其他语言也基本是这4个分类。其他语言中可能叫函数、方法。

你们前期最害怕的事:就是不知道什么时候定义什么类型方法。建议多观察 Java 中的方法。

按照语法中是否有参数、是否有返回值来进行分类。

  1. 无参无返(没有参数、没有返回值)

    一般这种方法,用于实现一些简单内容的输出或执行。

    // 没有返回值,返回值类型需要定义为 void,代表空。
    public void run() {
    	System.out.printf("%s今年%d岁,身高%.1fcm,正在跑步!\n", name, age, height);
    }
    

    使用过的该类型方法:

    • System.out.println();

      public void println() {
          newLine();
      }
      
  2. 有参无返(有参数、没有返回值)

    一般这种方法,用于实现一些需要根据条件或者一些基础数据,才能实现输出或执行的场景。

    // Arrays工具类中的方法,可以实现对传入的数组的元素进行升序排序
    public static void sort(int[] a) {
        
    }
    

    使用过的该类型方法:

    • System.out.println(1);

      public void println(int x) {
          synchronized (this) {
              print(x);
              newLine();
          }
      }
      
    • Arrays.sort(数组);

  3. 无参有返(没有参数,有返回值)

    一般这种方法,适合于一些功能执行完可以返回一个结果的情况。因为没有参数,往往这类方法缺少灵活性、扩展性。

    // Math.random() 生成[0.0, 1.0)
    public static double random() {
       return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
    }
    

    使用过的该类型方法:

    • nextInt() : int
    • nextDouble() : double
    • next() : String
    • random() : double
    • length() : int
  4. 有参有返(有参数有返回值)

    前期这种我们用的少,因为我们使用时一般都是用作于输出。后期用的越来越多,因为后期功能要求复杂。

    // Arrays.toString() 将数组转换为字符串
    public static String toString(int[] a) {
         return xxx;
    }
    

    使用过的该类型方法:

    • toString(数组) : String
    • copyOf(数组, 长度) : 新数组
    • equals(字符串1, 字符串2) : boolean

3. 构造方法

概述

构造方法,顾名思义就是 Java 中用于对象创建/实例创建的方法。

每个类都有一个默认的构造方法:无参构造方法,你不写也会有。

如果你写了任意一个构造方法,默认的无参构造将不再提供。(建议每个类都自己写个无参,以防止未来定义有参构造之后,无参没有了)

语法

[访问权限修饰符] 方法名([方法参数列表]) {
    
}

构造方法只有有参和无参两种,因为构造方法的作用就是为了创建该类型的对象,那也就没有必要写上返回值类型了。

构造方法的方法名必须和类名一致,意味着 Student 类的构造方法就是 Student()。

带参构造的用处

使用带参构造方法可以用于属性快速赋值。

public class Student {

	public String name;
	public int age;
	public String classId;
	
	// 无参构造方法
	public Student() {
		System.out.println("呵呵呵?");
	}
	
	// 带/有参构造方法
	// 方法参数列表中的名字无所谓,随便写,主要重点在于类型
	// 因为外界关注的是这个方法需要什么类型的参数,而不是参数名
	public Student(String stuName, int stuAge, String stuClassId) {
		name = stuName;
		age = stuAge;
		classId = stuClassId;
	}
	
}
// 使用传统方式来创建对象并赋值
Student student = new Student();
student.name = "小明";
student.age = 18;
student.classId = "353";

// 通过带参构造方法来创建对象并赋值
Student student2 = new Student("小红", 17, "349");

4. this关键字

在局部变量和成员变量出现重名时,局部变量优先级更高(优先使用局部变量)。

就近原则。

如果真重名了,可以使用 this 关键字区分。

this 关键字: 单词含义:这个。

  • 它代表着当前类的对象,只不过它是一种代词。 (自己、他、你…)

  • 谁在使用当前方法,那么方法内的 this 代表的就是谁。

public class Student{
    public String name;
    public Student(String name) {
        // 此刻 this 代表的就是xiaoMing对象
        this.name = name;
    }
    
    public void printInfo() {
        // 此刻 this 代表的就是xiaoMing对象
        Sout("我的名字叫;" + this.name);
    }
}

main() {
    Student xiaoMing = new Student("小明");
    xiaoMing.printInfo();
    
    Student xiaoHong = new Student("小红");
}

可以使用 this 在当前类中,调用对象能调用的东西。

  • 调用成员变量:this.属性名
  • 调用方法:this.方法名()
  • 调用构造:this([参数列表])

如果短期内没能理解,先掌握它什么时候使用。例如:在构造方法中用于区分成员变量和局部变量。

5. 成员变量和局部变量区别

定义的位置:

  • 成员变量:定义在类中,方法外(一般称为属性)

  • 局部变量(Local Variable):定义在类中,方法内

    • 咱们最开始定义的变量都是局部变量,因为它们在main方法中
    • 方法声明上的参数列表,也是局部变量

初始值不同:

  • 成员变量:有初始值(默认值)、和当初数组一样
  • 局部变量:没有初始值,不赋值不能使用

作用域不同:

变量作用域:与其直接所属的 {} 有关。

  • 成员变量:在类中所有成员方法中都可以使用
  • 局部变量:只能在定义它的方法中使用

生命周期不同: (生老病死,什么时候诞生,什么时候销毁)

  • 成员变量:对象变量、实例变量,它是随着对象的创建而产生,随着对象的销毁而销毁
  • 局部变量:随着它所在的方法中出现,随着方法结束而销毁

6. 方法重载现象

方法重载(Overload):在一个类中出现的方法名相同,参数列表不同的情况就被称为方法重载。与返回值类型、访问权限修饰符等无关!!!(例如:nextInt())

如果没有方法重载的支持,多个方法的方法名相同显然是不可能的。

例如:下方的四行输出语句,其实调用的不是一个方法,而是四个方法。

// println(String x) : void
System.out.println("xxx");
// println(int x) : void
System.out.println(111);
// println(double x) : void
System.out.println(12.5);
// println(char x) : void
System.out.println('x');

这样你就可以不需要记忆那么多的方法名,因为它们都是一样的功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值