今天给大家介绍一下Java的基本面向对象语法。 非常简单,10分钟即可快速上手。
构造函数是类的一种特殊方法,用于初始化类的新对象。 Java中的每个类都有一个默认构造函数,该构造函数必须与类名相同,并且没有返回类型。 构造函数的默认返回类型是对象类型本身,并且构造函数不能用,final,,and修饰。
提示:构造函数是用来初始化一个新对象的,所以使用修改是没有意义的; 构造函数不能被子类继承,所以使用final和修饰是没有意义的; 多个线程不会同时创建具有相同内存地址的相同对象,因此无需使用修改。
构造方法的语法格式如下:
class class_name
{
public class_name(){} //默认无参构造方法
public ciass_name([paramList]){} //定义构造方法
…
//类主体
}
在类中,与类同名的方法就是构造函数方法。 每个类可以有多个构造函数,但要求每个构造函数包含不同的方法参数。
示例1
构造方法主要有两种:无参数构造方法和参数化构造方法。 示例如下:
public class MyClass
{
private int m; //定义私有变量
MyClass()
{
//定义无参的构造方法
m=0;
}
MyCiass(int m)
{
//定义有参的构造方法
this.m=m;
}
}
注意:类的构造函数不需要定义。 如果类中没有定义构造函数,Java会自动为该类生成一个默认构造函数。 默认构造函数不包含任何参数,方法体为空。 如果在类中显式定义了一个或多个构造函数,则 Java 不再提供默认构造函数。
实施例2
(1)首先在类中定义两个构造函数,代码如下:
public class Worker
{
public String name; //姓名
private int age; //年龄
//定义带有一个参数的构造方法
public Worker(String name)
{
this.name=name;
}
//定义带有两个参数的构造方法
public Worker(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return"大家好!我是新来的员工,我叫"+name+",今年"+age+"岁。";
}
}
提示:类有一个 () 方法,这是一个特殊的方法,创建的每个类都会继承并返回一个类型化字符串。 如果这个方法定义在类中,那么当调用该类的对象时,会自动调用该类的对象的()方法返回一个字符串,然后可以使用“.out”改变返回的字符。 (对象名称)”打印出字符串内容。
(2)创建类中的main()方法作为程序的入口,在main()方法中调用不同的构造方法来实例化对象,并初始化对象中的属性。 代码如下:
public class TestWorker
{
public static void main(String[] args)
{
System.out.println("-----------带有一个参数的构造方法-----------");
//调用带有一个参数的构造方法,Staff类中的sex和age属性值不变
Worker worker1=new Worker("张强");
System.out.println(worker1);
System.out.println("-----------带有两个参数的构造方法------------");
//调用带有两个参数的构造方法,Staff类中的sex属性值不变
Worker worker2=new Worker("李丽",25);
System.out.println(worker2);
}
}
运行该类,输出结果如下:
-----------只有一个参数的构造函数----------
大家好! 我是一名新员工。 我叫张强,今年0岁。
----------有两个参数的构造函数------------
大家好! 我是一名新员工。 我叫李莉。 我25岁。
通过调用带参数的构造函数,在创建对象时就完成了对象成员的初始化,简化了对象初始化代码。
总结:
构造方法是一种特殊的方法,其方法名与类名相同。 创建新对象时会调用它。 可以使用不同的构造方法以不同的方式初始化对象。
构造函数名称必须与类名称相同。 构造函数没有返回类型,甚至没有 void。 它返回对象的地址并将其分配给引用变量。 构造函数不能被继承、覆盖或直接调用。 调用方式有三种:一是通过new关键字,二是子类的构造函数中通过super调用父类的构造函数,三是通过反射获取并使用。 定义类时会提供默认的无参构造函数。 但如果显式定义了有参构造函数,则无参构造函数将被覆盖; 如果您仍然想拥有它,则需要显式定义它。 构造函数可以设为私有。 不能使用私有构造函数在外部创建对象。
构造函数不能在接口中定义,但可以在抽象类中定义。 在枚举类中,构造函数是一个特殊的存在。 它可以定义但不能修改,因为它默认是绝对单例,不允许通过创建对象的方式外部生成枚举对象。
一个类可以有多个带有不同参数的构造函数,称为构造函数的重载。 为了阅读方便,当一个类有多个构造函数时,这些方法应该放在一起。 同理,类中其他同名的方法也应该遵循这个原则。
单一责任也适用于构造函数。 构造函数的任务是在构造对象时传递参数。 因此,业务逻辑不应该在构造函数中引入。 如果一个对象在生产过程中,需要完成初始化上下游对象、分配内存、执行静态方法、分配句柄等繁重工作,而其中一个步骤出错,导致对象初始化没有完成,那么希望就寄托在业务逻辑部分来处理异常。 这只是一些失控的事情。 因此,建议将初始化业务逻辑放在某个方法中,例如init(),然后在对象确认所有初始化工作已完成后显式调用它。