Java从零开始学十二(构造方法)
一、构造方法
构造方法的主要目的是为类中的属性初始化
二、构造方法的定义格式
class 类名称{
访问权限 类名称(类型1 参数1,类型2 参数2,…){
程序语句 ;
… // 构造方法没有返回值
}
}
在构造方法的声明中读者一定要牢记以下几点:
· 构造方法的名称必须与类名称一致
· 构造方法的声明处不能有任何返回值类型的声明
· 不能在构造方法中使用return返回一个值
class Person { private String name; // 声明姓名属性 private int age; // 声明年龄属性 public Person(String name,int age){ // 定义构造方法为属性初始化 this.setName(name) ; // 为name属性赋值 this.setAge(age) ; // 为age属性赋值 } public void tell() { // 取得信息的方法 System.out.println("姓名:" + getName() + ",年龄:" + getAge()); } ... public void setAge(int a) { // 设置年龄 if (a >= 0 && a < 150) { // 在此处加上验证代码 age = a; } } } public class ConsDemo02 { public static void main(String args[]) { Person per = new Person("张三",30); // 调用构造方法,传递两个参数 per.tell(); // 输出信息 } }
三、 构造方法
3.1 、默认的构造方法
每个类中肯定都会有一个构造方法
如果一个类中没有声明一个明确的构造方法则会自动生成一个无参的什么都不做的构造方法
package com.pb.demo2; /* * 人类 */ public class Person { //Persion为类名 /* * 属性,name,sex,age */ public String name; //名字 public String sex ; //性别 public int age; //年龄 /* *方法(行为) */ //吃饭 public void eat(String name){ //传入一个String类型参数 System.out.println(this.name+"邀请"+name+"一起吃饭"); } //工作 public void work(){ System.out.println(name+"的工作理念是,干活挣钱有饭吃!"); } //工作 public void work(String contect){ System.out.println(name+"的工作理念是: "+contect); } }
上面这个类并没有定义构造方法,但在创建这个类的对象里会默认调用无参数的构造方法
public Person() { }
public static void main(String[] args) { //创建Person类的对象 Person hanbing=new Person(); //调用无参数的构造方法 }
四、构造方法的重载
构造方法的重载过程与普通方法一样:参数的类型或个数不同
4.1构造方法的重载例一
public Person(){ //无参数 } public Person(String name){ //一个参数 this.name=name ; } public Person(String name,int age){ //两个参数 this.name=name; this.age=age; }
4.2、例2
package com.pb.demo2; /* * 影片类 */ public class Film { public String type; //影片类型,恐怖片,爱情等 public String name; //电影名称 public String director; //导演 public String actor; //主演 public Film() { //无参数的构造方法 } public Film(String type) { //一个参数 this.type=type; } public Film(String type, String name, String director, String actor) { //全部参数的构造方法 this.type = type; this.name = name; this.director = director; this.actor = actor; } //简介方法 public String display(){ String msg="影片类型: "+type+"\n片名 : "+name+"\n导演:"+director+"\n主演: "+actor; return msg; } }
测试类
package com.pb.demo2; /* * 影片测试类 */ public class FilmTest { public static void main(String[] args) { System.out.println("*******普通调用******"); // 声明影片对象 Film film=new Film(); //为对象的类型,名字,导演,主演赋值 film.type="枪战片"; film.name="让子弹飞"; film.director="姜文"; film.actor="周润发、葛优、姜文"; //调用方法 System.out.println(film.display()); System.out.println("**************使用构造方法****************"); // 声明影片对象并通过构造方法来传入参数 Film two=new Film("爱情片", "不能说的秘密", "周杰伦", "周杰伦、黄秋生、桂纶镁"); System.out.println(two.display()); } }