java 类与对象、封装、构造方法 学习笔记总结

一、面向对象
1.面向对象的思想概述
面向过程:强调的是过程,也就是完成功能的每一个步骤都需要自己亲力亲为
面向对象:强调的是对象,也就是使用对象来帮我们去完成功能
2.生活中举例
吃烤鸭:
面向过程:买一只小鸭苗–>买饲料–>开始养–>养大了–>杀掉–>拔毛–>腌制一下–>买一个烤炉–>烤一烤–>开吃–>刷碗
面向对象:到全聚德–>点一份烤鸭–>开吃–>走人
3.面向对象思想的好处:
A:将复杂的事情简单化
B:可以将程序员由执行者变成指挥者
C:更符合人们思想习惯的思想(懒人思想)
4.面向对象的三大特征
封装
继承
多态
5.类和对象之间的关系
类:
(今日所学):就是指一组事物的属性和行为的集合。也是一种抽象的泛泛的概念
举例:
猫:属性和行为的集合

        (今后所学):物以类聚。例如:动物类、水果类、植物类、人类....
    对象:
        (今日所学):就是指某个事物的具体体现。
        举例:
            波斯猫,年龄是3岁。颜色是黑白色。它可以抓老鼠
            加菲猫:年龄是2岁。颜色是花色。它可以睡懒觉

        (今后所学):对象就是指某一类事物中的具体的对象。例如:
            动物类:猫、狗、猪
            水果类:苹果、香蕉

    属性(成员变量):就是指事物的一些描述信息
    行为(成员方法):就是指事物可以做哪些事情

6.定义一个类
    //学生类
        public class Student {
            // 成员变量
            String name; // 姓名
            int age;     // 年龄

            // 成员方法
            public void eat() {
                System.out.println("吃饭饭!");
            }

            public void sleep() {
                System.out.println("睡觉觉!");
            }

            public void study() {
                System.out.println("学习!");
            }
        }
7.使用一个类
    A:导包:idea会自动导包
    B:创建对象:类名 对象名 = new 类名();
    C:使用成员:对象名.成员变量 或者 对象名.成员方法
        //使用学生类
        public class Demo02Student {
            public static void main(String[] args) {
                // 1. 导包。
                // 我需要使用的Student类,和我自己Demo02Student位于同一个包下,所以省略导包语句不写

                // 2. 创建,格式:
                // 类名称 对象名 = new 类名称();
                // 根据Student类,创建了一个名为stu的对象
                Student stu = new Student();

                // 3. 使用其中的成员变量,格式:
                // 对象名.成员变量名
                System.out.println(stu.name); // null
                System.out.println(stu.age);  // 0
                System.out.println("=============");

                // 改变对象当中的成员变量数值内容
                // 将右侧的字符串,赋值交给stu对象当中的name成员变量
                stu.name = "赵丽颖";
                stu.age = 18;
                System.out.println(stu.name); // 赵丽颖
                System.out.println(stu.age); // 18
                System.out.println("=============");

                // 4. 使用对象的成员方法,格式:
                // 对象名.成员方法名()
                stu.eat();
                stu.sleep();
                stu.study();
            }
        }
8.手机类的定义和使用
        //手机类
        public class Phone {
            // 成员变量
            String brand; // 品牌
            double price; // 价格
            String color; // 颜色

            // 成员方法
            public void call(String who) {
                System.out.println("给" + who + "打电话");
            }

            public void sendMessage() {
                System.out.println("群发短信");
            }
        }


        //使用手机类
        public class Demo01PhoneOne {
            public static void main(String[] args) {
                // 根据Phone类,创建一个名为one的对象
                // 格式:类名称 对象名 = new 类名称();
                Phone one = new Phone();

                //为成员变量赋值
                one.brand = "苹果";
                one.price = 8388.0;
                one.color = "黑色";
                System.out.println(one.brand); // 苹果
                System.out.println(one.price); // 8388.0
                System.out.println(one.color); // 黑色
                System.out.println("=========");

                one.call("乔布斯"); // 给乔布斯打电话
                one.sendMessage(); // 群发短信
            }
        }

