构造方法:构造方法是一种特殊的方法。主要功能是用来在创建对象时初始化对象,即为对象成员变量赋初始值。构造方法与类名相同,可重载多个不同的构造方法。
主要注意事项为三点:
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回值类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作。
与方法的重载是一样的,构造方法也是可以重载的,构造方法的形参不同即可(关于方法的重载详见“JAVA基础知识回顾_2”)。
/**
* 构造方法
* @author Zjm
*
*/
public class GouZao {
public static void main(String[] args) {
// TODO Auto-generated method stub
one o1 = new one();
one o2 = new one("World");
o1.run();
o2.run();
}
}
class one{
String a;
String b;
int c;
public one() {}
public one(String s) {
this.a = s;
}
public void run() {
System.out.println("Hello " + this.a);
}
}
如上代码,publicone (){}即为class one 的无参构造方法,publicone (String s){}即为public one (){}一个覆写方法,也是class one的有一个String类型参数的构造方法。
在创建one 的实例化对象o1时,系统会调用class one 的无参构造方法。创建o2时就会调用class one的有一个String类型参数的构造方法。而该类的无参构造方法并没有给this.a赋值,有一个String类型的参数的构造方法给this.a赋值了,所以这段代码运行结果为
Hello null
Hello World
提示 如果用户没有自定义类的构造方法,系统将自动创建一个该类的无参的,方法体为空的构造方法,自动调用。
如下代码
/**
* 构造方法
* @author Zjm
*
*/
public class GouZao {
public static void main(String[] args) {
// TODO Auto-generated method stub
one o1 = new one();
o1.run();
}
}
class one{
public void run() {
System.out.println("我爱JAVA");
}
}
系统在创建o1时,没有找到用户自定义的构造方法,便会调用一个无参的,方法体为空的构造方法,这段代码的运行结果为
我爱JAVA
/**
* 构造方法
* @author Zjm
*
*/
public class GouZao {
public static void main(String[] args) {
// TODO Auto-generated method stub
one o1 = new one("张三","男",20);
one o2 = new one("李四","女",19);
o1.run(o2);
}
}
class one{
String name;
String sex;
int age;
public one (String name,String sex,int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public void run(one o) {
System.out.println("姓名: " +this.name+ " 性别: " + o.sex + " 年龄: " + o.age);
}
}
这段代码,主要是构造方法是实例化对象是可以作为参数进行传递的,比如o.sex可以理解为o2.sex,就是调用的o2中的sex
而this.name就是o1.name,所以这段代码运行结果为:
姓名: 张三 性别: 女 年龄: 19
下面两段代码分享,是构造方法的练习题,可以参考。
1
package com.zjm.www.day10;
/**
*
* 构造方法-动物练习
* @author Zjm
*
*/
public class Ex_animal {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal an1 = new Animal("兔子","草",5);
Animal an2 = new Animal();
Animal an3 = new Animal(an1,an2);
an2.all(an3);
}
}
class Animal{
String name;
String eat;
int weight;
public Animal() {
this.name = "name";
this.eat = "猪蹄";
this.weight = 12;
}
public Animal(Animal a,Animal b) {
this.name = b.name;
this.eat = a.eat;
this.weight = b.weight;
}
public Animal(String name,String eat,int weight) {
this.name = name;
this.eat = eat;
this.weight = weight;
}
public Animal(String name,int weight) {
this.name = name;
this.weight = weight;
}
public void eat1() {
System.out.println("这个动物喜欢吃" + this.eat);
}
public void run() {
System.out.println("这个动物会跑");
}
public void all(Animal an) {
System.out.println("这是一只 " + this.name + ",它喜欢吃 " + an.eat + ",它重 " + an.weight +" 斤");
}
}
2
public class Test {
public static void main(String[] args) {
Animal dog = new Animal("小黑", "小猫", "黑色");
Animal cat = new Animal("小白", "小狗", "白色");
String s = dog.play(cat, dog);
System.out.println("获胜的动物是" + s);
}
}
class Animal {
String name;
String kind;
int age;
String color;
long animalID;
String date;
public Animal(String name, String kind) {
this.name = name;
this.kind = kind;
}
public Animal(String name, String color, String kind) {
this.name = name;
this.color = color;
this.kind = kind;
}
public Animal(String name, int age, long animalID) {
this.age = age;
this.animalID = animalID;
}
public String play(Animal dog, Animal cat) {
System.out.println("这只" + dog.color + "是" + dog.name + "," + dog.kind + ",正在和那只" + cat.color + "叫做" + cat.name
+ "," + cat.kind + ",在打架");
return cat.kind;
}
}