Java的方法

Java的方法

  1. 方法的定义和调用

  2. 方法重载

  3. 命令行传参数

  4. 可变参数

  5. 静态方法、非静态方法

方法

举例说明:System.out.println():System是个类,out是对象,println()就是方法

  1. 方法是解决一类问题的步骤的有序组合。相当于C++的函数。

  2. 方法包含于类或对象中,在程序中被创建,在其他地方被引用。

  3. 方法设计原则:一个方法只完成一个功能,方便后期扩展。

  4. 尽量把公告方法写到main()方法外面,保持main()方法干净整洁。

  5. main()方法是被Java的虚拟机调用的,除此之外,main()方法与其他方法没任何区别。

  6. 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()就叫方法)
  }
}
  1. Java中没有全局的概念。但是num1加了static,可以实习全局的效果。

  2. Java提供了两种类型变量:静态变量(也叫类变量,用static关键字修饰,如num1);实例变量(无static关键字)

    2.1. 静态变量(类变量,有static关键字):属于类,在内存中只有一个副本。只要静态变量所在的类被加载,其就会被分配空间,可以被使用。对静态变量的引用有两种方式,为:类.静态变量;对象.静态变量。

    2.2. 实例变量(无static关键字):属于对象,在内存中只有多个副本。只有对象被创建后,才会被分配空间,才能被使用。对静态变量的引用只有一种方式,为:对象.静态变量。

  1. 静态变量只有一个,被类所拥有,所有的对象都共享这个静态变量;而实例对象与具体对象有关。

下面例子为实例变量(无static关键字)的调用。new一个对象,然后调用。

public class HelloWorld {
   public static void main(String[] args) {
       HelloWorld obj = new HelloWorld();
       obj.show();
  }

   public void show() {
       System.out.println("非静态变量,为实例变量");
  }
}

静态方法、非静态方法

  1. 有关调用:

静态方法:有static。可以通过类名直接调用,也可以用对象名调用。

非静态方法:无static。只能用对象名调用。

  1. 何时存在

静态方法:有类的时候就有了。

非静态方法:当实例化对象的时候,才有。

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只有值传递概念,没有引用传递的概念。

往方法中传对象,是值传递。改的是对象的属性,不叫引用传递。

  1. 值传递:在函数中对参数修改,不影响实参

  2. 引用传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。在函数中对参数所进行的修改,影响实参

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

WangZ

方法重载

重载规则:

  1. 参数列表必须不同:个数、类型、参数排列顺序。

  2. 仅仅返回类型不同,不足以成为方法重载

  3. 方法的返回类型可以相同,也可以不同。

不定项参数(可变参数)

  1. 在方法声明中,在指定参数类型后加一个省略号(...)。如int... number,就可以给number很多值。

  2. 一个方法中只能指定一个可变参数,且它的位置必须在最后。任何普通参数必须在它之前声明。

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]);
  }
}

输出:

2

3

4 

 

posted @ 2020-02-11 20:22  WZ_BeiHang  阅读(210)  评论(0)    收藏  举报