无声specialweek

从零开始学Java-Day07

构造函数

构造函数的最大作用:创建对象时完成初始化,当我们在new一个对象并传入参数的时候,会自动调用构造函数并完成参数的初始化。

package cn.tedu.oop;
//本类用于测试构造方法
public class TestConstructor {
    public static void main(String[] args) {
        Comic comic = new Comic("从零开始");
        Comic comic2 = new Comic();
        Comic comic3 = new Comic("青春","高木同学",24);
        System.out.println(comic3.name);
    }
}
/*默认存在一个无参的构造方法,当new Comic()创建对象时,会自动出发该类的无参构造方法*/
/*每次实例化创建对象时,都会自动调用构造方法*/
/*构造方法存在重载的现象*/
/*如果添加了含参构造方法,会覆盖无参构造,所以要手动添加无参构造*/
/*全参构造可以给所有的参数赋值*/
class Comic{
    String type;
    String name;
    int series;
    public Comic(){
        System.out.println("这是一个构造方法");
    }
    public Comic(String a){
        System.out.println("这是一个带参数的构造方法" + a);
    }

    public Comic(String type, String name, int series) {
        this.type = type;
        this.name = name;
        this.series = series;
        System.out.println("我时全参构造方法" + " " + type + " " + name + " " + series);
    }

    public void fans(){
        System.out.println("亿万粉丝");
    }
}

概念

构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法
构造方法的主要功能就是完成对象创建或者初始化
当类创建对象(实例化)时,就会自动调用构造方法
构造方法与普通方法一样也可以重载.

构造代码块和局部代码块

构造代码块

  1. 位置: 在类的内部,在方法的外部
  2. 作用: 用于抽取构造方法中的共性代码
  3. 执行时机: 每次调用构造方法前都会调用构造代码块
  4. 注意事项: 构造代码块优先于构造方法加载

局部代码块

  1. 位置: 在方法里面的代码块
  2. 作用: 通常用于控制变量的作用范围,出了花括号就失效
  3. 注意事项: 变量的作用范围越小越好,成员变量会存在线程安全的问题
package cn.tedu.oop;
//本类用于测试代码块的基本知识
public class TestBlock {
    public static void main(String[] args) {
        Person p = new Person();
        Person p2 = new Person("体育");
        p.job();
    }
}

class Person{
    String name;
    {
        name = "西片先生";
        System.out.println("这是构造代码块");
    }
    public Person(){
        System.out.println("无参的构造方法" + name);
    }
    public Person(String job){
        System.out.println(name + "是教" + job + "的");
    }
    public void job(){
        {
            int i = 1;
            System.out.println("局部变量" + i);
        }
        System.out.print(name);
        System.out.println("他是一名体育老师");
    }
}

this

代表本类对象的一个引用对象,用于引用成员变量。

可以实现构造方法间调用

  • 必须放在构造函数内的第一行
  • 而且只能写在一个构造方法内,不然会递归,无限调用。
package cn.tedu.oop;
//本类用于测试this
public class TestVariableThis1 {
    public static void main(String[] args) {
        House specialWeek = new House();
        specialWeek.name = "specialWeek";
        specialWeek.food();

    }
}
/*this代表本类,局部变量和成员变量同名。可以用this.xxxx加以区分。*/
class House{
    private double speed;
    private double size;
    private double height;
    private double weight;
    int food_sum = 10;
    String food = "胡萝卜";
    String name;
    public void food(){

        int food_sum = 100;
        System.out.println("吃" + food_sum + "份甜点");


        System.out.println("吃" + this.food_sum + "胡萝卜汉堡");
    }
    public void run(){
        System.out.println("一马当先,万马无光!");
    }
}


package cn.tedu.oop;
//本类用于this关键字测试
public class TestVariableThis2 {
    public static void main(String[] args) {
        Mumamusimi house = new Mumamusimi();
        Mumamusimi house2 = new Mumamusimi("silencesiziha");
    }
}
/*规定:想在构造方法中使用this关键字必须在第一行使用*/
class Mumamusimi{
    String name;
    String mother;
    String father;
    double speed;
    int age;
    public Mumamusimi(){
        //this("无声铃鹿");
        System.out.println("前方的景色绝不退让");
    }
    public Mumamusimi(String name){
        /*在含参构造函数中调用this*/
        this();
        System.out.println(name + ":前方的景色绝不退让");
    }
}

posted on 2021-06-08 18:35  无声specialweek  阅读(34)  评论(0编辑  收藏  举报

导航