zoukankan      html  css  js  c++  java
  • 12.面向对象

    面向对象和面向过程的思想对比

    面向过程编程(Procedure Oriented Programming)POP

      是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现

    面向对象编程(Object Oriented Programming)OOP

      是一种以对象为中心的编程思想,通过指挥对象实现具体的功能

    面向对象和面向过程的思想对比

     需求:吃一盘菜(地三鲜)

    面向过程:                                                                                           面向对象

    1.买材料                                                                          1.指挥 女朋友 做饭

    2.学习地三鲜制作方式

    3.制作                                    对象

    4.吃                                                                                  2.指挥 厨师 做饭

    5.收拾

    6. 。。。。。

    需求:洗衣服

    1.泡衣服                     1.指挥 洗衣机  洗衣服

    2.洗衣服

    3.拧衣服                                  对象

    4.晾衣服                     2.指挥 女朋友 洗衣服

    5.。。。。

     自己干活                       找对象干活

    对象:指客观存在的任何一种事物 ,都可以看做程序中的对象

    万物皆对象

    面向对象思想是基于面向过程思想演变而来的

    2.使用面向对象思想可以让复杂的问题简单化

    3.将我们从执行者的位置,变成了指挥者

    1.1 类和对象的关系

    客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。

      • 类的理解

        • 类是对现实生活中一类具有共同属性行为的事物的抽象

        • 类是对事物,也就是对象的一种描述,可以将类理解为一张设计图,根据设计图,可以创造出具体的存在的事物
        • 根据去创建对象
        • 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合

        • 简单理解:类就是对现实事物的一种描述

      • 类的组成

        • 属性:指事物的特征,例如:黑马学生事物的属性(姓名,年龄,毕业院校。。。)

        • 行为:指事物能执行的操作,例如:黑马学生事物的行为(学习,Java编程开发)

    • 类和对象的关系

      • 类:类是对现实生活中一类具有共同属性和行为的事物的抽象

      • 对象:是能够看得到摸的着的真实存在的实体

      • 简单理解:类是对事物的一种描述,对象是类的实体

    1.2 类的定义【应用】

    类的组成是由属性行为两部分组成

    • 属性:在类中通过成员变量来体现(类中方法外的变量)

    • 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)

    类的定义步骤:

    ① 定义类

    ② 编写类的成员变量

    ③ 编写类的成员方法

    public class Student {
        //属性:姓名,年龄
        //成员变量:跟之前定义变量的格式一样,只不过位置发生了改变,类中方法外
        String name;
        int age;
    
        //行为:学习
        //成员方法:跟之前定义方法的格式一样,只不过去掉了static关键字
        public void study(){
            System.out.println("学习");
        }
    }
    

    1.3 对象的创建和使

    • 创建对象的格式:

      • 类名 对象名 = new 类名();

    • 调用成员的格式:

      • 对象名.成员变量

      • 对象名.成员方法();

    • 示例代码 :

      

    /*
           创建对象的格式:
                   类名 对象名 = new 类名();
           调用成员变量的格式:
                   对象名.变量名
           调用成员方法的格式:
                   对象名.方法名();
        */
    public class TestStudent {
        public static void main(String[] args) {
            // 类名 对象名 = new 类名();
            Student stu = new Student();
            // 对象名.变量名
            // 默认初始化值
            System.out.println(stu.name);  // null
            System.out.println(stu.age);   // 0
    
            stu.name = "张三";
            stu.age = 23;
    
            System.out.println(stu.name);  // 张三
            System.out.println(stu.age);   // 23
    
            // 对象名.方法名();
            stu.study();
            // com.itheima.object1.Student@b4c966a
            // 全类名(包名 + 类名)
            System.out.println(stu);
        }
    
    }
    

    1.4 案例-手机类的创建和使用

    需求 :首先定义一个手机类,然后定义一个手机测试类,在手机测试类中通过对象完成成员变量和成员方法的使用

    分析 :

    1.定义一个手机类

    类名:Phone

    成员变量:brand,price

    成员方法:call(),sendMessage()

    2.定义手机测试类

    类名:TestPhone

    因为要测试,所以有一个主方法:main方法

    3.在手机测试类中通过对象完成,成员变量和成员方法的使用

    给成员变量赋值,输出成员变量的值

    调用成员方法

    • 成员变量:品牌, 价格

    • 成员方法:打电话, 发短信

    • 示例代码:

    public class Phone {
        // 品牌, 价格
        String brand;
        int price;
    
        // 打电话, 发短信
        public void call(String name){
            System.out.println("给"+name+"打电话");
        }
    
        public void sendMessage(){
            System.out.println("群发短信");
        }
    }
    
    public class TestPhone {
        public static void main(String[] args) {
            // 1. 创建对象
            Phone p = new Phone();
            // 2. 给成员变量进行赋值
            p.brand = "大米";
            p.price = 2999;
            // 3. 打印赋值后的成员变量
            System.out.println(p.brand + "..." + p.price);
            // 4. 调用成员方法
            p.call("阿强");
            p.sendMessage();
        }
    }
    

    2. 对象内存图

    2.1 单个对象内存图【理解】

    2.2 多个对象内存图【理解】

    总结:

    多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,成员方法多个对象共用的一份

    两个引用指向同一对象的内存图

     垃圾回收:

    注意:当堆内存中,对象数组产生的地址,通过任何方式都不能被找到后,就会被判定为内存中的“垃圾”

    垃圾会被Java垃圾回收器,空闲的时候自动进行清理  

    总结 :

    当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)

    只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。

    3. 成员变量和局部变量

    什么是成员变量和局部变量

    成员变量:类中方法外的变量

    3.1 成员变量和局部变量的区别

     

    4. 封装

    4.1 private关键字

    概述 : private是一个权限修饰符,可以用来修饰成员(成员变量,成员方法)

    特点 :private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用, 提供相应的操作

    提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰

    提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

    示例代码:

    /*
        学生类
    
        private : 私有的
    
        private是一个权限修饰符
        可以用来修饰成员(变量,方法)
    
        特点: 只能在本类当中进行访问
     */
    public class Student {
        String name;
        private int age;
    
        // 设置值
        public void setAge(int a){
            if(a >= 0 && a <= 120){
                age = a;
            }else{
                System.out.println("您的年龄不合理");
            }
        }
    
        // 获取值
        public int getAge(){
            return age;
        }
    
        public void show(){
            System.out.println(name + "..." + age);
        }
    }
    
    /*
        学生测试类
     */
    public class TestStudent {
        public static void main(String[] args) {
            Student stu = new Student();
            stu.name = "张三";
            //stu.age = 23;
            stu.setAge(-23);
            stu.show();
        }
    }
    

    4.2 private关键字的使用

    • 需求:

      • 定义标准的学生类,要求name和age使用private修饰

      • 并提供set和get方法以及便于显示数据的show方法

      • 测试类中创建对象并使用,最终控制台输出  林青霞,30

    4.3 this关键字【应用】

    局部变量和成员变量如果重名,Java使用的是就近原则

    概述 : this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)

    • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量

    • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

    this关键字的作用:可以调用本类的成员(变量,方法)

    解决局部变量和成员变量的重名问题

    this代表所在类的对象引用

    • 记住:方法被哪个对象调用,this就代表哪个对象

    示例:

    public class Student {
        private String name;
    
        public void setName(String name){
            System.out.println("[方法中打印this]");
            System.out.println(this);
            this.name = name;
        }
    }
    
    public class TestStudent {
        public static void main(String[] args) {
            Student s1 = new Student();
            System.out.println("[打印对象名]-->  s1");
            System.out.println(s1);
            s1.setName("张三");
    
            System.out.println("----------------------");
    
            Student s2 = new Student();
            System.out.println("[打印对象名]-->  s2");
            System.out.println(s2);
            s2.setName("李四");
        }
    }
    

    [打印对象名]--> s1
    com.itheima.mthis.Student@3f3afe78
    [方法中打印this]
    com.itheima.mthis.Student@3f3afe78
    ----------------------
    [打印对象名]--> s2
    com.itheima.mthis.Student@7f63425a
    [方法中打印this]
    com.itheima.mthis.Student@7f63425a

     

    代码实现 :

    public class Student {
        private String name;
        private int 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 void show(){
            System.out.println(name + "..." + age);
        }
    }
    

    4.4 this内存原理【理解】

    • 注意 : this代表当前调用方法的引用,哪个对象调用的方法,this就代表哪一个对象

    • 图解 :

     

    4.5 封装思想

     

    封装概述 是面向对象三大特征之一(封装,继承,多态

    隐藏实现细节,仅对外部暴露公共的访问方式。

    是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的

    问题:封装指的就是私有吗?

     

    私有仅仅是封装的一种体现。

    提供对应的getXxx()/setXxx()方法

    将代码抽取到方法中,这是对代码的一种封装

    将属性抽取到当中,这是对数据的一种封装

    封装原则 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 成员变量private

     

    封装好处 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性

    5. 构造方法

    构建,创造对象的时候,所调用的方法

    5.1 构造方法的格式和执行时机

    5.2 构造方法的作用:本质上就是创建对象的。只不过额外用于给对象的数据(属性)进行初始化

    • 格式注意 :

      • 方法名与类名相同,大小写也要一致

      • 没有返回值类型,连void都没有

      • 没有具体的返回值(不能由retrun带回结果数据)

    • 执行时机 :

      • 创建对象的时候调用,每创建一次对象,就会执行一次构造方法

      • 不能手动调用构造方法

    • 示例代码:

    public class Student {
         /*
            格式:
    
                   1. 方法名需要跟类名相同, 大小写也要一致
                   2. 没有返回值类型, 连void都没有
                   3. 没有具体的返回值(不能由return带回具体的结果)
         */
    
        private String name;
        private int age;
    
        // 1. 如果一个类中没有编写任何构造方法, 系统将会提供一个默认的无参数构造方法
        public Student(){
            System.out.println("我是Student类的无参构造方法");
        }
    
        // 2. 如果手动编写了构造方法, 系统就不会再提供默认的无参数构造方法了
        public Student(String name, int age){
            this.name = name;
            this.age = age;
            System.out.println("我是Student类的构造方法");
        }
    
        public void show(){
            System.out.println(name + "..." + age);
        }
    }
    
    public class TestStudent {
        public static void main(String[] args) {
            Student stu1 = new Student("张三",23);
            stu1.show();
    
            Student stu2 = new Student();
        }
    }
    

    我是Student类的构造方法
    张三...23
    我是Student类的无参构造方法

    5.3 构造方法的注意事项

    构造方法的创建 :

    1.如果没有定义构造方法,系统将给出一个默认无参数构造方法

    2.如果定义了构造方法,系统将不再提供默认的构造方法

    构造方法的重载:

    如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

    构造方法的创建 :

    如果没有定义构造方法,系统将给出一个默认的无参数构造方法如果定义了构造方法,系统将不再提供默认的构造方法

    推荐的使用方式 :

    无论是否使用,都手动书写无参数构造方法,和带参数构造方法

    5.4 标准类的代码编写和使用

    1.成员变量

    使用private修饰

    2.构造方法

    提供一个无参构造方法

    提供一个带多个参数的构造方法

    3成员方法

    提供每一个成员变量对应的setXxx()/getXxx()

    提供一个显示对象信息的show()

    4.创建对象并为其成员变量赋值的两种方式

    无参构造方法创建对象后使用setXxx()赋值

    使用带参构造方法直接创建带有属性值的对象

    代码 :

    /*
        JavaBean类: 封装数据
     */
    public class Student {
        private String name;
        private int age;
        //无参构造方法
        public Student() {
        }
    
        //有参构造方法
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
        //setXxx()/getXxx()
    
        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 void show(){
            System.out.println(name + "..." + age);
        }
    }
    

    张三...23
    李四...24

      

      

      

      

      

      

      

    ------------恢复内容开始------------

    面向对象和面向过程的思想对比

    面向过程编程(Procedure Oriented Programming)POP

      是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现

    面向对象编程(Object Oriented Programming)OOP

      是一种以对象为中心的编程思想,通过指挥对象实现具体的功能

    面向对象和面向过程的思想对比

     需求:吃一盘菜(地三鲜)

    面向过程:                                                                                           面向对象

    1.买材料                                                                          1.指挥 女朋友 做饭

    2.学习地三鲜制作方式

    3.制作                                    对象

    4.吃                                                                                  2.指挥 厨师 做饭

    5.收拾

    6. 。。。。。

    需求:洗衣服

    1.泡衣服                     1.指挥 洗衣机  洗衣服

    2.洗衣服

    3.拧衣服                                  对象

    4.晾衣服                     2.指挥 女朋友 洗衣服

    5.。。。。

     自己干活                       找对象干活

    对象:指客观存在的任何一种事物 ,都可以看做程序中的对象

    万物皆对象

    面向对象思想是基于面向过程思想演变而来的

    2.使用面向对象思想可以让复杂的问题简单化

    3.将我们从执行者的位置,变成了指挥者

    1.1 类和对象的关系

    客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。

      • 类的理解

        • 类是对现实生活中一类具有共同属性行为的事物的抽象

        • 类是对事物,也就是对象的一种描述,可以将类理解为一张设计图,根据设计图,可以创造出具体的存在的事物
        • 根据去创建对象
        • 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合

        • 简单理解:类就是对现实事物的一种描述

      • 类的组成

        • 属性:指事物的特征,例如:黑马学生事物的属性(姓名,年龄,毕业院校。。。)

        • 行为:指事物能执行的操作,例如:黑马学生事物的行为(学习,Java编程开发)

    • 类和对象的关系

      • 类:类是对现实生活中一类具有共同属性和行为的事物的抽象

      • 对象:是能够看得到摸的着的真实存在的实体

      • 简单理解:类是对事物的一种描述,对象是类的实体

    1.2 类的定义【应用】

    类的组成是由属性行为两部分组成

    • 属性:在类中通过成员变量来体现(类中方法外的变量)

    • 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)

    类的定义步骤:

    ① 定义类

    ② 编写类的成员变量

    ③ 编写类的成员方法

    public class Student {
        //属性:姓名,年龄
        //成员变量:跟之前定义变量的格式一样,只不过位置发生了改变,类中方法外
        String name;
        int age;
    
        //行为:学习
        //成员方法:跟之前定义方法的格式一样,只不过去掉了static关键字
        public void study(){
            System.out.println("学习");
        }
    }
    

    1.3 对象的创建和使

    • 创建对象的格式:

      • 类名 对象名 = new 类名();

    • 调用成员的格式:

      • 对象名.成员变量

      • 对象名.成员方法();

    • 示例代码 :

      

    /*
           创建对象的格式:
                   类名 对象名 = new 类名();
           调用成员变量的格式:
                   对象名.变量名
           调用成员方法的格式:
                   对象名.方法名();
        */
    public class TestStudent {
        public static void main(String[] args) {
            // 类名 对象名 = new 类名();
            Student stu = new Student();
            // 对象名.变量名
            // 默认初始化值
            System.out.println(stu.name);  // null
            System.out.println(stu.age);   // 0
    
            stu.name = "张三";
            stu.age = 23;
    
            System.out.println(stu.name);  // 张三
            System.out.println(stu.age);   // 23
    
            // 对象名.方法名();
            stu.study();
            // com.itheima.object1.Student@b4c966a
            // 全类名(包名 + 类名)
            System.out.println(stu);
        }
    
    }
    

    1.4 案例-手机类的创建和使用

    需求 :首先定义一个手机类,然后定义一个手机测试类,在手机测试类中通过对象完成成员变量和成员方法的使用

    分析 :

    1.定义一个手机类

    类名:Phone

    成员变量:brand,price

    成员方法:call(),sendMessage()

    2.定义手机测试类

    类名:TestPhone

    因为要测试,所以有一个主方法:main方法

    3.在手机测试类中通过对象完成,成员变量和成员方法的使用

    给成员变量赋值,输出成员变量的值

    调用成员方法

    • 成员变量:品牌, 价格

    • 成员方法:打电话, 发短信

    • 示例代码:

    public class Phone {
        // 品牌, 价格
        String brand;
        int price;
    
        // 打电话, 发短信
        public void call(String name){
            System.out.println("给"+name+"打电话");
        }
    
        public void sendMessage(){
            System.out.println("群发短信");
        }
    }
    
    public class TestPhone {
        public static void main(String[] args) {
            // 1. 创建对象
            Phone p = new Phone();
            // 2. 给成员变量进行赋值
            p.brand = "大米";
            p.price = 2999;
            // 3. 打印赋值后的成员变量
            System.out.println(p.brand + "..." + p.price);
            // 4. 调用成员方法
            p.call("阿强");
            p.sendMessage();
        }
    }
    

    2. 对象内存图

    2.1 单个对象内存图【理解】

    2.2 多个对象内存图【理解】

    总结:

    多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,成员方法多个对象共用的一份

    两个引用指向同一对象的内存图

     结论:引用类型数据的传递,传递的是地址值

     垃圾回收:

    注意:当堆内存中,对象数组产生的地址,通过任何方式都不能被找到后,就会被判定为内存中的“垃圾”

    垃圾会被Java垃圾回收器,空闲的时候自动进行清理  

    总结 :

    当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)

    只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。

    3. 成员变量和局部变量

    什么是成员变量和局部变量

    成员变量:类中方法外的变量

    3.1 成员变量和局部变量的区别

     

    4. 封装

    4.1 private关键字

    概述 : private是一个权限修饰符,可以用来修饰成员(成员变量,成员方法)

    特点 :private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用, 提供相应的操作

    提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰

    提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

    示例代码:

    /*
        学生类
    
        private : 私有的
    
        private是一个权限修饰符
        可以用来修饰成员(变量,方法)
    
        特点: 只能在本类当中进行访问
     */
    public class Student {
        String name;
        private int age;
    
        // 设置值
        public void setAge(int a){
            if(a >= 0 && a <= 120){
                age = a;
            }else{
                System.out.println("您的年龄不合理");
            }
        }
    
        // 获取值
        public int getAge(){
            return age;
        }
    
        public void show(){
            System.out.println(name + "..." + age);
        }
    }
    
    /*
        学生测试类
     */
    public class TestStudent {
        public static void main(String[] args) {
            Student stu = new Student();
            stu.name = "张三";
            //stu.age = 23;
            stu.setAge(-23);
            stu.show();
        }
    }
    

    4.2 private关键字的使用

    • 需求:

      • 定义标准的学生类,要求name和age使用private修饰

      • 并提供set和get方法以及便于显示数据的show方法

      • 测试类中创建对象并使用,最终控制台输出  林青霞,30

    4.3 this关键字【应用】

    局部变量和成员变量如果重名,Java使用的是就近原则

    概述 : this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)

    • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量

    • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

    this关键字的作用:可以调用本类的成员(变量,方法)

    解决局部变量和成员变量的重名问题

    this代表所在类的对象引用

    • 记住:方法被哪个对象调用,this就代表哪个对象

    示例:

    public class Student {
        private String name;
    
        public void setName(String name){
            System.out.println("[方法中打印this]");
            System.out.println(this);
            this.name = name;
        }
    }
    
    public class TestStudent {
        public static void main(String[] args) {
            Student s1 = new Student();
            System.out.println("[打印对象名]-->  s1");
            System.out.println(s1);
            s1.setName("张三");
    
            System.out.println("----------------------");
    
            Student s2 = new Student();
            System.out.println("[打印对象名]-->  s2");
            System.out.println(s2);
            s2.setName("李四");
        }
    }
    

    [打印对象名]--> s1
    com.itheima.mthis.Student@3f3afe78
    [方法中打印this]
    com.itheima.mthis.Student@3f3afe78
    ----------------------
    [打印对象名]--> s2
    com.itheima.mthis.Student@7f63425a
    [方法中打印this]
    com.itheima.mthis.Student@7f63425a

     

    代码实现 :

    public class Student {
        private String name;
        private int 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 void show(){
            System.out.println(name + "..." + age);
        }
    }
    

    4.4 this内存原理【理解】

    • 注意 : this代表当前调用方法的引用,哪个对象调用的方法,this就代表哪一个对象

    • 变量的使用遵守就近原则!
    • 图解 :

     

    4.5 封装思想

     为什么要对属性进行封装?

      通过对象名直接访问成员变量的方式堆属性赋值,会存在安全隐患,应该怎样解决呢?

      解决方式:不让外界直接访问成员变量(也就是要对属性进行封装)

      

    封装概述 是面向对象三大特征之一(封装,继承,多态

    隐藏实现细节,仅对外部暴露公共的访问方式。

    是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的

    问题:封装指的就是私有吗?

     

    私有仅仅是封装的一种体现。

    提供对应的getXxx()/setXxx()方法

    将代码抽取到方法中,这是对代码的一种封装

    将属性抽取到当中,这是对数据的一种封装

    封装原则 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 成员变量private

     

    封装好处 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性

    5. 构造方法

    构建,创造对象的时候,所调用的方法

    概述:构造方法是一个比较特殊的方法,主要用来创建对象以及给对象的属性赋初始值

    构造方法的定义:

      空参构造方法:

        public 类名(){}

      有参构造方法:

        public 类名(形参列表){

          给属性赋值

        }

    5.1 构造方法的格式和执行时机

    5.2 构造方法的作用:本质上就是创建对象的。只不过额外用于给对象的数据(属性)进行初始化

    • 格式注意 :

      • 方法名与类名相同,大小写也要一致

      • 没有返回值类型,连void都没有

      • 没有具体的返回值(不能由retrun带回结果数据)

    • 执行时机 :

      • 创建对象的时候调用,每创建一次对象,就会执行一次构造方法

      • 不能手动调用构造方法

    • 示例代码:

    public class Student {
         /*
            格式:
    
                   1. 方法名需要跟类名相同, 大小写也要一致
                   2. 没有返回值类型, 连void都没有
                   3. 没有具体的返回值(不能由return带回具体的结果)
         */
    
        private String name;
        private int age;
    
        // 1. 如果一个类中没有编写任何构造方法, 系统将会提供一个默认的无参数构造方法
        public Student(){
            System.out.println("我是Student类的无参构造方法");
        }
    
        // 2. 如果手动编写了构造方法, 系统就不会再提供默认的无参数构造方法了
        public Student(String name, int age){
            this.name = name;
            this.age = age;
            System.out.println("我是Student类的构造方法");
        }
    
        public void show(){
            System.out.println(name + "..." + age);
        }
    }
    
    public class TestStudent {
        public static void main(String[] args) {
            Student stu1 = new Student("张三",23);
            stu1.show();
    
            Student stu2 = new Student();
        }
    }
    

    我是Student类的构造方法
    张三...23
    我是Student类的无参构造方法

    5.3 构造方法的注意事项

    构造方法的创建 :

    1.如果没有定义构造方法,系统将给出一个默认无参数构造方法

    2.如果定义了构造方法,系统将不再提供默认的构造方法

    构造方法的重载:

    如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

    构造方法的创建 :

    如果没有定义构造方法,系统将给出一个默认的无参数构造方法如果定义了构造方法,系统将不再提供默认的构造方法

    推荐的使用方式 :

    无论是否使用,都手动书写无参数构造方法,和带参数构造方法

    5.4 标准类的代码编写和使用

    要求类必须是公共的

    1.成员变量

    使用private修饰

    2.构造方法

    提供一个无参构造方法

    提供一个带多个参数的构造方法

    3成员方法

    提供每一个成员变量对应的setXxx()/getXxx()

    提供一个显示对象信息的show()

    4.创建对象并为其成员变量赋值的两种方式

    无参构造方法创建对象后使用setXxx()赋值

    使用带参构造方法直接创建带有属性值的对象

    代码 :

    /*
        JavaBean类: 封装数据
     */
    public class Student {
        private String name;
        private int age;
        //无参构造方法
        public Student() {
        }
    
        //有参构造方法
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
        //setXxx()/getXxx()
    
        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 void show(){
            System.out.println(name + "..." + age);
        }
    }
    

    张三...23
    李四...24

    set方法和构造方法的区别:

    构造方法用来创建对象,并给对象的属性赋初始值,只能赋值一次。

    set方法用来给对象的属性赋值,可以赋值多次。

      

      

      

      

      

      

    ------------恢复内容结束------------

  • 相关阅读:
    atitit 提升数据库死锁处理总结
    CoreJava_线程并发(堵塞队列):在某个目录下搜索含有某keyword的文件
    HDU 4389——X mod f(x)(数位DP)
    POJ 1182 (经典食物链 /并查集扩展)
    【iOS-Android开发对照】 之 APP入口
    《Pro Android Graphics》读书笔记之第四节
    Android多个Module统一配置相同jar或库的版本号
    教你上传代码到码云(与github一样)
    解决本地项目推送到码云(github),上提示:failed to push some refs to ...
    android adb常用指令
  • 原文地址:https://www.cnblogs.com/faded8679/p/13870036.html
Copyright © 2011-2022 走看看