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中參數都是值傳遞:
https://www.zhihu.com/question/31203609
注: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;
}
}
}
}
}