目录
- Java方法
- 一.什么是方法
- 二.方法声明
- 三.方法分类
- 四.数组作为参数
- 五.方法重载
- 六.传值
- 七.可变参数列表
- 八.实现简单综合例子
Java方法
一.什么是方法
所谓方法就是用来解决一类问题的代码的有序集合,是一个功能模块。
二.方法声明
访问修饰符:public/private/protected
返回类型:void及各种数据类型;
方法名:和变量一样
三.方法分类
方法在类的内部定义
1.无参无返回值:
package com.imooc.function;
public class MethodDemo1 {
//打印星号
public void printStar(){
System.out.println("********************");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MethodDemo1 myMethod=new MethodDemo1();
myMethod.printStar();
System.out.println("哈哈");
myMethod.printStar();
}
}
2.无参带返回值:
package com.imooc.function;
public class MethodDemo1 {
//打印星号
public int Rectangle(){
int length=10,width=3;
int getArea=length*width;
return getArea;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int result;
MethodDemo1 myMethod=new MethodDemo1();
System.out.println("面积为:"+myMethod.Rectangle());
}
}
3.带参无返回值:
package com.imooc.function;
public class MethodDemo1 {
public float max(float a,float b){
float max;
if(a>b){
max=a;
}
else{
max=b;
}
SYstem.out.print(a+"和"+b+"的最大值是:"+max);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MethodDemo1 myMethod=new MethodDemo1();
float a=10.45f,b=5.12f;
myMethod.max(a, b);
}
}
4.带参带返回值:
package com.imooc.function;
public class MethodDemo1 {
public int fac(int n){
int s=1;
int sum=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
s*=j;
}
sum+=s;
s=1;
}
return sum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MethodDemo1 myMethod=new MethodDemo1();
System.out.println("大的为为:"+myMethod.fac(3));
}
}
注:Java方法不能嵌套定义(而Python可以)
四.数组作为参数
例:
package com.imooc.function;
import java.util.Scanner;
public class GetValue {
public boolean search(int n,int[] arr){
boolean flag=false;
for(int val:arr){
if(val==n){
flag=true;
break;
}
}
return flag;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入要查找的数据:");
int num;
boolean flag;
Scanner sc=new Scanner(System.in);
num=sc.nextInt();
int[] arr={1,3,5,7,8,2,10,20};
GetValue getvalue=new GetValue();
flag=getvalue.search(num, arr);
if(flag){
System.out.print("找到了");
}
else{
System.out.print("未找到");
}
}
}
五.方法重载
方法名相同,参数列表不同。
例:
package com.imooc.function;
public class MathAdd {
//求int类型和
public int plus(int m,int n){
return m+n;
}
//求double类型和
public double plus(double m,double n){
return m+n;
}
//q求数组元素累加和
public int plus(int[] arr){
int sum=0;
for(int n:arr){
sum+=n;
}
return sum;
}
public static void main(String[] args) {
MathAdd mathadd=new MathAdd();
//int型
int intplus=mathadd.plus(1,2);
System.out.println("int型和:"+intplus);
double doubleplus=mathadd.plus(1.23,3.468);
System.out.println("double型和:"+doubleplus);
int[] arr={1,2,3,4,5,6};
int arrplus=mathadd.plus(arr);
System.out.println("数组型和:"+arrplus);
}
}
六.传值
如果在同一个类里面,某一个方法(非main方法)要调用其他方法,直接调用,而不需要创建对象。
交换值例(基本数据类型):主方法中的m,n值不会变(方法中的值改变不会影响主方法的),只是把值传递给a,b
package com.imooc.function;
public class SwapDemo {
public void swap(int a,int b){
System.out.println("交换前:a="+a+"n="+b);
int temp;
temp=a;
a=b;
b=temp;
System.out.println("交换后:a="+a+"b="+b);
}
public static void main(String[] args) {
int m=3,n=5;
SwapDemo swapdemo=new SwapDemo();
System.out.println("交换前:m="+m+"n="+n);
swapdemo.swap(m, n);
System.out.println("交换后:m="+m+"n="+n);
}
}
数组传值(引用数据类型)例:
package com.imooc.function;
public class ListDemo {
public void change(int[] arr){
arr[3]=-1;
System.out.println("arr修改数据后:");
for(int n:arr){
System.out.print(n+" ");
}
System.out.println();
}
public static void main(String[] args) {
int[] a={1,2,3,4,5,6,7};
ListDemo listdemo=new ListDemo();
System.out.println("a修改前:");
for(int n:a){
System.out.print(n+" ");
}
System.out.println();
listdemo.change(a);
System.out.println("a修改后:");
for(int n:a){
System.out.print(n+" ");
}
}
}
/*
输出:
a修改前:
1 2 3 4 5 6 7
arr修改数据后:
1 2 3 -1 5 6 7
a修改后:
1 2 3 -1 5 6 7
*/
Java中参数都是值传递:
注:Python中都是共享变量
七.可变参数列表
可变参数列表:如int…n(参数中如果有两个以上参数,可变参数一定是放在最后的位置。且可以把数组的值传递给可变参数列表,但是数组作为参数时不可以将多个值传递给数组,一个方法中只能有一个可变参数)
注:Python为(*args【元组】,**kwargs【字典】)
package com.imooc.function;
public class ArgsDemo {
public void sum(int...n){
int sum=0;
for(int i:n){
sum+=i;
}
System.out.println("sum="+sum);
}
public static void main(String[] args) {
ArgsDemo argsdemo=new ArgsDemo();
argsdemo.sum(1);
argsdemo.sum(1,2);
argsdemo.sum(1,2,3);
}
}
/*
输出:
sum=1
sum=3
sum=6
*/
可变参数重载问题:可变参数列表所在方法是最后被访问的
package com.imooc.function;
public class Argsdemo4 {
public int plus(int a,int b){
System.out.println("不可变参数方法被调用");
return a+b;
}
public int plus(int...n){
System.out.println("可变参数列表方法被调用");
int sum=0;
for(int i:n){
sum+=i;
}
return sum;
}
public static void main(String[] args){
Argsdemo4 argsdemo=new Argsdemo4();
System.out.print("和为:"+argsdemo.plus(1,2));
}
}
/*输出:
不可变参数方法被调用
和为:3
*/
文档注释:/**(可以使用javadoc命令获取文档注释生成帮助文档)
标签 描述 示例
@author 标识一个类的作者 @author description
@deprecated 指名一个过期的类或成员 @deprecated description
{@docRoot} 指明当前文档根目录的路径 Directory Path
@exception 标志一个类抛出的异常 @exception exception-name explanation
{@inheritDoc} 从直接父类继承的注释 Inherits a comment from the immediate surperclass.
{@link} 插入一个到另一个主题的链接 {@link name text}
{@linkplain} 插入一个到另一个主题的链接,但是该链接显示纯文本字体 Inserts an in-line link to another topic.
@param 说明一个方法的参数 @param parameter-name explanation
@return 说明返回值类型 @return explanation
@see 指定一个到另一个主题的链接 @see anchor
@serial 说明一个序列化属性 @serial description
@serialData 说明通过writeObject( ) 和 writeExternal( )方法写的数据 @serialData description
@serialField 说明一个ObjectStreamField组件 @serialField name type description
@since 标记当引入一个特定的变化时 @since release
@throws 和 @exception标签一样. The @throws tag has the same meaning as the @exception tag.
{@value} 显示常量的值,该常量必须是static属性。 Displays the value of a constant, which must be a static field.
@version 指定类的版本 @version info
方法的调式:F5进入方法,F7由方法内部放回调用处
八.实现简单综合例子
package com.imooc.function;
import java.util.Scanner;
public class TotalDemo {
//在末尾插入数据
public int[] insertData(int[] arr){
Scanner sc=new Scanner(System.in);
for(int i=0;i<arr.length-1;i++){
System.out.println("请输入第"+(i+1)+"个整数:");
arr[i]=sc.nextInt();
}
return arr;
}
//展示数据
public void showData(int[] arr,int length){
if(length<=arr.length){
System.out.println("数组的前"+length+"个数为:");
for(int i=0;i<length;i++){
System.out.print(arr[i]+" ");
}
}
else{
System.out.println("数组长度越界了!");
}
System.out.println();
}
//在指定位置插入数据
public int[] insertatArray(int[] arr,int n,int k){
for(int i=arr.length-1;i>n;i--){
arr[i]=arr[i-1];
}
arr[n]=k;
return arr;
}
//查询能被n整除的数
public void div(int[] arr,int n){
for(int i:arr){
if(i%n==0){
System.out.print(i+" ");
}
}
System.out.println();
}
public void notice(){
System.out.println("***************************");
System.out.println(" 1-插入数据 ");
System.out.println(" 2-显示数据 ");
System.out.println(" 3-在指定位置插入数据 ");
System.out.println(" 4-查询能被n整除数据 ");
System.out.println(" 0-退出");
System.out.println("***************************");
}
public static void main(String[] args) {
// 实现增删改查
TotalDemo total=new TotalDemo();
Scanner sc=new Scanner(System.in);
int[] arr=new int[10];
while(true){
total.notice();
int n=sc.nextInt();
if(n==0){
System.out.println("您退出了");
break;
}
switch(n){
case 1:{arr=total.insertData(arr);break;}
case 2:total.showData(arr, arr.length);break;
case 3:{
System.out.println("请输入插入的位置:");
int n1=sc.nextInt();
System.out.println("请输入插入的值:");
int k1=sc.nextInt();
total.insertatArray(arr, n1, k1);
break;}
case 4:{
System.out.println("请输入被除数:");
int n1=sc.nextInt();
total.div(arr, n);
break;
}
default:{
System.out.println("输入错误");break;
}
}
}
}
}