面向对象 day2
Java 面向对象 day2
方法
一.方法的概述
在Java的语言中,方法相当于C语言中的函数,但是它与传统的函数也有着明确的不同:在结构化的语言中,函数是一等公民,整个程序是由一个个函数组成的;但是在面向对象的语言里,类是一等公民,整个程序是由一个个类组成的。因此在Java中,方法不能独立存在,它只能属于类或者对象。因此,如果我们要定义一个方法,就必须在类中定义。值得注意的是,如果这个方法添加了修饰符static(这个修饰符后面会详细说明),这个方法就属于这个类,否则的话,这个方法属于这个类的实例。
二.方法的格式说明
访问修饰符 返回值类型 方法名([数据类型 形参名,.....]){
方法体;
[return 返回值;]
}
访问修饰符: 对方法设定访问的权限,有静态修饰符 static ,最终修饰符 final等.
返回值类型: 用于限定返回数据的指定类型,返回值类型可以为基本数据类型/引用数据类型皆可以,并还有 一个void类型 void表示无返回值类型
形参: 形式参数,当前没有任何数据,用于等待方法被调用时,传递一个实际参数
实际参数: 调用方法时,为形参设置的一个实际值,实际参数的类型要与形参保持一致.
Return: 用于返回数据的关键字
返回值: 当方法规定返回值类型后,返回的数据的类型一定与返回值类型保持一致
三.方法的定义
1.无参无返回值方法
无参无返回值,数据只能随着对象的改变而改变
public class Person {
//静态特征,在Java称之为属性(全局变量)
public String name;
public String sex;
public int age;
//无参无返回值,数据只能随着对象的改变而改变
public void print() {
System.out.println("我的名称:"+name+",性别为:"+sex+",年龄:"+age);
}
}
2.带一参数无返回值方法
设置了一个String类型的形参,当行为中需要某些额外元素时,通过参数的形式注入
//设置了一个String类型的形参,当行为中需要某些额外元素时,通过参数的形式注入
public void eat(String food) {
System.out.println("今天吃了一顿"+food);
}
3.带参带返回值方法
通过int money 传入参数,设定了方法的返回值为String类型,return只能返回字符串
/*
* String 是一个字符串类型的返回值类型,返回值类型可以是基本数据类型和引用数据类型
* 设置String类型后,return只能返回字符串
* int money 是形参,用于输入进行操作的数据
*/
public String pay(int money){
if (money>50){
System.out.println("给了"+name+money+"元,买了条中华");
return "中华";
}else if (money>20){
System.out.println("给了"+name+money+"元,买了个哈根达斯");
return "哈根达斯";
}else {
System.out.println("给了"+name+money+"元,买了瓶可乐");
return "可乐";
}
}
4.带多个参数带返回值方法
4.1方法的定义
//通过数组的起始位置和结束位置,获得指定的元素
public Student[] selectStu(int start,int end,Student[] students){
//需要返回数据,就先定义一个对应类型的变量
Student[] s = new Student[end-start+1];
int j=0;
for (int i = start;i<=end;i++){//遍历需要元素
s[j++] = students[i];//将截取的元素放入到新的数组
}
return s;
}
4.2方法的调用
//截取下标1到3的元素
//多个参数的方法调用时,参数的类型要匹配
Student[] s = is.selectStu(1,3,stus);
System.out.println("截取后的数组内容是:");
for (Student student:s){
System.out.println(student.toString());
}
四.方法的常见使用方式
1.方法的参数传递机制
方法的参数分为两种:形参和实参。
形式参数: 用于接收实际参数的变量(形式参数一般就在方法的声明上)
实际参数:实际参与运算的变量
public class TestDemo01 {
public static void main(String[] args) {
int a = 3,b = 4;
change(a,b);//实参
System.out.println("a:"+a+" "+"b:"+b); //a:3 b:4
}
//类中的方法都用public static为前缀
public static void change(int a,int b){//形参
int temp;
temp = a;
a = b;
b = temp;
System.out.println("a:"+a+" "+"b:"+b); //a:4 b:3
}
}
2.形参个数可变的方法
从JDK 1.5之后,Java允许定义形参个数可变的参数。如果在定义方法时,在最后一个形参的类型后增加三点(…),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。形参个数可变的参数本质就是一个数组参数。
public class TestDemo02 {
public static void main(String[] args) {
print(4, "血冷", "风暴", "冰封");
}
//String... books相当于String[] books
public static void print(int num, String... books) {
System.out.print("书名:");
for (String book : books) {
System.out.print(book + " ");
}
System.out.println("num = " + num);
}
}
3.方法重载
方法重载(Overloading)的定义:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。
具体说明如下:
a.方法名相同
b.方法的参数类型,参数个不一样
c.方法的返回类型可以不相同
c.方法的修饰符可以不相同
d.main 方法也可以被重载
代码演示
public class TestDemo03 {
public static void main(String[] args) {
int a = 10;
int b = 20;
String c = "Hi";
sum(a);
sum(a,b);
sum(a,c);
}
public static void sum(int a) {
System.out.println(a);
}
public static void sum(int a, int b) {
System.out.println("a + b = " + (a + b));
}
public static void sum(int a,String c){
System.out.println("a + c = " + (a+c));
}
}
运行结果
10
a + b = 30
a + c = 10Hi