Java教程

Java编程预习1:《方法》

本文主要是介绍Java编程预习1:《方法》,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java预习1:方法

一、什么是方法,类与方法

在Java开发中,我们的程序设计体系架构是这样的:

操作系统底层 => Java虚拟机 => class文件(字节码) => Java源码

所以我们需要与Java虚拟机交互,我们编写的代码需要经过编译变成字节码,也就是 .class文件,然后交付Java虚拟机,这也就是为何Java可以write once,run everywhere 的原因!然后我们的虚拟机首先会去寻找我们的主方法,作为函数的入口,这里的方法是可以理解为c++的函数,所以首先要要有一个和文件名同名的public类,里面写有主方法,便于虚拟机寻找!

疑问:这个public类是否唯一?

这个public类是至多只能有一个!因为public类是老大,是程序的处理入口和主体,然后其他的自定义类经过编译会生成独立的 .class 文件,作为public生成的 .class 文件的数据源,向public类提供数据。所以,如果有两个public类,那么其他的数据源,该给谁提供数据呢?所以一山不容二虎,只会有唯一的public类!

多类编程可以吗?和c++对比呢?

在Java中,类可以理解为一个大的工程项目,类里面的方法是组成工程项目的零件部位!可以多类编程,但是其他的类是拿来给public类提供数据的(也许我有说错,请指出!),这一点和c++很不一样,c++中,多类编程是为了丰富对象的类型,便于对整个工程乃至对整个世界类型化,世界中的元素就是类型的实例,更加轻便的编程!但是Java中多类编程到底作用在哪里呢?我还没有学到,还得到后面才能回答!

方法怎么调用?

如果是一个类中的方法,可以直接像c++调用函数那样去调用,但是如果是跨类调用,则会报错!需要用如下格式: 类名.方法名 去调用,因为这样,Java虚拟机才能正确的找到书写了这个方法的代码段的位置,可以认为Java虚拟机是在类中寻找方法(也许我有说错,请指出!)

方法的类型

方法可以分为两类,这个和函数一样,就是分为带返回值的和不带返回值的。带返回值的必须以return语句结束方法!如果想结束不带返回值的方法,就要用:return ;(和c++一样)

方法的重载

这个也和c++一样,具体的看我下面的代码示例,会有注释说明

方法的递归调用:

这个还是和c++一样,就不说了,这些都很简单!

代码示例:

package Main;
import java.util.Scanner;

public class Main {
	
	// 主方法是程序的入口
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();int b = sc.nextInt();
		
		// 加有 "static" 的方法,应该用 " 类名 + '.' " 的方式调用
		// 在这个类:Main 种,调用 add() 方法,就是:Main.add(参数1, 参数2);
		
		System.out.println("不带返回值的方法测试:");
		Main.Add(a, b);
		
		// 带有返回值的 方法 的使用
		System.out.println("带有返回值的方法测试:");
		int res = Main.Mul(a, b);
		System.out.println(a + "*" + b + "=" + res);
		
		// 测试跨类调用方法
		// 跨类调用方法的时候,类名. 是不可以省略的,因为我们调用方法的时候会在当前本类的虚拟机中搜索方法
		// 跨类调用是搜索不到的,所以需要加上 类名. 去到另一个类中去搜索方法
		
		System.out.println("方法的跨类调用测试:");
		MyClass.TestNewClass();
		
		int f = sc.nextInt();
		int ans = MyClass.Fac(f);
		if(-1 == ans)
			System.out.println("The num is too big!");
		else
			System.out.println("The result is :" + ans);
		
		// 方法的重载:
		/*
		 * 1.函数名称保持一致
		 * 2.函数修饰列表保持一致
		 * 3.函数类型保持一致
		 * 4.函数的参数列表不同:
		 * 		4.1 参数的个数不同
		 * 		4.2 参数的类型不同
		 * 		4.3 参数的顺序不同
		 */
		
		System.out.println("方法的重载测试:");
		System.out.println("Double's result is:" + Main.NumSum(1.0, 2.0) + " Int's result is:" + Main.NumSum(3, 4) + " Three nums add is:" + Main.NumSum(5, 6, 7));
		
		// 方法的递归调用测试
		
		System.out.println("方法的递归调用测试:");
		int m = sc.nextInt();
		int FibAns = MyClass.Fib(m);
		System.out.println(FibAns);
		
		// 及时关闭输入扫描线,做到 0 warning
		sc.close();
	}
	
	// 类内方法:
	
	public static void Add(int a, int b) {
		int sum = a + b;
		System.out.println(a + "+" + b + "=" + sum);
	}
	
	public static int Mul(int a, int b) {
		return a * b;
	}
	
	// 方法的重载:
	
	public static int NumSum(int a, int b) {
		return a + b;
	}
	
	public static double NumSum(double a, double b) {
		return a + b;
	}
	
	public static int NumSum(int a, int b, int c) {
		return a + b + c;
	}
	
}

// 自定义类,实验跨类调用方法(不能写public!)
class MyClass{
	public static void TestNewClass() {
		System.out.println("MyClass' Test Function is used! Hello!");
	}
	
	public static int Fac(int n) {
		if(n >= 49) {
			return -1;
			// 不然算的太慢了
		}
		int res = 1;
		for(int i = 1;i <= n;i++)
			res *= i;
		return res;
	}
	
	// 方法的递归调用
	public static int Fib(int n) {
		if(n <= 1)
			return 1;
		return Fib(n - 1) + Fib(n - 2);
	}
}
这篇关于Java编程预习1:《方法》的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!