二、对象的内存图解

栈内存特点:先进后出。方法调用时进栈。方法结束时弹栈!直接从栈内存消失
堆内存特点:只要有对象引用存在,就一直存在。如果没有任何对象指向它,就会变成垃圾。由垃圾回收器自动回收

三、将对象作为方法的参数和返回值使用
1.将对象作为方法的参数传递使用
重点:传递的是对象的地址值

    public class Demo04PhoneParam {
            public static void main(String[] args) {
                Phone one = new Phone();
                one.brand = "苹果";
                one.price = 8388.0;
                one.color = "土豪金";

                method(one); // 传递进去的参数其实就是地址值
            }

            public static void method(Phone param) {
                System.out.println(param.brand); // 苹果
                System.out.println(param.price); // 8388.0
                System.out.println(param.color); // 土豪金
            }
        }
2.将对象作为方法的返回值使用
    重点:返回的是对象的地址值
        public class Demo05PhoneReturn {
            public static void main(String[] args) {
                Phone two = getPhone();
                System.out.println(two.brand); // 苹果
                System.out.println(two.price); // 8388.0
                System.out.println(two.color); // 玫瑰金
                System.out.println(two);
            }

            public static Phone getPhone() {
                Phone one = new Phone();
                one.brand = "苹果";
                one.price = 8388.0;
                one.color = "玫瑰金";
                System.out.println(one);
                return one;
            }
        }

四、局部变量和成员变量的区别
1.定义位置区别:
成员变量:定义在类中方法外
局部变量:定义在方法内部或者方法的声明上

2.作用域不同:
    成员变量:可以被类中的任意方法内访问到
    局部变量:只能在当前的方法中去访问

3.初始化值不同
    成员变量:有初始化值
    局部变量:没有初始化值

4.在内存中的位置不同:
    成员变量:在堆内存中
    局部变量:在栈内存中

5.声明周期不同:
    成员变量:随着对象的创建而创建,随着对象的消失而消失
    局部变量:随着方法的调用而创建,随着方法的消失而消失

五、封装
1.什么是封装
封装指的就是将细节信息进行隐藏,不对外公开。
例如:
方法的定义,方法中如何实现的功能,作为调用者不需要关心
定义一个类,也是属于一种封装
private关键字,也是属于封装的一种
2.private 关键字
如果一个类当中的成员不想被外界直接访问到,那么就可以使用private关键字进行修饰
如果一个成员被private所修饰了,那么外界就无法直接访问了,如果还想通过外界对其进行访问,
那么就需要提供对应的get和set方法

3.this 关键字
    作用:
        用于区分局部变量和成员变量重名
        代表的是当前对象的引用,谁来调用我,我就代表谁

六、构造方法
1.构造方法的定义格式:
public 方法名(){

    }
    注意事项:
        A:构造方法的名字要和类名保持一致
        B:构造方法没有返回值类型,连void都不能写
        C:如果没有写任何构造方法,系统会默认提供一个无参数的构造方法
        D:如果我们自己写了一个构造方法,那么系统就不再提供默认的无参构造方法了

七、完整的定义类和使用类

    //狗类
    public class Dog {
        //成员变量
        private String name;        // 名字
        private int age;            // 年龄
        private String color;       // 颜色

        public Dog() {
        }

        public Dog(String name, int age, String color) {
            this.name = name;
            this.age = age;
            this.color = color;
        }

        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 String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }
    }

    //测试类
    public class Test01 {
        public static void main(String[] args) {
            //通过空参构造创建对象
            Dog d1 = new Dog();
            d1.setName("哈士奇");
            d1.setAge(3);
            d1.setColor("黑白");
            System.out.println(d1.getName());
            System.out.println(d1.getAge());
            System.out.println(d1.getColor());

            System.out.println("==================");

            //通过有参构造创建对象
            Dog d2 = new Dog("金毛",4,"黄色");
            System.out.println(d2.getName());
            System.out.println(d2.getAge());
            System.out.println(d2.getColor());
        }
    }

猜你喜欢

转载自blog.csdn.net/jmj18756235518/article/details/81136944