本章目标
掌握构造方法的概念及调用时机
掌握构造方法的重载
掌握匿名对象的使用
构造方法
构造方法的定义格式
class 类名称{
访问权限 类名称(类型1 参数1,类型2 参数2,…){
程序语句 ;
… // 构造方法没有返回值
}
}
在构造方法的声明中读者一定要牢记以下几点:
· 构造方法的名称必须与类名称一致
· 构造方法的声明处不能有任何返回值类型的声明
· 不能在构造方法中使用return返回一个值
声明一个构造方法
class Person{
public Person(){//声明构造方法
System.out.println("一个新的 Person 对象产生");
}
}
public class ConsDemo01 {
public static void main(String[] args) {
System.out.println("声明对象: Person per= null;");
Person per= null;//声明对象时不调用构造
System.out.println("实例化对象: per = new Person();");
per = new Person();//实例化对象时调用构造
}
/*结果:
* 声明对象: Person per= null;
* 实例化对象: per = new Person();
* 一个新的 Person 对象产生
* */
}
默认的构造方法
每个类中肯定都会有一个构造方法
如果一个类中没有声明一个明确的构造方法则会自动生成一个无参的什么都不做的构造方法
class Person {
public Person(){}
}
构造方法的目的
构造方法的主要目的是为类中的属性初始化。
class Person{
private String name;//声明姓名属性
private int age;//声明年龄属性
public Person(String name, int age) {//定义构造方法为属性初始化
this.name = name;//为 name 属性赋值
this.age = age;//为 age 属性赋值
}
public void tell(){//取得信息的方法
System.out.println("姓名:"+getName()+", 年龄:"+getAge());
}
public String getName() {//取得姓名
return name;
}
public void setName(String name) {//设置姓名
this.name = name;
}
public int getAge() {//取得年龄
return age;
}
public void setAge(int age) {//设置年龄
if(age >=0 && age<=150){//在此处加上验证代码
this.age = age;
}
}
}
public class ConsDemo02 {
public static void main(String[] args) {
Person per = new Person("张三", 30);//调用构造方法,传递两个参数
per.tell();//输出信息
}
/*结果:
* 姓名:张三, 年龄:30
* */
}
构造方法重载
构造方法的重载过程与普通方法一样:
——参数的类型或个数不同
class Person{
private String name;//声明姓名属性
private int age;//声明年龄属性
public Person() {//定义无参构造
}
public Person(String name) {//定义构造,为 name 属性赋值
this.name = name;
}
public Person(String name, int age) {//定义构造方法为属性初始化
this.name = name;//为 name 属性赋值
this.age = age;//为 age 属性赋值
}
public void tell(){//取得信息的方法
System.out.println("姓名:"+getName()+", 年龄:"+getAge());
}
public String getName() {//取得姓名
return name;
}
public void setName(String name) {//设置姓名
this.name = name;
}
public int getAge() {//取得年龄
return age;
}
public void setAge(int age) {//设置年龄
if(age >=0 && age<=150){//在此处加上验证代码
this.age = age;
}
}
}
public class ConsDemo03 {
public static void main(String[] args) {
Person per = new Person("张三");//调用有一个参数的构造
per.tell();//输出信息
}
/*结果:
* 姓名:张三, 年龄:0
* */
}
匿名对象
只使用一次的对象,称为匿名对象。
匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。
class Person{
private String name;//声明姓名属性
private int age;//声明年龄属性
public Person(String name, int age) {//定义构造方法为属性初始化
this.name = name;//为 name 属性赋值
this.age = age;//为 age 属性赋值
}
public void tell(){//取得信息的方法
System.out.println("姓名:"+getName()+", 年龄:"+getAge());
}
public String getName() {//取得姓名
return name;
}
public void setName(String name) {//设置姓名
this.name = name;
}
public int getAge() {//取得年龄
return age;
}
public void setAge(int age) {//设置年龄
if(age >=0 && age<=150){//在此处加上验证代码
this.age = age;
}
}
}
public class NonameDemo01 {
public static void main(String[] args) {
new Person("张三", 30).tell();//匿名对象
}
/*结果:
* 姓名:张三, 年龄:30
* */
}