执行顺序
构造代码块->构造方法->对象创建成功->调用方法(局部代码块)
构造方法
概念
构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法
构造方法的主要功能就是完成对象创建或者初始化
当类创建对象(实例化)时,就会自动调用构造方法
构造方法与普通方法一样也可以重载.
形式
方法格式:修饰符 返回值类型 方法名(参数列表){方法体;}构造方法格式:修饰符 类名(参数列表){方法体;}
- 每个类中默认存在无参构造方法
普通方法格式:修饰符 返回值类型 方法名(参数列表){方法体;}
构造方法格式:修饰符 类名(参数列表){方法体;}
- 每次创建对象时,都会自动触发对象的构造方法来创建对象
方法重载:在同一个类中,存在多个方法名相同但参数列表不同的方法
- 构造方法也存在重载的现象:无参构造、含参构造、全参构造
- 如果提供了含参构造,默认的无参构造会被覆盖
如果想继续使用无参构造创建对象,就必须手动提供无参构造
public class TestConstructor { public static void main(String[] args) { //4.创建对象进行测试 People p = new People(100); People p1 = new People(); System.out.println(“姓名:” + p.name + “,性别:” + p.gender + “,年龄:” + p.age);//查看p对象属性值 p.eat();//通过p对象调用eat()方法 } }
//1.创建一个People类,把人的相关特征与行为封装为一个类组件 class People{ //2.属性/字段—成员变量 String name; int age; String gender; / 1.每个类中默认存在无参构造方法 方法格式:修饰符 返回值类型 方法名(参数列表){方法体;} 构造方法格式:修饰符 类名(参数列表){方法体;} 2.每次创建对象时,都会自动触发对象的构造方法来创建对象 方法重载:在同一个类中,存在多个方法名相同但参数列表不同的方法 3.构造方法也存在重载的现象:无参构造、含参构造、全参构造 4如果提供了含参构造,默认的无参构造会被覆盖 如果想继续使用无参构造创建对象,就必须手动提供无参构造 /
public People(){System.out.println("我是People类的无参构造方法!");}//3.功能--方法public void eat(){System.out.println("干饭人,干饭魂");}//创建一个含参构造方法public People(int a){System.out.println("我是People类的含参构造方法" + a);}
}
<a name="FjNpz"></a># 代码块<a name="vP4RI"></a>## 构造代码块<a name="XkiKg"></a>### 语法结构
{代码}
<a name="vI2G4"></a>### 特点_位置:类里方法外<br />执行时机:创建对象时执行,并且优先于构造方法执行<br />作用:用于提取所有构造方法的共性功能_<a name="lh85X"></a>## 局部代码块<a name="lVcVi"></a>### 语法结构
{代码}
<a name="D9Yix"></a>### 特点_位置:方法里<br />执行时机:调用该代码块所在的方法时执行<br />功能:控制变量的适用范围,变量只能在局部使用,在局部代码块之外会失效_<a name="Qqlzs"></a>## 示例```javapackage cn.tedu.oop;/*** 用于测试代码块*/public class TestBlock {public static void main(String[] args) {Teacher t = new Teacher();Teacher t1 = new Teacher("计算机组成原理");t.sleep();}}//创建一个老师类用于测试数据class Teacher{String subject;String country;/*创建一个构造代码块位置:类里方法外执行时机:创建对象时执行,并且优先于构造方法执行作用:用于提取所有构造方法的共性功能*/{country = "华夏";System.out.println("构造代码块");}public Teacher(){System.out.println("我是一个没有感情的无参构造方法。" + country);}public Teacher(String subject) {this.subject = subject;System.out.println("我是一个感情丰富的全参构造方法。" + country);}public void sleep(){/*创建一个局部代码块位置:方法里执行时机:调用该代码块所在的方法时执行功能:控制变量的适用范围,变量只能在局部使用,在局部代码块之外会失效*/{System.out.println("局部代码块");}}}
this
概念
this代表本类对象的一个引用对象
this代表的是本类,指定的也是本类的资源,例如成员变量
- 当成员变量与局部变量重名时,用于指定成员变量
- 可以实现构造方法间的调用
(1)格式
无参构造调用—this();
含参构造—this(参数); - 注意事项:构造方法的调用不能互相调用,是单向的,不然会报错
- 构造方法的调用必须出现在第一行
形式
this.name = name;
示例
this在变量名相同时使用
```java package cn.tedu.oop;
/**
- 用于测试成员变量与局部变量同名是,this的使用情况 */
public class TestThis1 { public static void main(String[] args) { Cat c = new Cat(); c.jump(); } }
// class Cat{ int sum = 100; String s = “书读千遍,其意自见”;
public void jump(){int sum = 10;System.out.println(sum);System.out.println(this.sum);System.out.println(this.s);}
}
<a name="YaDni"></a>### this在构造方法间的调用·_**构造方法的调用只能是单项调用,不能互相调用**_<br />_**this调用构造方法的语句必须在第一行**_```javapackage cn.tedu.oop;/*** 用于测试构造方法间的互相调用*/public class TestThis2 {public static void main(String[] args) {Game g = new Game();Game g1 = new Game("马里奥制造");//不能按照调用普通方法的格式去调用构造方法}}class Game{public Game() {/*在无参构造中调用含参构造的格式构造方法的调用只能是单项调用,不能互相调用this调用构造方法的语句必须在第一行*/this("任天堂明星大乱斗");System.out.println("无参构造");}public Game(String name){/*在含参构造中调用无参构造的格式*///this();System.out.println(name);}}
