package com.atguigu.java1;
/*
* 类的结构之三:构造器(或构造方法、constructor)的使用 别把构造器误认为是方法的一种,它是一种独立的结构
* construct:建设、建造。 construction:CCB constructor:建设者
*
* 一、构造器的作用:
* 1.创建对象
* 2.初始化对象的信息 比如给属性初始化。。。。。。
*
* 二、说明:
* 1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器
* 2.定义构造器的格式:权限修饰符 类名(形参列表){}
* 3.一个类中定义的多个构造器,彼此构成重载
* 4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器,so不能把下面的空参构造器注释掉,除非把所有显式构造器注释掉。
* 5.一个类中,至少会有一个构造器。
*/
public class PersonTest {
public static void main(String[] args) {
//创建类的对象:new + 构造器 Person()就是构造器
Person p = new Person();
p.eat();
Person p1 = new Person("Tom");
System.out.println(p1.name);
}
}
class Person{
//属性
String name;
int age;
//构造器
public Person(){
System.out.println("Person().....");
}
public Person(String n){ //给name属性初始化
name = n;
}
//
public Person(String n,int a){
name = n;
age = a;
}
//方法
public void eat(){
System.out.println("人吃饭");
}
public void study(){
System.out.println("人可以学习");
}
}
构造器使用细节说明:
/*
* 1.创建程序,在其中定义两个类:Person和PersonTest类。定义如下:
* 用setAge()设置人的合法年龄(0~130),用getAge()返回人的年龄。
*
* 2.练习2:
* 2.1. 在前面定义的Person类中添加构造器,利用构造器设置所有人的age属性初始值都为18。
* 2.2. 修改上题中类和构造器,增加name属性,使得每次创建Person对象的同时初始化对象的age属性值和name属性值。
*
*/
public class Person {
private int age;
private String name;
public Person(){
age = 18;
}
public Person(String n,int a){
name = n;
age = a;
}
public void setAge(int a){
if(a < 0 || a > 130){
// throw new RuntimeException("传入的数据非法!");
System.out.println("传入的数据非法!");
return;
}
age = a;
}
public int getAge(){
return age;
}
//绝对不要这样写!!
// public int doAge(int a){
// age = a;
// return age;
// }
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
}
/*
* 在PersonTest类中实例化Person类的对象b,
* 调用setAge()和getAge()方法,体会Java的封装性。
*
*/
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
// p1.age = 1;编译不通过
p1.setAge(12);
System.out.println("年龄为:" + p1.getAge());
// p1.doAge(122);
Person p2 = new Person("Tom", 21);
System.out.println("name = " + p2.getName() + ",age = " + p2.getAge());
}
}