构造方法+块+this

2021-10-13  本文已影响0人  公子请留步LookMe

构造方法 --- 做事情

1.作用:只有一个,构造当前类的对象
2.写法:权限修饰符 方法名字(必须与类名一致)(参数列表){}
3.用法:通过new关键字调用
4.特点:
1.每一个类都有构造方法,诺自己在类中没有定义,系统会默认提供一个无参数的构造方法,如果自己定义了构造方法,则默认无参数的构造方法即被覆盖
2.存在构造方法的重载.

public class TestConstructor {
    public static void main(String[] args) {
        //创建Person类的对象
        /*1.每次new对象时,都会自动触发对应类中的构造方法*/
        /*2.每一个类中都会默认存在一个没有参数的构造方法
        *但是 如果提供了其他的构造方法,默认的无参构造就会被覆盖掉
        *所以,我们要手动的提供无参构造,这样才能不传参数,也能创建对象*/
        Person p = new Person();//new(实例化)一个默认带无参数的构造方法 (也就相当于new 一个对象 )
        p.eat();
        /*4.每次创建对象,都会执行一个构造方法
        * 构造方法的作用:用来创建对象*/
        Person p1 = new Person();
        /*5.全参构造不仅可以创建对象,还可以给对象的所有属性赋值*/
        Person p2 = new Person("泡泡",18,"车底");
        System.out.println(p2.name);
        System.out.println(p2.age);
        System.out.println(p2.address);
    }

}
//1.创建Person类 ,描述人这一类事物
class Person{
    //2.定义属性
    String name;
    int age;
    String address;
    //3.创建方法
    public void eat(){
        System.out.println("端起了我的饭盆");
    }
    /*3.构造方法的格式:与本类类名同名,且没有返回值类型的方法*/
    //4.1创建本类的无参构造---没有参数的构造方法
    public  Person(){
        System.out.println("我是一个默认的构造方法");
    }
    //4.2创建本类的含参构造方法---含有参数的构造方法
    public Person(int i){
        System.out.println("我是一个带int的构造方法");
    }
    //4.3创建本类的全参构造--此构造方法的参数与本类的属性一致
    public Person(String name, int age, String address) {
        System.out.println("我是person类的全参构造方法");
        this.name = name;
        this.age = age;
        this.address = address;
    }
}

构造方法块

一.构造代码块:{}
1.位置:类里方法外
2.执行时机:每次创建对象时都会执行构造代码块,并且构造代码优先于构造方法
3.作用:用于提取所有构造方法的共性功能,
二.局部代码块{}
1.位置:方法里
2.执行时机:调用本局部代码块所处的方法时才会执行
3.作用:用于控制变量的作用范围,变量的值越小越好

public class TestBlock {
 public static void main(String[] args) {
     Pig pig = new Pig();
     Pig pig1 = new Pig("狗肉",11);
 }
}
//1.创建一个小猪类用来测试
class Pig{
 //2.定义属性
 String food;
 int age;
 //3.创建普通方法
 //4.创建本本类的构造代码块
 {
/*        构造代码块:{}
     1.位置:类里方法外
     2.执行时机:每次创建对象时都会执行构造代码块,并且构造代码优先于构造方法
     3.作用:用于提取所有构造方法的共性功能,
*/

     System.out.println("我是一个构造代码块");
     System.out.println("黑猪肉!");
 }
 public void eat(){
     System.out.println("小猪爱吃 狗肉");
     //5.创建本类的局部代码块
     {
/*            局部代码块{}
          1.位置:方法里
          2.执行时机:调用本局部代码块所处的方法时才会执行
          3.作用:用于控制变量的作用范围变量的值越小越好
*/

         System.out.println("我是一个局部代码块");
     }
 }
 public Pig(){
//        System.out.println("黑猪肉!");
     System.out.println("我是无参构造方法");
 }
 public Pig(String food, int age) {
//        System.out.println("黑猪肉!");
     System.out.println("我是全参构造方法");
     this.food = food;
     this.age = age;
 }
}

this:

1.特征和用法:当成员变量与局部变量同名时,可以使用this指定本类的成员变量,如果不使用this指定,打印的就是近处的这个局部变量,就近原则。

public class TestThis1 {
    public static void main(String[] args) {

       Dog dog = new Dog();
       Dog dog1 = new Dog("黑天鹅");

    }
}
//1.创建小狗类

class Dog{
    //2.1创建本类的无参构造
    public Dog(){
        System.out.println("无参");
    }
    //2.2创建本类String类型 的有参构造
    public Dog(String s){
       /* 在含参构造中,调用无参构造的功能
       * 规定:this关键字必须在构造函数的第一行
       * 调用是单向的,不能双休 不然死循环
*/
        this();
        System.out.println("有参"+s);

    }
}
上一篇下一篇

猜你喜欢

热点阅读