Java开发--8--面向对象(下)

6.3 方法

1、理论基础

方法的定义:方法是解决一类问题的步骤的有序组合,其包含于类或对象中,它在程序中被创建,在其他地方被引用。

方法的优点:使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。

方法的命名规则:方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。下划线可能出现在 JUnit 测试方法名称中,用以分隔名称的逻辑组件。一个典型的模式是:test<MethodUnderTest>_<state>。例如testPop_emptyStack

2、定义类的方法

类中除了定义成员变量,还可以定义方法,用于描述对象的行为,封装对象的功能。

定义类中的方法:

class 类名{
	修饰词  返回值类型  方法名称([参数列表]){
		方法体…………            //方法写法不变
	}           //如果有其余代码的话下方写入其余代码
}

方法的所有部分:

修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。

返回值类型:方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。

方法名:是方法的实际名称。方法名和参数表共同构成方法签名。

参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

方法体:方法体包含具体的语句,定义该方法的功能。

代码实例:

public static int age(int birthday){
	...
}

代码实例:

public static int max(int num1, int num2) {      //返回两个整型变量数据的较大值
	int result;
	if (num1 > num2)
		result = num1;
	else
		result = num2;
	return result;          //有返回值方法中必须要写的。即return
}                               //此处只能返回int型

3、方法调用代码实例

public class TestMax {
	public static void main(String[] args) {      //主方法
		int i = 5;
		int j = 2;
		int k = max(i, j);         //调用
		System.out.println( i + " 和 " + j + " 比较,最大值是:" + k);
	}        //输出结果:5和2比较,最大的是:5
	
	public static int max(int num1, int num2) {      //返回两个整数变量较大的值
		int result;
		if (num1 > num2)
			result = num1;
		else
			result = num2;
		return result;
	}
	
    //创建一个有相同名字但参数不同的方法。
    //当传入int型参数时int型的max方法就会被调用,
    //当传入double型参数时double型的max方法就会被调用。
    //这就叫做方法重载。
    //该代码段中的double,如果仅有此处不同,则不算是重载
	public static double max(double num1, double num2) {
		if (num1 > num2)
			return num1;
		else
			return num2;
		return result;
	}
}

4、方法签名(方法重载)

方法的签名包含如下两个方面:方法名和参数列表

一个类中,不可以有两个方法的签名完全相同,即一个类中不可以有两个方法的方法名和参数列表都

完全相同。而如果一个类的两个方法只是方法名相同而参数列表不同,是可以的。

签名=方法名+参数列表(包括参数个数以及参数类型)

编译错误代码实例:

public class Cashier{
	//完全一样,编译错误
	public boolean pay(double money){
		……
	}
	public boolean pay(double money){
		……
	}
}

编译正确代码实例:

public class Cashier{
	//方法名相同参数列表不同,编译正确
	public boolean pay(double money){
		……
	}
	
	//方法名称相同,参数列表不同,称之为方法的重载
	public boolean pay(String cardId,String cardPwd){
		……
	}
}        

编译器在编译时会根据签名来绑定调用不同的方法,可以把重载的方法看成是完全不同的方法,只不过恰好方法名相同而已。

Aoo o = new Aoo();             //创建对象
o.say();             //调用第一个方法
o.say("wkj");            //调用第二个方法
o.say("wkj",36);           //调用第三个方法
o.say(18,"wkj");          //调用第四个方法
class Aoo{                 //方法重载调用自动匹配
	void say(){}             //第一个方法
	void say(String name){}              //第二个方法
	void say(String name,int age){}             //第三个方法
	void say(int age,String name){}           //第四个方法
	//int say(){return 5;}             //编译错误,和第一个方法相同
	//void say(String name1){}         //编译错误,和第二个方法相同
}

5、构造方法

主要功能是为类中的属性初始化。

一个对象被创建时,使用构造方法初始化该对象。构造方法和它所在类的名字相同,但没有返回值。通常使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。如果没有自定义构造方法,Java将提供一个默认构造方法,它把所有成员初始化为0。

