java 对象构造_Java基础(一)对象构造

由于Java对象构造非常重要,所以Java提供了多种编写构造器的机制。

1.重载

如果多个方法有相同的名字、不同的参数,便产生了重载。编译器必须挑选出具体执行哪个方法,它通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配来挑选出相应的方法。例如在下面的示例程序中,在创建第一位员工对象时执行第一个Empoyee构造器,在创建第二位员工对象时执行第二个Empoyee构造器,在创建第三位员工对象时执行第三个Empoyee构造器。

2.默认域初始化

如果在构造器中没有显式地给域赋值,那么就会被自动地赋为默认值:数值为0、布尔值为false、对象引用为null。如果不明确地对域进行初始化,就会影响程序代码的可读性。

3.无参数的构造器

对象由无参数构造函数创建时,其状态会设置为适当的默认值。如示例代码中,第三种重构方法Empoyee()就是无参数的构造函数。如果在编写一个类时没有编写构造函数,那么系统就会提供一个无参数构造器,这个构造器将所有的实例域设置为默认值。

4.显示域初始化

在执行构造器之前,先执行赋值操作。当一个类的所有构造器都希望把相同的值赋予某个特定的实例域是,这种方式特别有用。初始值不一定是常量值,可以调用方法对域进行初始化。如示例程序中的private String name = ""; //实例域初始化,就是在每一个重载构造器初始化的时候都将name设置为""。

5.参数名

在参数命名上有两种方法。

通常是这种方法,但是只有阅读代码才能够了解参数n和参数s的含义。

1 public Employee(String n, doubles)2 {3 name =n;4 salary =s;5 }

于是第一种常用方法是这种,在每个参数前面加上一个前缀“a”。

public Employee(String aName, doubleaSalary)

{

name=aName;

salary=aSalary;

}

第二种方法是为了让参数变量用相同的名字将实例域屏蔽起来。但是,如果将参数命名为salary,则salary将引用这个参数,而不是实例域。因此,可以采用this.salary的形式来访问实例域。之前的知识中介绍过,this指示隐式参数,也就是所构造的对象。

public Employee(String name , doublesalary )

{this.name =name ;this.salary =salary ;

}

6.调用另一个构造器

如示例程序所示,当调用new Employee(60000)时,Employee(double)构造器将调用Employee(String, double)构造器。采用这种方式可以对公共构造器代码部分只编写一次即可。

7.初始化块

如果无论使用哪个构造器构造对象,域都在对象初始化块中被初始化时可以使用对象初始化块。先运行初始化块,再运行构造器主题部分。示例中的id域即为对象初始化块。

如果对类的静态域进行初始化的代码比较复杂,那么可以使用静态的初始化块。也就是将代码放在一个块中,并标记关键字static。示例中的nextId即为静态代码块初始化。

下面先给一段程序来说明构造器的多种特性应用。

1 packageBigJunOba.bjtu.ConstructorTest;2

3 import java.util.*;4

5 public classConstructorTest6 {7 public static voidmain(String[] args)8 {9 Employee[] staff = new Employee[3];10

11 staff[0] = new Employee("Harry", 40000);12 staff[1] = new Employee(60000);13 staff[2] = newEmployee();14

15 for(Employee e : staff)16 System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="

17 +e.getSalary());18 }19 }20

21 classEmployee22 {23 private static intnextId;24

25 private intid;26 private String name = ""; //实例域初始化

27 private doublesalary;28

29 //静态初始化块

30 static

31 {32 Random generator = newRandom();33 //设置nextId为0到9999的随机数

34 nextId = generator.nextInt(10000);35 }36

37 //对象初始化块

38 {39 id =nextId;40 nextId++;41 }42

43 //重载构造器第一种Employee(String, double)

44 public Employee(String n, doubles)45 {46 name =n;47 salary =s;48 }49

50 //重载构造器第二种Employee(double)

51 public Employee(doubles)52 {53 //用this调用另一个构造器,即调用Employee(String, double)构造器

54 this("Employee #" +nextId, s);55 }56

57 //重载构造器第三种,即默认构造器Employee()58 //也是无参数构造器,其状态会设置为适当的默认值

59 publicEmployee()60 {61 //name在实例域初始化中被设置为""62 //salary没有被显示设置,因此初始化为默认值063 //id在对象初始化块中被设置为nextId

64 }65

66 publicString getName()67 {68 returnname;69 }70

71 public doublegetSalary()72 {73 returnsalary;74 }75

76 public intgetId()77 {78 returnid;79 }80 }

输出结果:

name=Harry,id=6611,salary=40000.0

name=Employee #6612,id=6612,salary=60000.0

name=,id=6613,salary=0.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的构造方法是一种特殊的方法,用于创建对象并初始化对象的属性。构造方法的名称必须与类名相同,没有返回类型(甚至没有void),并且在使用new关键字创建新对象时自动调用。 构造方法有以下特点: 1. 构造方法必须与类名相同,且没有返回类型。 2. 构造方法可以有参数,也可以没有参数。 3. 如果没有定义任何构造方法,Java会自动提供一个默认构造方法,即没有参数的构造方法。 4. 如果定义了有参数的构造方法,Java将不再提供默认构造方法。 5. 构造方法可以重载,即同一个类中可以定义多个构造方法,只要它们的参数类型、个数或者顺序不同即可。 构造方法的作用是创建对象并初始化对象的属性,如下面的例子: ``` public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ``` 在上面的例子中,Person类有一个有参数的构造方法,可以用来创建一个Person对象并初始化对象的属性。例如: ``` Person p = new Person("Tom", 20); System.out.println(p.getName() + " " + p.getAge()); ``` 输出结果为: ``` Tom 20 ``` 这里使用了有参数的构造方法来创建Person对象,并设置了对象的属性值。注意,在构造方法中使用了关键字this来引用当前对象,以便在构造方法中访问对象的属性和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值