7 方法
7.1基本概念
方法:类的共同行为,封装了一段逻辑代码,在封装方法时,尽可能的只完成一项功能,
(避免将多个功能封装到一个方法内)。
方法的位置: 在类体中与main方法是并列关系,类体中可以有多个方法。方法的使用: 方法属于对象的行为,应该使用:引用.方法,这些方法动态绑定到对象上。
7.2 方法的定义
方法的定义:
固定语法:
修饰词 返回值类型 方法名(形式参数){
逻辑代码
}修饰词:
(1)public---公共的
(2)protected---受保护的
(3)private---私有的
(4)也可以不写修饰词,即默认的static修饰词可以与上述三个连用
返回值类型;
(1)void---无返回值类型
(2)java语言的任意一种类型: 可以是基本数据类型,也可以是引用数据类型方法名:命名时尽量做到见名知意,驼峰命名法,首字母小写
形式参数:用于接受调用者传入的数据,与变量的声明语法相同。
方法签名:方法名+形参列表=方法签名
形参列表:指的是形参的类型顺序列表。如:public void sum(int a,int b)
方法签名是:sum + int ,int
public int eat(String food)
方法签名是:eat+String
关键字return:
作用1:结束方法逻辑
作用2:如果返回值类型标记的是java语言类型的某一个类型名,
那么return关键字后必须跟着一个此类型的数据或变量。
当方法有返回值类型时,return关键字后的数据就是此方法要返回的数据,返回给调用者。扫描二维码关注公众号,回复: 2661030 查看本文章
举例
如:
int num = Math.random();
方法random()返回一个数据给main方法。
mian方法存入num变量中
如:
reg1: ------------------------------------------------------------------->reg1(调用):
public static void sum(){ main(String[] args){
int a = 3; sum();
int b = 5; }
System.out.println(a+b);
[return;]----返回值类型处写void时,return可有可无。
}
reg2: 计算两个整数a和b的和 ------------------------------------> reg2(调用):
public static void sum(int a,int b){ main(String[] args){
int sum = a+b; /*
System.out.println(sum); 调用者main在使用sum(int a,int b)时,
} 需要给形式参数赋值,赋的值叫实际参数
*/int x = 1;
int y = 2;
sum(x,y);
}
reg3: --------------------------------------------------------------------------->reg3(调用): public static int sum(){ main(String[] args){
int a = 3; int n = sum();
int b = 5; }
return a+b;
}reg4:---------------------------------------------------------------------------->reg4(调用):
public static int sum(int a,int b){ main(String[] args){
int sum = a+b; int m = 10;
return sum*3; int n = 20;
} sum(m,n)*5 可以直接使用比如:sum(m,n)*5;
也可以放在另一个变量中:int t = sum(m,n)
}
总结:
调用方法时:无返回值时: 方法名(有参就传参);
有返回值时:返回值类型 变量=方法名(有参就传参);
示例:
import java.util.Arrays;
import java.util.Scanner;
public class MethodDemo01{
public static void main(String[] args){
//System.out.pritln(length(5.5)) 或者double area = area(4.5) System.out.println(area);
//System.out.println(area(4.5)) 或者double area = area(4.5) System.out.println(area);
//[第二种更常用]double area = area(4.5) System.out.println(area);
//area_square();
//char[] c = randomArr(); System.out.println(Arrays.toString(a));
int num = (int)(Math.random()*100+1);
guessNum(num);
}
/**计算半径为r的圆的周长 length*/
public static double length(double r){
double l = 2*3.14*r;
return l;
}
/**返回半径为r的圆的面积:area*/
public static double area(double r){
double s = 3.14*r*r;
return s;
}
/**计算宽为3,高为5的方形的面积area_square*/
public static void area_square(){
int a = 3;
int b = 5;
System.out.println(a*b);
}
/**返回一个字符数组,元素为随机7个小写字母randomArr*/
public static char[] randomArr(){
char[] a =new char[7];
for (int i = 0;i<7 ;i++ ){
a[i]= (char)(Math.random()*26+97);
}
return a;
}
/**
定义要给猜数字的方法:被猜的数字由形参决定:直到猜中为止。范围[1,100] guessNum
*/
public static void guessNum(int num){
Scanner sc = new Scanner(System.in);
int guess = -1;
do{
System.out.println("输入您猜的数字:");
guess = sc.nextInt();
if (guess>num){
System.out.println("猜大了");
}
if (guess<num){
System.out.println("猜小了");
}
}while(guess!=num);
System.out.println("猜中了游戏结束!");
}
}
7.3 方法的重载
方法的重载(overload):
在同一个类型中,方法名相同,参数列表不同ps:在方法调用时,编译器会检查类的信息中是否有此方法签名的方法。
c.sum(3,5):
此时编译器检查类中是否有c.sum(int,int)这样的方法
如果有编译通过,没有编译失败,并提示错误
7.4 方法的重写
方法的重写: 子类可以重新编写继承父类的方法。
(1)方法名相同,参数列表相同
(2)返回值类型可以相同,也可以是父类方法的返回值类型的子类型
(返回值更加精确)
(3)修饰词可以不变,或者可以比父类的修饰权限更大(青出于蓝而胜于蓝)
7.5 构造方法
构造方法(构造器):是特殊的方法,作用是用来给成员变量(Field,字段,属性)初始化。
特殊在----->(1)没有返回值这个位置
(2)方法名与类型名相同
如:点:
public class Point{
int x ;
int y ;修饰词 类型名(){
……普通方法
}
默认无参构造器:如果定义类时,没有添加构造方法,系统会默认提供一个公有的没有形式参数的构造方法。
public Point(){}
注意:如果定义期间,提供了构造器,系统不再提供
有参构造器:因为构造器是用来给成员变量初始化的,为了方便,所以形式参数的名称都与成员变量一致。
因此,在赋值时,this.不能省略。
构造器的调用:只能是new关键字来调用
new 构造方法(有参传参)。
对象的实例化:是由new完成的(对象此时就存在了,但是成员变量都是默认值)
对象的成员变量初始化:是由new调用的构造器进行的(成员变量是第一次被赋值)
构造器的重载:
一个类中可以有多个构造器。
方法名相同,参数列表不同(形参类型顺序不同)
补充:
main方法内:
引用数据类型与基本数据类型的区别:
引用数据类型的数据,称之为对象。
存储在内存中的某一个特定区域,即:堆
引用类型的变量也存储在内存中的特定区域,即:栈
引用类型的变量存储的内容 不是对象,而是对象在堆空间的位置信息
基本数据类型的数据,不叫对象。
基本数据类型的变量,存在栈里,存储的内容是基本类型的数据。