- 访问权限修饰符:常用的有public,private,protected,不写(为默认访问权限)
- 需要有方法返回值类型,没有用void
- 需要有方法名,在同一类中方法的签名不能重复(方法签名:方法名+参数列表)【单纯方法名可重复】
- 参数列表:数量,类型,顺序 --> 方法重载(方法名相同,参数列表不同,与返回值无关)【发生在编译阶段】
- 方法必须有参数列表,可以为空但不能省略
- 可以用关键字static,final等关键字修饰
一、修饰符
static(静态方法)
-
static方法中不能使用this关键字
-
static修饰的方法,通过类名直接调用,不用创建对象(对象也可以调用),方便方法的调用
-
static修饰的方法,变量,代码块都是独一份的,便于共享
-
静态方法中不能直接使用非静态方法(可以通过创建对象调用);非静态方法可以直接调用静态方法;同级别之间可以相互调用
-
static修饰代码块:无论在哪里书写,都是在main()方法中执行,多用于初始化,只加载一次
//static
public class Person {
private int age;
private String name;
public static String from;
static { //static修饰代码块,用于初始化
System.out.println("用于初始化,执行更早");
}
public Person(int age, String name) {
System.out.println("执行时间测试");
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + ", from=" + from + "]";
}
public static void main(String[] args) {
Person p1=new Person(132,"qwe");
Person p2=new Person(13,"qwesd");
System.out.println(p1.name);
System.out.println(p2.name);
p1.from="china"; //static修饰的变量是独一份的,共享的,更改一处即更改全部
System.out.println(Person.from);
System.out.println(p1.from);
System.out.println(p2.from);
System.out.println(p2);
System.out.println(p2);
}
public void objtest() {
}
public static void classtest() {
Person p3=new Person(2,"name");
p3.objtest(); //在静态方法中调用非静态方法用对象
}
}
二、方法参数
- 提高了方法的灵活性
- 类型:分为形参(方法定义时设置的参数)与实参(方法调用时设置的参数)
- 传递方式:值传递和引用传递【java中只有值传递】
- 值传递:方法调用时,实参通过把它的内容副本传入方法内部,此时形参接收实参的一个拷贝,会开辟新空间
- 引用传递:‘引用’指使用真实内容的地址值,不会开辟新空间
可变参数
- 指在调用方法时传入不定长度的参数,本质是基于数组实现的
- 可变参数是指长度可变,但变量种类不行
- 使用:在最后一个形参后加上三点 …,就表示该形参可以接受多个参数值【即String...var】
- 可变参数可以不接收参数值,也可以接收多个参数值【以数组方式接收】
- 可变参数只能作为方法的最后一个参数使用->即一个方法只能拥有一个可变参数
- 可变参数在编译为字节码后,在方法签名中就是以数组形态出现的,若两个方法的签名是一致的,不支持方法的重载。
- 与数组区别:可变参数可以传入数组类型的数据或直接传入多个参数,数组类型作为参数只能传数组类型参数【还不能空传】
public class Test {
public static void main(String[] args) {
//可变参数
int[] num={1,2,3};
add(num);
add(1,2,3);
}
public static void add(int...nums) {
int sum=0;
for(int num:nums) {
sum+=num;
}
System.out.println(sum);
}
}