在之前所做的画图工具重绘代码中传输数据需要不断通过对象调用属性并为其赋值,代码显得十分冗杂,所以采用构造方法优化代码。
格式
public 类名(参数类型 参数名,,){方法体}
相比于方法的区别在于:
①构造方法没有返回值类型。
②构造方法名必须是类名。
作用
一、创建对象
在创建新对象时,我们用到的格式是:类名 对象名=new 类名() ,其实“类名()”就是在调用构造方法,是创建对象时必须的一步操作。所以,我们在书写好构造方法时会发现被调用,就是在创建该类的对象时调用的。
二、同时给多个属性初始化
在书写构造方法时,括号中的参数可以同时初始化该类的多个属性,即本次代码优化所用到的功能。例如,我们在构造方法的括号中书写的参数可以在其他类创建对象时调用并对其赋值。注意:①每个类都有一个默认的无参构造方法,当自行定义构造方法,那么默认的无参构造方法就会被替代。②自行书写构造方法后,所有创建该类的对象时,括号内都要按顺序赋予相对应类型的数据。
补充知识
一、this关键字的应用
this表示本类的对象,可以防止数据的混淆,this后加一个点可以直接调用本类的所有对象
二、方法重载
在本程序中,由于不是每一个图案都需要三个点的坐标,若方法只有一种功能就必须传入足够的参数,是没有意义的代码,所以要重载一个只有两个点坐标的方法。
定义
同一个方法,通过不同的参数类型实现不同的功能。
要求
1.方法名重名。
2.参数类型(个数,顺序)不一样。这样,就可以通过不同的参数类型使用方法钟不同的功能。
3.只能发生在一个类内部
代码示例
public class Shape {
public int x1,y1,x2,y2,x3,y3;
public String name;
public Color color;
//重构方法
public Shape(Color color,String name,int x1,int y1,int x2,int y2,int x3,int y3){
//this表明是当前类的属性,防止混淆
this.x1=x1;
this.x2=x2;
this.y1=y1;
this.y2=y2;
this.x3=x3;
this.y3=y3;
this.color=color;
this.name=name;
}
//方法的重载
public Shape(Color color,String name,int x1,int y1,int x2,int y2){
this.x1=x1;
this.x2=x2;
this.y1=y1;
this.y2=y2;
this.color=color;
this.name=name;
}
if ("任意曲线".equals(name)) {
Graphics2D g2 = (Graphics2D) gr;
((Graphics2D) gr).setStroke(new BasicStroke(2));
x4 = e.getX();
y4 = e.getY();
color=gr.getColor();
Shape shape = new Shape(color,name,x1,y1,x4,y4,x4,y4);//三个点的方法
shapeArr[index] = shape;
index++;
//让上一条线段的终点成为下一条线段的起点
gr.drawLine(x1, y1, x4, y4);
shapeArr[index] = shape;
index++;
x1 = x4;
y1 = y4;
gr.drawLine(x1, y1, x4, y4);
}
if ("多边形".equals(name)) {
Graphics2D g2 = (Graphics2D) gr;
((Graphics2D) gr).setStroke(new BasicStroke(2));
Shape shape = new Shape(color,name,x3,y3,x2,y2);//两个点的方法
shapeArr[index] = shape;
index++;
gr.drawLine(x2, y2, x3, y3);
x2 = x3;
y2 = y3;
gr.drawLine(x2, y2, x3, y3);
if (e.getClickCount() == 2) {
shape = new Shape(color,name,x1,y1,x3,y3);
//保存对象到数组中
shapeArr[index] = shape;
//下标后移
index++;
这样,就可以直接将创建对象赋值的操作利用构造方法简化,一定要注意顺序的对应!参数类型决定了调用哪一个方法!