入门

一般来说,如果没有特别说明,构造方法是无属性的,在实例化时由系统自动处理。

  1. Hero a = new Hero();//上一节代码,构造方法没有属性

不过我们可以重写构造方法,来实现一些效果,例如赋值初始化或者啥的。

  1. public class Hero {
  2. //属性
  3. String name; //姓名
  4. float hp; //血量
  5. float armor; //护甲
  6. int moveSpeed; //移动速度
  7. //方法
  8. void attack() {
  9. System.out.println("正在攻击");
  10. }
  11. //构造方法
  12. Hero(String name) {
  13. this.name = name;
  14. System.out.println("my name is" + name);
  15. }
  16. public class Test {
  17. public static void main(String []args) {
  18. Hero a = new Hero("盖伦");//新建一个类
  19. }
  20. }

(附注:this 和 C++ 类似,都是指向自己这个类)

默认构造方法

在自己没有定义构造方法的时候,系统会自动生成一个没有参数的构造方法。不过如果你写了一个或多个构造方法,那这个默认的就失效了。

  1. public class Hero {
  2. //属性
  3. String name; //姓名
  4. float hp; //血量
  5. float armor; //护甲
  6. int moveSpeed; //移动速度
  7. //方法
  8. void attack() {
  9. System.out.println("正在攻击");
  10. }
  11. //构造方法
  12. Hero(String name) {
  13. this.name = name;
  14. System.out.println("my name is" + name);
  15. }
  16. public class Test {
  17. public static void main(String []args) {
  18. Hero a = new Hero("盖伦");//成功
  19. Hero b = new Hero();//失败,因为这个构造方法不存在了
  20. }
  21. }

多个构造方法(方法重载)

一个类可以拥有多个构造方法,如下:

  1. public class Hero {
  2. //属性
  3. String name; //姓名
  4. float hp; //血量
  5. float armor; //护甲
  6. int moveSpeed; //移动速度
  7. //方法
  8. void attack() {
  9. System.out.println("正在攻击");
  10. }
  11. //构造方法
  12. Hero(){
  13. //空的,和系统默认构造方法一致
  14. }
  15. Hero(String name) {
  16. this.name = name;
  17. System.out.println("my name is" + name);
  18. }
  19. Hero(String name float hp) {
  20. this.name = name;
  21. this.hp = hp;
  22. System.out.println("my name is" + name);
  23. System.out.printf("my name is %f\n", hp);
  24. }
  25. public class Test {
  26. public static void main(String []args) {
  27. Hero a = new Hero();
  28. Hero b = new Hero("盖伦");
  29. Hero c = new Hero("盖伦", 200.0);
  30. }
  31. }

这被称作重载,不只是构造方法,普通的成员方法也可以这么写(例如系统库的 print系列就提供了数不胜数的重载方法)。