在认识清楚Java的基础知识后,我们来进阶详解Java的构造方法。
首先java的构造方法是在创建对象时,通过new运算符调用来创建对象并进行初始化的特殊方法。
构造方法有以下几个特点:①构造方法名与其所在的类名相同;②构造方法无返回值类型,则返回void,否则不是构造方法,而是一般成员方法;③构造方法只通过new运算调用;④构造方法可以没有参数,也可以有多个参数;⑤构造方法可以重载;⑥构造方法不能被子类继承。
构造方法的调用:只能通过new运算符调用,其参数传递与形参实参结合也在调用时同时完成。其实用new原酸城建对象的一般格式如下:
<类名> <对象名> = new <类的构造方法>([参数列表]);
解析一下这语句就是,由new通知运行系统为所创造的对象在开辟一个单元,自动匹配并调用相应的构造方法,使用给定的[参数列表]为所创建的对象进行初始化,使新建对象的各个变量获取值。
这里解释一下形参和实参,形参是方法定义的参数;实参是方法调用的参数。
还有访问方法和修改方法,也是常用的。顾名思义,访问方法get()是能够返回成员变量值的方法,而修改方法set()是能够修改成员变量值的方法
最后在定义类时,若没有定义任何构造方法,则系统会自动为该类生成一个默认构造方法,用默认构造方法去创建对象使用是默认值,就是方法名和类名依旧相同,但是没有任何形参,不实现任何操作的构造方法。
看些例题
1、定义一个名为Cuboid的长方体类,使其继承Rectanele类,其中包含一个表示高的double型成员变量 height定义一个构造方法Cuboid(double length,double width,double height);再定义一个求长方体体积的volume()方法。编写程序,求一个长、宽和高分别为10、5、2的长方体的体积。
//实现类继承格式public class 子类名 extends 父类名
public class Cuboid extends Rectangle{//创建一个Cuboid类,继承Rectanele类
private double height;//包含成员变量height
public Cuboid(double length, double width,double height){//构造cuboid方法
super();
this.height =height;
}
public Cuboid(){//定义Cuboid无参,定义格式
this(0,0,0) ;
}
public void setLength (double length){
}
public double getLength(double length){
return length;
}
public void setHeight ( double height){
this.height = height;//在构造方法中用this区别初始定义
}
public double getHeight(){
return height;//返回构建变量
}
public double volume(double length,double width ,double height){
//构造volume方法求长方形体积
return length*width*height;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Cuboid cb = new Cuboid();//创建对象Cuboid
cb.setLength(10);//直接调用setLength,setWidth,setHeight,赋值
cb.setWidth(5);
cb.setHeight(2);
System.out.println("长方体的体积= " + cb.volume(10,5,2));//输出调用volume方法
}
}
这里我想解释一下关键字this,它就像一个等待使用接收方法调用的对象填充的空格一样,能让被引用的对象更清晰,区分使用的成员变量和局部变量,在方法定义中能够使用关键字this作为接收方法调用对象的名称。
2、写一个名为Rectangle的类表示矩形。其成员变量有width、height、color, width和height是double类型,color是String类型。假定所有矩形颜色相同,用一个类变量表示颜色。要求提供构造方法和计算矩形面积的computeArea()方法以及计算矩形周长的Circumference()方法。
public class Rectangle {//定义长方体类
private double height;
private double width;
private String color;//设计私有属性
public Rectangle() {
}
public Rectangle(double height,double width,String color) {
this.color = color;
this.height = height;
this.width = width;
}//定义Rectangle方法有变量width、height、color, width和height是double类型
public double getHeight() {
return height;
}//访问方法
public void setHeight(double height) {
this.height = height;
}//修改方法
public double getWidth() {
return width;
}//定义getWidth,double型宽
public void setWidth(double width) {
this.width = width;
}//定义setWidth,无返回值宽
public String getColor() {
return color;
}//定义getColor,颜色
public void setColor(String color) {
this.color = color;
}//定义setColor,修改方法
public double computeArea() {
return width*height;
}//构造方法computeArea计算面积
public double Circumference() {
return 2*(width+height);
}//构造方法Circumference计算周长
public static void main(String[] args) {
// TODO 自动生成的方法存根
Rectangle rect = new Rectangle(12.8,18.9,"blue");
System.out.println("长方形的面积=" + rect.computeArea());
//调用computeArea;自定义长宽和颜色打印周长面积
System.out.println("长方形的周长=" + rect.Circumference());//打印需带长宽和面积
}
}
3、编写User类,要求具有私有属性:用户名(account)和密码(password);具有行为:密码的setPassword()和getPassword()方法。编写一个.编写User类,要求具有私有属性:用户名(account)和密码(password);具有行为:密码的setPassword()和getPassword()方法。编写一个测试类,要求实例化一个User用户,并且使用构造方法对其进行初始化,输出用户密码信息。
public class User {//定义用户类
private String account;
private String password;//定义私有属性用户名(account)和密码(password);
public String getAccount() {//访问方法
return account;
}
public void setAccount(String account) {//修改方法
this.account = account;
}
public String getPassword() {//定义带参getPassword()()访问方法
return password;
}
public void setPassword(String password) {//定义带参setPassword()修改方法
this.password = password;
}
public void User(String account, String password) {
this.account = account;
this.password = password;
}
//登录方法
public void login(String account,String password){
if(account=="x"&&password=="123456"){
System.out.println("登录成功");//定义测试方法如果,实参与login方法中的形参一致则登录成功
}else {
System.out.println("账号密码不对");
}
}
public static void main(String[] args) {
User user=new User();//创建实例user对象,初始化
user.login("x","123456");//直接调用,给account,password赋值,与登录方法中的一致,登录成功
}
}