文章目录
Day06
6.1 方法的定义及分类
方法:
也叫做函数,实现某个功能
方法分类:
系统提供的方法
-
常用的系统提供的方法:
如:nextInt(),next(),nextDouble(),print()。。。 -
用户自定义方法
6.2 方法的基本语法格式
[修饰符] 返回值类型 方法名称([参数列表]){
方法体
}
- []中的内容是可有可无的
- 暂时将方法的修饰符编写为public static
- 返回值类型有两种情况:
第一种:无返回值类型,也就是编写为void
第二种:有返回值类型,目前可有编写9中数据类型之一 - 方法名称,也就是标识符,建议编写单词,即见名知义。建议采用驼峰命名法,如age,getAge
- 方法体实现具体的功能
6.3 方法的调用
语法格式
类名.方法名称([参数列表]);
方法名称([参数列表]);//只能调用本类的方法
public class Method01 {
//使用方法完成输出5遍HelloWorld
//注意:1.方法是编写在类中的,2.用户自定义方法不并不会自动执行,则必须进行方法的调用
public static void print(){
for(int i = 1;i <= 5;i++){
System.out.println("第"+i+"遍HelloWorld");
}
}
public static void main(String[] args){
System.out.println("OK");
//调用Method01类中的print方法,如果方法在本类中类名可省略,即print();即可
Method01.print();
}
}
class Method02 {
public static void main(String[] args){
//调用Method01类中的print方法,调用其他类的方法,类名不可省略
Method01.print();
}
}
6.4 无参无返回类型方法
public static void 方法名称();
class Method03 {
//输入1-100中的每个数要求使用无参无返回类型的方法完成(void),参数列表去掉
public static void print(){
for(int i = 1;i <= 100;i++){
System.out.println(i);
}
}
}
class Method04 {
public static void main(String[] args){
//调用Method03类中的print方法
Method03.print();
}
}
6.5 无参带返回类型方法
public static 返回类型 方法名称();
- 题目只有一个结果,此时就可以编写为带返回类型的方法完成
- 如果方法有返回类型,则在方法体中必须编写return,通过return返回结果
- 方法的返回类型必须与return后面值的类型一致
- 通过return将结果返回到方法的调用处,因此在调用处处理结果
- 可以在一个方法体中编写多个return,但最终只执行一个相匹配的值将值返回
class Method03 {
/*
//输入1-100中的每个数要求使用无参无返回类型的方法完成(void),参数列表去掉
public static void print(){
for(int i = 1;i <= 100;i++){
System.out.println(i);
}
}
*/
//计算1+2的和,要求使用方法完成
public static int sum(){
int s = 1 + 2;
return s;//通过return将结果s返回到方法调用处
}
}
class Method04 {
public static void main(String[] args){
/*
//调用Method03类中的print方法
Method03.print();*/
int a = Method03.sum();//先调用方法,然后将方法返回的结果如3再赋给左侧变量名称a
System.out.println(a);
}
}
class Method05 {
//判断一个字符是大写字母,小写字母,还是数字字符
public static String result2(){
char ch = 'd';
if(ch >= 'A' && ch <= 'Z'){
return "大写字母";
}else if(ch >= 'a' && ch <= 'z'){
return "小写字母";
}else if(ch >= '0' && ch <= '9'){
return "数字字符";
}
return "其他字符";
}
//判断12是奇数还是偶数
public static String result(){
if(12 % 2 == 0){
return "是偶数";
}else{
return "是奇数";
}
}
public static void main(String[] args){
//调用return方法
String s = result();
System.out.println(s);
System.out.println(result2());
}
}
6.6 break,continue,return之间区别
break:
- 表示中断,可以在switch case以及循环中使用,当遇到break则结束当前整个switch case或循环
continue:
- 表示继续,只能在循环中使用,遇到continue时则结束本次循环,继续执行下一次循环
return:
- 表示返回,只能在方法中使用。当遇到return时则返回到方法的调用处
- 特殊形式:当方法是无返回类型时,可以在方法体中编写return,但是必须编写为
return;
class Method06{
public static void print3(){
for(int i = 1;i <= 5;i++){
if(i == 3){
return;//是3的时返回方法调用出即终止方法
}
System.out.print(i+"\t");
}
System.out.println("OK");
}
public static void print2(){
for(int i = 1;i <= 5;i++){
if(i == 3){
continue;
}
System.out.print(i+"\t");
}
System.out.println("yes");//是3的时候跳出for循环,继续下一个循环
}
public static void print(){
for(int i = 1;i <= 5;i++){
if(i == 3){
break;
}
System.out.print(i+"\t");
}
System.out.println("Hello");//是3的时候中断for循环,执行此语句
}
public static void main(String[] args){
print();//1 2 Hello
print2();//1 2 4 5 yes
print3();//1 2
}
}
class Method07{
//根据输入的星期返回每天做的事情
public static String getInfo(){
String week = "星期五";
switch(week){
case "星期一":
case "星期二":
case "星期四":
return "学习";
//break;编译错误,因为return后面不必有代码
case "星期三":
case "星期五":
return "自习";
//break;
default:
return "休息";
//break;
}
}
public static void main(String[] args){
//调用本类中的getInfo
System.out.println(getInfo());
}
}
6.7 带参无返回类型方法
当题目中有未知的数,因此可以编写为带参数的方法
class Method08{
//计算两个数的差,可编写带参无返回类型的方法完成
public static void sub(double num1,double num2){
double result = num1 - num2;
System.out.println(num1+"-"+num2+"="+result);
}
//使用方法完成,输出1-n中的每个数
//分析:题目含有未知参数,因此编写带参数的方法
//参数语法格式:数据类型 参数名称,多个参数使用英文逗号隔开。方法中未知参数为形参
public static void print(int n){ //n就是形参
for(int i = 1;i <= n;i++){
System.out.println(i);
}
}
public static void main(String[] args){
//调用本类中的print方法
print(5);//5表示实参,实参必须与形参个数一致,类型一致,顺序一致
System.out.println();
print(10);
sub(1.2,3);
}
}
方法内存分析图
总结:
- 方法中声明的变量未局部变量,其中形参也属于局部变量
- 方法执行完毕,该方法出栈(弹栈),同时该方法的局部变量也随之释放空间
- 各方法中声明的局部变量可以同名,但没有任何影响,各自都是独立的
6.8 带参带返回类型方法
class Method09{
//判断一个三位数是否为水仙花数
//分析:三个未知数,编写为参数,有两种情况但只得到一个结果,是否这种情况一般编写为Boolean类型
public static boolean isFlag(int num){
//先判断是否为三位数
if(num >= 100 && num <= 999){
//获取num中各个位的数
int gw = num % 10,sw = num / 10 % 10,bw = num / 100;
//计算各个位立方和
int sum = gw*gw*gw+sw*sw*sw+bw*bw*bw;
//判断立方和是否和当前数相等
/*
if(sum == num){
return true;//true是水仙花数
}else{
return false;//false表示不是水仙花数
}*/
return sum == num;//等价于前面的if else
}else{
return false;//false表示不是水仙花数
}
}
//判断一个年龄,输出老年,中年,青年,少年
public static void print(int age){
if(age > 65){
System.out.println("老年");
}else if(age >= 30){
System.out.println("中年");
}else if(age >= 18){
System.out.println("青年");
}else{
System.out.println("少年");
}
}
//编写带返回带参数的方法
public static String getInfo(int age){
if(age >= 65){
return "老年";
}else if(age >= 30){
return "中年";
}else if(age >= 18){
return "青年";
}
return "少年";
}
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("请输入年龄:");
int age = input.nextInt();
print(age);
System.out.println(getInfo(age));
System.out.println(isFlag(12));
}
}
综合案例:
class Method10{
//编写方法输出所有三位数的水仙花数
public static void print(){
for(int i = 100;i <= 999;i++){
if(Method09.isFlag(i)){
System.out.println(i);
}
}
}
public static void main(String[] args){
//调用本类中的print方法
print();
}
}
6.9 方法重载
在同一个类中,方法的名字可以相同,参数类型必需不同(类型不同、个数不同、顺序不同),与返回类型无关,构成方法的重载
class Method11{
//总结:在同一个类中,方法的名字可以相同,参数类型必需不同(类型不同、个数不同、顺序不同),与返回类型无关,构成方法的重载
//练习:使用方法完成,获取两个数的最大数
public static int max(int a,int b){
return a > b ? a : b;
}
public static void max(double x,int y){//void不带返回
System.out.println(x > y ? x : y);
}
public static void main(String[] args){
System.out.println(max(12,11));
max(0.9,1);
}
}