zoukankan      html  css  js  c++  java
  • 面向对象之构造方法and this关键字

    构造方法介绍

    需要在创建对象的同时明确对象的属性值

    l  构造方法的格式:

    修饰符构造方法名(参数列表)

    {

    }

    构造方法的体现:

    1.  构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。

    2.  构造方法名称必须和类名保持一致。

    3.  构造方法没有具体的返回值。

    构造方法的代码体现:

     1 class Person {
     2 
     3     // Person的成员属性age和name
     4 
     5     private int age;
     6 
     7     private String name;
     8 
     9  
    10 
    11     // Person的构造方法,拥有参数列表
    12 
    13     Person(int a, String nm) {
    14 
    15         // 接受到创建对象时传递进来的值,将值赋给成员属性
    16 
    17         age = a;
    18 
    19         name = nm;
    20 
    21     }
    22 
    23 }

    public class Person {
        private String name;
        private int age;
        public Person(){
            name="小猪佩奇";
            age=16;
        }
        //构造方法的重载
        public Person(String name,int age){
            this.name=name;
            this.age=age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
    }

    测试类:

    public class Test {
        //构造方法调用:创建对象new的时候调用,而且一个对象只能调用一次
        //构造方法:1.如果你这个类里面,一个构造方法也没有,那么这个类在编译时候,
                        //你的编译器会自动给你添加一个空参构造方法
                        //public Person(){}
        //2.但如果你的这个类中有哟个或者多个构造方法,那么编译器就不给你添加了
        public static void main(String[] args) {
            Person p=new Person();
            Person p1=new Person("琪琪国王",8);
            System.out.println(p1.getName());
            System.out.println(p1.getAge());
    
        }
    
    }

    图解:

    构造方法和一般方法区别

    构造方法在对象创建时就执行了,而且只执行一次。

    一般方法是在对象创建后,需要使用时才被对象调用,并可以被多次调用。

    this关键字

    构造方法之间的调用,可以通过this关键字来完成。

    1.  构造方法调用格式:

    this(参数列表);

     构造方法的调用

    class Person {
    
        // Person的成员属性
    
        private int age;
    
        private String name;
    
     
    
        // 无参数的构造方法
    
        Person() {
    
        }
    
     
    
        // 给姓名初始化的构造方法
    
        Person(String nm) {
    
            name = nm;
    
        }
    
        // 给姓名和年龄初始化的构造方法
    
        Person(String nm, int a) {
    
            // 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可
    
            // 调用其他构造方法,需要通过this关键字来调用
    
            this(nm);
    
            // 给年龄初始化
    
            age = a;
    
        }
    }

     this的原理图解

    可以在成员变量名前面加上this.来区别成员变量和局部变量

    class Person {
        private int age;
        private String name;
    
        // 给姓名和年龄初始化的构造方法
        Person(String name, int age) {
            // 当需要访问成员变量是,只需要在成员变量前面加上this.即可
            this.name = name;
            this.age = age;
        }
    
        public void speak() {
            System.out.println("name=" + this.name + ",age=" + this.age);
        }
    }
    
    class PersonDemo {
        public static void main(String[] args) {
            Person p = new Person("张三", 23);
            p.speak();
        }
    }

      this的应用

    需求:在Person类中定义功能,判断两个人是否是同龄人

    class Person {
    
        private int age;
    
        private String name;
    
    
        // 给姓名和年龄初始化的构造方法
    
        Person(String name, int age) {
    
            // 当需要访问成员变量是,只需要在成员变量前面加上this.即可
    
            this.name = name;
    
            this.age = age;
    
        }
    
     
    
        public void speak() {
    
            System.out.println("name=" + this.name + ",age=" + this.age);
    
        }
    
     
    
        // 判断是否为同龄人
    
        public boolean equalsAge(Person p) {
    
            // 使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较
    
            // 由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替
    
            /*
    
             * if(this.age == p.age) { return true; } return false;
    
             */
    
            return this.age = p.age;
    
        }
    
    }
  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/2734156755z/p/9365061.html
Copyright © 2011-2022 走看看