java学习之路 之 基本语法-方法(函数)及练习题

方法(函数):方法是类或对象行为特征的抽象,也称为函数。 Java里的方法不能独立存在,所有的方法必须定义在类里。

方法的声明的语法格式:
修饰符 返回值类型 方法名(参数类型 形参1,参数类型 形参2,….){
  程序代码  return 返回值;


其中:
形式参数:在方法被调用时用于接收外部传入的数据的变量。
参数类型:就是该形式参数的数据类型。
返回值:方法在执行完毕后返还给调用它的程序的数据。
返回值类型:方法要返回的结果的数据类型。
实参:调用方法时实际传给函数形式参数的数据。

方法的调用:
方法只有被调用才会被执行

方法的调用的注意事项:
没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
定义方法时,方法的结果应该返回给调用者,交由调用者处理。
方法中只能调用方法,不可以在方法内部定义方法。

方法的重载(overload):在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

重载的特点:
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。

例如:
//返回两个整数的和  
int add(int x,int y){return x+y;}
//返回三个整数的和  
int add(int x,int y,int z){return x+y+z;}
//返回两个小数的和  
double add(double x,double y){return x+y;}

方法的参数传递:
方法,必须有其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值

Java的实参值传入方法

Java里方法的参数传递方式只有一种:值传递。  即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

方法练习题:

/**
	方法: 也称为函数, 解决功能封装的问题
	声明:
		修饰符 返回值类型 方法名(形参类型1 形参1, 形参类型2 形参2, 形参类型3 形参3 .....) {
			语句;
			return 返回值类型的具体值;
		}
*/
public class MethodTest {
	
	// 方法 = 方法签名 + 方法体
	public static int add(int a, int b) {
		System.out.println("add(int " + a + ", int " + b + ")");
		int c = a + b;
		return c;
		// c = f(a,b)
	}
	
	public static void test() { // 既没有返回值, 也没有形参
		System.out.println("test()...");
	}
	
	
	
	public static void main(String[] args) {
		System.out.println("main begin...");
		// 方法调用的依据只能是方法签名(方法的使用说明书)
		// 方法名(实际参数1, 实际参数2);
		// 方法的返回值 就是方法调用本身
		int x = add(10, 20);
		System.out.println("x:" + x);
		
		System.out.println(add(100, 200));
		
		//System.out.println(test()); // 方法的标志是() 方法无返回值时, 不可以打印输出方法调用
		test(); // 方法的标志是() 
		
		System.out.println("main end...");
	}
}

/*
1.编写程序,定义三个重载方法并调用。方法名为mOL。
三个方法分别接收一个int参数、两个int参数、一个字符串参数。第一个方法执行平方运算并输出结果,
第二个方法执行相乘并输出结果,第三个方法执行输出字符串信息。
在主类的main ()方法中分别用参数区别调用三个方法。
*/
public class Method1 {
	
	public static int mOL(int a) {
		int result = a * a;
		return result;
	}
	public static int mOL(int a,int b) {
		int result = a * b;
		return result;
	}
	public static String mOL(String str) {
		String tem = str;
		return tem;
	}
	public static void main(String[] args) {
		System.out.println(mOL(5));
		System.out.println(mOL(5,6));
		System.out.println(mOL("我是第三个方法!"));
	}
}

/*
定义三个重载方法max(),第一个方法求两个int值中的最大值,第二个方法求两个double值中的最大值,
第三个方法求三个double值中的最大值,并分别调用三个方法。
*/
public class Method2 {
	
	public static int max(int a,int b) {
		int max = a > b ? a : b;
		return max;
	}
	public static double max(double a,double b) {
		double max = a > b ? a : b;
		return max;
	}
	public static double max(double a,double b,double c) {
		double max = a > b ? a : b;
		max = max > c ? max : c;
		return max;
	}
	public static void main(String[] args) {
		System.out.println(max(5,6));
		System.out.println(max(5.5,6.6));
		System.out.println(max(5.5,6.6,7.7));
	}
}

//编写程序,声明一个method方法,在方法中打印一个10*8的矩形,在main方法中调用该方法。
//再声明一个方法method2, 在方法中打印一个n*m的矩形,在main方法中调用该方法.
//再声明一个方法method3, 在方法中打印一个n*m的矩形,打印完后计算矩形的周长并返回, 在main方法中调用该方法,
//打印矩形的周长
public class MethodExer {
	
	public static void method() {
		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 8; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	public static void method2(int n, int m) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	public static int method3(int n, int m) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		int l = (m + n) * 2;
		return l;
	}
	
	public static void main(String[] args) {
		System.out.println("main begin");
		// 方法调用
		//method();
		//method2(10, 8);
		System.out.println(method3(20, 60)); // 先打印矩形, 再打印返回值
	}
}

public class StaticClass1{
	//方法的“连环调用”以及方法的重载,在Method类中调用实现
	public static void method() {
		//打印一个10*8的矩形
			method2(10,8);
		}
		
	public static void method2(int n,int m) {
		//打印一个n*m的矩形
		for (int i = 0;i < n;i++) {
			for (int j = 0;j < m;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
		
	public static int method3(int n,int m) {
		//打印一个n*m的矩形并返回其周长
		method2(n,m);
		return 2 * (n + m);
	}
	
	public static int method3(int n) {
		//打印一个n*n的正方形并返回其周长
		return method3(n,n);
	}
}

public class Method {
//编写程序,声明一个method方法,在方法中打印一个10*8的矩形,在main方法中调用该方法。
//在声明一个method2,在方法中打印一个n*m的矩形,在main方法中调用该方法。
//在声明一个method2,在方法中打印一个n*m的矩形并计算矩形的周长,在main方法中调用该方法。
	public static void main(String[] args) {
		/*
		StaticClass.method();
		StaticClass.method2(8,9);
		System.out.println(StaticClass.method3(7,8));
		System.out.println(StaticClass.method3(7));
		*/
		
		StaticClass1.method();
		StaticClass1.method2(2,3);
		System.out.println(StaticClass1.method3(10,15));
		System.out.println(StaticClass1.method3(7));
	}
}



  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一、判断题(每题1分,共15分) 1、Java允许创建不规则数组,即Java多维数组中各行的列数可以不同。 ( ) 2、接口和类一样也可以有继承关系,而且都只能支持单继承。 ( ) 3、所有类至少有一个构造器,构造器用来初始化类的新对象,构造器与类同名,返回类型只能为void。 ( ) 4、包是按照目录、子目录存放的,可以在程序中用package定义包,若没有package一行,则表示该文件中的类不属于任何一个包。 ( ) 5、Java对事件的处理是采用委托方式进行的,即将需要进行事件处理的组件委托给指定的事件处理器进行处理。 ( ) 6、在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在前面,子类放在后面。 ( ) ..... 二、单项选择题(每题2分,共30分) 1、若在某一个类定义中定义有如下的方法: final void aFinalFunction( );则该方法属于( )。 A、本地方法 B、解态方法 C、最终方法 D、抽象方法 2、main方法Java Application程序执行的入口点,关于main方法方法头以下哪项是合法的( )。 A、 public static void main() B、 public static void main(String[ ] args) C、 public static int main(String[ ] args) D、 public void main(String arg[ ]) 3、在Java中,一个类可同时定义许多同名的..... ...... 14、一个线程的run方法包含以下语句,假定线程没有被打断,以下哪项是正确的( ) 1.try{ 2. sleep(100); 3. }catch(InterruptedException e){ } A、不能通过编译,因为在run方法中可能不会捕捉到异常。 B、在第2行,线程将暂停运行,正好在100毫秒后继续运行。 C、在第2行,线程将暂停运行,最多在100毫秒内将继续运行。 D、在第2行,线程将暂停运行,将在100毫秒后的某一时刻继续运行。 15、以下哪个接口的定义是正确的?( ) A、 interface A { void print() { } ;} B、 abstract interface A { void print() ;} C、 abstract interface A extends I1, I2 //I1、I2为已定义的接口 { abstract void print(){ };} D、 interface A { void print();} 三、程序阅读题(1~8题每题4分,第9题占8分,共40分) 1、若文件test.dat不存在,则试图编译并运行以下程序时会发生什么情况? import java.io.*; class TestIO { public static void main(String[] args) { try{ RandomAccessFile raf=new RandomAccessFile("test.dat","r"); int i=raf.readInt(); } catch(IOException e){System.out.println("IO Exception"); } } } 2、以下程序的输出结果为 。 public class EqualsMethod { public static void main(String[] args) { Integer n1 = new Integer(12); Integer n2 = new Integer(12); System.out.print(n1= =n2); System.out.print(“,”); System.out.println(n1! =n2); } } ........ 1、在java中如果声明一个类为final,表示什么意思? 答:final是最终的意思,final可用于定义变量、方法和类但含义不同,声明为final的类不能被继承。 2、父类的构造方法是否可以被子类覆盖(重写)? 答:父类的构造方法不可以被子类覆盖,因为父类和子类的类名是不可能一样的。 3、请讲述String 和StringBuffer的区别。 答:String 类所定义的对象是用于存放“长度固定”的字符串。 StringBuffer类所定义的对象是用于存放“长度可变动”的字符串。 4、如果有两个类A、B(注意不是接口),你想同时使用这两个类的功能,那么你会如何编写这个C类呢? ........

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值