方法-二论

方法

定义:修饰符 返回类型 方法名(参数列表)异常抛出类型{方法体}

1.定义

1.1.修饰符

public、static、abstract、final等等都是修饰符。可以有多个修饰符

1.2.返回类型

当方法执行完如果需要给调用者返回数据,需要给定返回数据的类型,没有返回的数据就必须写void,有标明返回类型的方法必须在结束处出现return语句

只有构造方法(构造器)不写任何返回类型也不写void

return的作用

1.终止一个函数的执行

2.向调用该函数的语句返回一个数据

3.如果return后面不数据,既返回空,目的是中断函数执行,返回调用函数处

break作用

1.在循环体内,强行结束循环的执行

2.在switch体内,跳出该switch语句体

1.3.方法名

函数的标识符,用于调用该函数,命名规则遵守java中标示符即可

1.4.参数列表

根据实际需求定义,可以有多个参数

1.5.异常抛出类型

方法在执行过程中,可能会出现一些异常的情况,当遇到这些情况,在方法上这些声明的异常既会被抛出,也可以声明抛出多个异常,使用逗号隔开即可。

public static int[] readIntArr(int[] arr)throws ArrayIndexOutOfBoundsException{}
public void readFile(String file) throws IOException,ClassNotFoundException{}

2.调用

2.1.非静态方法

没有使用static修饰符修饰的方法,调用这种方法的时候,是"一定"要使用对象的调用。因为非静态方法是属于对象的(非静态属性也是一样的)

public class Student{
    public int a = 10;
    public void say(){
    	System.out.println("hello!!");
    }
}

Student s = new Student();
s.say();
s.a;

2.2.静态方法

使用static修饰符修饰的方法,这种方法的时候,"可以"使用对象调用,也"可以"使用类来调用,但是推荐使用类进行调用。因为静态成员是属于类的(静态属性也是一样的),比非静态成员早加载

public class Student{
    public static int a = 10;
    public static void say(){
    	System.out.println("hello!!");
    }
}

Student.say();
Student.a();

2.3.类中方法之间的调用

同一个类中,都是非静态方法,可以用方法名去调用方法。如果都是静态方法,相互之间也可以直接调用。

如果两个方法中有一方是静态方法,另一方为非静态方法,那么静态方法不能调用非静态方法

public static num = 10;
public age = 30;
public void a(){b();}
public void b(){}

public static void c(){d();}
public static void d(){}

//静态方法不能调用非静态方法
//public static void e(){a();}
//非静态方法能调用静态方法
public void e(){c();}

public static f(){
    //System.out.println(age);会报错
}

在同一个类中,静态方法内不能直接访问到类中的非静态属性

3.方法的传参

3.1.形参和实参

public static void main(String[] args){
    int a = 1;
    int b = 3;
    add(a,b);
}
public static int add(int a, int b){
    return a+b;
}

函数add()上的参数a、b是add()函数的形参,main()函数体内的a、b是传递给add()函数的实参

3.2.值传递和引用传递

public class Student(){
    String name;
}
public class Test(){
    public static void main(String[] args){
        Student s = new Student();
        System.out.println(s.name);//null
        changeName(s);
        System.out.println(s.name);//Tom
        
        int a = 50;
        System.out.println(a);//50
        changeNum(a;
        System.out.println(a);//50
    } 
    public static void changeName(Student s){
        s.name = "Tom";
    }
    public static void changeNum(int num){
        num = 10;
    }
}

在程序中调用方法传递参数分两种情况,一个是值传递,一个是引用传递

值传递,传的是基本数据类型,是把变量本身存储的值赋值给形参。而引用传递,传的是引用数据类型,是把变量本身存的对象内存地址值赋值给形参。两者是有区别的,后者是可以根据内存地址改变对象里面的属性值


上一篇:AcWing 278 数字组合 题解 (动态规划—DP—背包问题)


下一篇:使用cin.getline()的一点发现