ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java编程预习1:《方法》

2021-06-08 19:56:10  阅读:126  来源: 互联网

标签:Java int 编程 System 预习 println 方法 public


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,int,编程,System,预习,println,方法,public
来源: https://blog.51cto.com/u_15262702/2883288

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有