美文网首页
构造方法+块+this

构造方法+块+this

作者: 公子请留步LookMe | 来源:发表于2021-10-13 16:01 被阅读0次

    构造方法 --- 做事情

    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);
    
        }
    }
    

    相关文章

      网友评论

          本文标题:构造方法+块+this

          本文链接:https://www.haomeiwen.com/subject/hhkafktx.html