构造方法是在类中定义的方法,不同于其他的方法,构造方法的定义有两点规则:

1、构造方法的名称必须与类名相同。
2、构造方法没有返回值,也不能写void。构造方法也可以重载。

[访问修饰符] 类名(){
	构造方法体;
}

代码实例:

class MyClass {        //一个简单的构造函数,少了返回值类型
	int x;
	MyClass(int i) {     //以下是构造函数,方法名和类名相同
		x = i;
	}
}

6、this关键字

this关键字在方法体中,用于指向调用该方法的当前对象。即哪个对象调用方法,this指的就是哪个对象。严格来讲在方法中需要通过this关键字指明当前对象。

使用场景:

1、表示当前对象。
2、调用本类中的构造方法。
3、表示类中的属性和构造方法。

构造方法常用于实现对象成员变量的初始化:

class Cell{
	int row;
	int col;
	public Cell (int row,int col){        //两个参数
		this.row = row;           //通过this关键字来区分成员变量和参数
		this.col = col;           //将col赋给当前类的
	}
}
	
class TestCell{
	public static void main(String args[]){
		Cell c1 = new Cell(15,6);     //传入参数
		printCell(c1);        //c1.row=15并c1.col=6
	}
}

7、参数传递

参数传递一般有两种,一种是传值,另一种是传地址。传值是指在调用方法时,把参数的值直接传递给方法,传地址则是给方法提供参数的地址。

代码实例:基本数据类型的参数传递

public class ParamTransfer{
	public int money;
	void amethod(int i){
		//注意对比形参i和money的值的变化
		System.out.println("方法得到的i的值为:"+i);       //输出:100
		i = i * 5;
		System.out.println("方法执行语句i=i*5后i的值为:"+i);   //输出:500
		System.out.println("money的值为:"+this.money);    //输出:100
	}
	
	public static void main(String[] args){
		ParamTransfer pt=new ParamTransfer();
		pt.money=100;
		pt.amethod(pt.money);      //把money作为参数传递给方法
	}
}

6.4 Java时间和日期

1、使用printf格式化日期

printf方法可以很轻松地格式化时间和日期。使用两个字母格式。它以%t开头并且以下面表格中的一个字母结尾。

转换符 说明 示例
c 包括全部日期和时间信息 星期六 十月 27 14:21:20 CST 2007
F “年-月-日” 格式 2007-10-27
D “月/日/年” 格式 10/27/07
r “HH:MM:SS PM” 格式(12时制) 02:25:51 下午
T “HH:MM:SS” 格式(24时制) 14:28:16
R “HH:MM” 格式(24时制) 14:28

代码实例:

import java.util.Date;
public class DateDemo {
	public static void main(String args[]) {
        //初始化Date对象
		Date date = new Date();

      	// c的使用。输出结果:全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012
		System.out.printf("全部日期和时间信息:%tc%n",date);

        // f的使用。输出结果:年-月-日格式:2012-09-10
		System.out.printf("年-月-日格式:%tF%n",date);

        // d的使用。输出结果:月/日/年格式:09/10/12
		System.out.printf("月/日/年格式:%tD%n",date);

       	// r的使用。输出结果:HH:MM:SS PM格式(12时制):10:43:36 上午
		System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);

        // t的使用。输出结果:HH:MM:SS格式(24时制):10:43:36
		System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);

       	// R的使用。输出结果:HH:MM格式(24时制):10:43
		System.out.printf("HH:MM格式(24时制):%tR",date);
	}
}

2、Java休眠:sleep

sleep()使当前线程进入停滞状态,让出CPU的使用。

代码实例:

try { 
	System.out.println(new Date( ) + "\n"); 
	Thread.sleep(1000*3);              //休眠3秒
	System.out.println(new Date( ) + "\n"); 
} catch (Exception e) { 
	System.out.println("Got an exception!"); 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章