Java的方法
Java的方法
-
方法的定义和调用
-
方法重载
-
命令行传参数
-
可变参数
- 静态方法、非静态方法
方法
举例说明:System.out.println():System是个类,out是对象,println()就是方法
-
方法是解决一类问题的步骤的有序组合。相当于C++的函数。
-
方法包含于类或对象中,在程序中被创建,在其他地方被引用。
-
方法设计原则:一个方法只完成一个功能,方便后期扩展。
-
尽量把公告方法写到main()方法外面,保持main()方法干净整洁。
-
main()方法是被Java的虚拟机调用的,除此之外,main()方法与其他方法没任何区别。
-
Java只有值传递概念,没有引用传递的概念。
public class HelloWorld {
public static void main(String[] args) {
System.out.println(add(1, 2));
}
public static int add(int a, int b) {
return a + b;
}
}
输出:3
public static int add(int a, int b)中,static关键字是说明add()方法是类方法。
解释下static关键字
public class Demo1 {
static int num1 = 1; //类变量
int num2 = 2; //实例变量(方法外面,类的里面),从属于对象
public void method(){
int num3 = 3; //局部变量(方法里面,main()或者其他像这个method()就叫方法)
}
}
-
Java中没有全局的概念。但是num1加了static,可以实习全局的效果。
-
Java提供了两种类型变量:静态变量(也叫类变量,用static关键字修饰,如num1);实例变量(无static关键字)
2.1. 静态变量(类变量,有static关键字):属于类,在内存中只有一个副本。只要静态变量所在的类被加载,其就会被分配空间,可以被使用。对静态变量的引用有两种方式,为:类.静态变量;对象.静态变量。
2.2. 实例变量(无static关键字):属于对象,在内存中只有多个副本。只有对象被创建后,才会被分配空间,才能被使用。对静态变量的引用只有一种方式,为:对象.静态变量。
-
静态变量只有一个,被类所拥有,所有的对象都共享这个静态变量;而实例对象与具体对象有关。
下面例子为实例变量(无static关键字)的调用。new一个对象,然后调用。
public class HelloWorld {
public static void main(String[] args) {
HelloWorld obj = new HelloWorld();
obj.show();
}
public void show() {
System.out.println("非静态变量,为实例变量");
}
}
静态方法、非静态方法
-
有关调用:
静态方法:有static。可以通过类名直接调用,也可以用对象名调用。
非静态方法:无static。只能用对象名调用。
-
何时存在
静态方法:有类的时候就有了。
非静态方法:当实例化对象的时候,才有。
public class HelloWorld {
public static void main(String[] args) {
a();
}
public static void a(){ }
public void b(){ }
}
注意1:
只能调用静态方法a(),因为class存在了,a()就存在了;
不能调用非静态方法b(),因为还未实例化对象,b()还不存在。
public class HelloWorld {
public static void main(String[] args) {
a(); //可以通过类名直接调用,也可以用对象名调用。
HelloWorld obj = new HelloWorld(); //实例化
obj.b(); //只能用对象名调用。
obj.a(); //可以通过类名直接调用,也可以用对象名调用。
}
public static void a(){
System.out.println("a");
}
public void b(){
System.out.println("b");
}
}
输出: a b a
注意2:
能调用静态方法a(),因为class存在了,a()就存在了;
也能调用非静态方法b(),因为实例化对象obj了,b()存在了。
形参和实参的参数类型要保持一致,否则报错。


public class HelloWorld {
public static void main(String[] args) {
test(2); //这里的2就是实参
}
public static void test(int a){ //这里的a是形参
System.out.println(a);
}
}
输出:2
Java是值传递(不影响实参)
Java只有值传递概念,没有引用传递的概念。
往方法中传对象,是值传递。改的是对象的属性,不叫引用传递。
-
值传递:在函数中对参数修改,不影响实参。
-
引用传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。在函数中对参数所进行的修改,影响实参。
public class HelloWorld {
public static void main(String[] args) {
int num = 1;
Person person = new Person();
test(num, person); //传值,值不变,仍为1;传对象,改变了对象的属性值,变为WangZ
System.out.println(num);
System.out.println(person.name);
}
public static void test(int num, Person person) {
num = 2;
person.name = "WangZ";
}
}
class Person {
String name;
}
输出:
1
方法重载
重载规则:
-
参数列表必须不同:个数、类型、参数排列顺序。
-
仅仅返回类型不同,不足以成为方法重载。
-
不定项参数(可变参数)
-
在方法声明中,在指定参数类型后加一个省略号(...)。如int... number,就可以给number很多值。
-
一个方法中只能指定一个可变参数,且它的位置必须在最后。任何普通参数必须在它之前声明。
public class HelloWorld {
public static void main(String[] args) {
show(1,2,3,4);
}
public static void show(int... numbers) {
System.out.println(numbers[0]);
System.out.println(numbers[1]);
System.out.println(numbers[2]);
System.out.println(numbers[3]);
}
}
输出:
1
2
3
4

浙公网安备 33010602011771号