天天看点

JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法

JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法

好久没更了,毕业季的离别总令人伤感,我相信再见是为了我们更好的遇见。好了,来继续学习吧!

一、面向对象思想

  • 概述: 面向对象是基于面向过程的编程思想
  • 特点:
    • 更符合我们思想习惯的思想
    • 可以将复杂的事情简单化
    • 将我们从执行者变成了指挥者(角色发生了转换)
  • 说了上面的概念,有的人肯定没有明白和理解
  • 那么,我们就针对面向对象思想举几个例子吧。

1.买电脑:

面向过程:我要了解电脑–了解我自己的需求–找对应的参数信息–去中关村买电脑–讨价还价–买回电脑

面向对象:我知道我要买电脑 – 计算机老师去给我买 – 老师就买回来了

2.洗衣服:

面向过程:把衣服脱下–找一个盆–放点洗衣粉–加点水–把衣服扔进去–搓一搓–清洗衣服–拧干–晾起来

面向对象:把衣服脱下–打开全自动洗衣机–扔进去–一键即可–晾起来

  • 列举了上面两个例子,我们可以看出,运用面向对象的思想可以很方便的解决我们的问题,同时我们也可以把面向对象思想的使用规则做以总结,让我们更符合面向对象思想
    • A:首先分析有那些类
    • B:接着分析每个类应该有什么
    • C:最后分析类与类的关系

我们知道了面向对象的使用规则,就来做一道练习吧!

练习:把大象装进冰箱。

  • 分析:
    • 面向过程:
      • 动作有哪些呢?

        A:打开冰箱门

        B:装进大象

        C:关闭冰箱门

    • 代码体现:
class Demo {
                public static void main(String[] args) {
                    //调用方法
                    open();
                    in();
                    close();
                }

                public static void open() {
                    System.out.println("打开冰箱门");
                }

                public static void in() {
                    System.out.println("装进大象");
                }

                public static void close() {
                    System.out.println("关闭冰箱门");
                }
            }
           
运行结果:
JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法
  • 我们从面向对象的思想来分析,并实现代码:
    • A:有哪些类呢?
      • 大象、冰箱、Demo
    • B:每个类有哪些东西呢?
      • 大象:
        • 进去
      • 冰箱:
        • 开门、关门
      • Demo:
        • main方法
    • C:类与类直接的关系是什么呢?
      • Demo中使用大象和冰箱类的功能。

代码实现:

class DaXiang {
                public static void in() {
                    System.out.println("装进大象");
                }
            }

            class BingXiang {
                public static void open() {
                    System.out.println("打开冰箱门");
                }

                public static void close() {
                    System.out.println("关闭冰箱门");
                }
            }

            class Demo {
                public static void main(String[] args) {
                    //冰箱调用开门
                    BingXiang.open();
                    //大象调用进去
                    DaXiang.in();
                    //冰箱调用关门
                    BingXiang.close();
                }
            }
           
运行结果:
JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法
是不是发现运行结果都是一样的呀,但是对于运用面向对象思想实现的代码,在以后的开发中是很好维护的,所以我们要运用面向对象的思想去编程。
  • 面向对象开发
    • 就是不断的创建对象,使用对象,指挥对象做事情。
  • 面向对象设计
    • 其实就是在管理和维护对象之间的关系。
  • 面向对象特征
    • 封装(encapsulation)
    • 继承(inheritance)
    • 多态(polymorphism)

二、类与对象的关系

  • 类:是一组相关的属性和行为的集合
    • 属性——事物的基本描述,行为——事物的功能
    • Java语言中最基本的单位是类。所以,我们要用类来体现事物
  • 对象:是该类事物的具体体现
  • 举例:
    • 类 ——学生就是类
    • 对象 ——班长就是一个对象

三、成员变量和局部变量的区别

  • 在类中的位置不同
    • 成员变量——类中方法外
    • 局部变量——方法内或者方法声明上
  • 在内存中的位置不同
    • 成员变量——堆内存
    • 局部变量——栈内存
  • 生命周期不同
    • 成员变量——随着对象的存在而存在,随着对象的消失而消失
    • 局部变量——随着方法的调用而存在,随着方法的调用完毕而消失
  • 初始化值不同
    • 成员变量——有默认的初始化值
    • 局部变量——没有默认的初始化值,必须先定义,赋值,才能使用。

注意:成员变量和名称可以不可和局部变量一样呢?

答案当然是可以的,但是使用的时候要注意,先找小范围,再找大范围。

四、匿名对象

匿名对象:就是没有名字的对象。

是对象的一种简化表示形式

  • 匿名对象的两种使用情况
    • 对象调用方法仅仅一次的时候
    • 作为实际参数传递
      我们来举例说明:
//正常写法
    Student s = new Student();
    s.age=;
    //匿名写法
    new Student().age = ;

//我们可以看到,用匿名写法时不用起名字就可以直接修改age的值了。
           
// 输出学生的数量
System.out.println("一共有"+new Student().num + "个学生");

//这种方法就是作为实际参数传递
           

五、封装(Encapsulation)

封装属于面向对象的三大特征之一。我们来一起学习它。
  • 封装的概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
  • 好处:
    • 隐藏实现细节,提供公共的访问方式
    • 提高了代码的复用性
    • 提高安全性
  • 原则:
    • 将不需要对外提供的内容都隐藏起来
    • 把属性隐藏,提供公共方法对其访问
      我们来写一个Demo
public class StudentDemo {

    public static void main(String[] args) {

        Student s = new Student();
        s.age=;    //给成员变量赋值
        s.study();  //调用方法  
    }
}

class Student{

    String name;//姓名
    int age;    //年龄

    //定义学习的方法
    public void study(){
        System.out.println("学生爱学习");
    }
}
           
输出结果:学生爱学习

六、private

  • private 关键字(意思是私有的)
    • 是一个权限修饰符。
    • 可以修饰成员(成员变量和成员方法)
    • 被private修饰的成员只在本类中才能访问。
  • private最常见的应用:
    • 把成员变量用private修饰
    • 提供对应的getXxx()/setXxx()方法
    • 一个标准的案例的使用
我们一起写一个Demo来学习private关键字
JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法

在上面这个Demo中,我们可以发现,当我们用private修饰Student类中的成员变量时,在StudentDemo类中我们就不能调用它的成员变量age了。

上面我们也讲到了, 被private修饰的成员只在本类中才能访问。

那么我们要怎么去访问呢?这个时候java就给我们提供了一个方法,我们一起来看

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

        Student s = new Student();
//      s.age=5;        //给成员变量赋值
        s.setAge();    //给成员变量赋值
        s.study();      //调用方法          
    }
}

class Student{

    private String name;//姓名
    private int age;    //年龄

    //定义学习的方法
    public void study(){
        System.out.println("学生爱学习");
    }

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
           

七、this

this关键字:代表所在类的对象引用。简单的说,它就代表当前类的一个对象。
  • 注意:
    • 方法被哪个对象调用,在该方法内部的this就代表那个对象
  • 用法:
    • 解决局部变量隐藏成员变量
      如果你们细心点就会发现,在上面我们写的Demo中set方法中是有this的
public void setAge(int age) {
            this.age = age;
        }
           

八、构造方法

  • 作用概述:
    • 给对象的数据进行初始化
  • 格式:
    • 方法名与类名相同
    • 没有返回值类型,连void都没有
    • 没有具体的返回值
我们来写一个简单的Demo
class Student {
    private String name; //null
    private int age; //0

    public Student() {
        System.out.println("这是构造方法");
    }
}
class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
    }
}
           
输出结果:
JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法
只要我们创建了对象就是new了,就执行了构造方法
  • 注意:
    • 如果你不提供构造方法,系统会给出默认构造方法
    • 如果你提供了构造方法,系统将不再提供
    • 构造方法也是可以重载的
我们来完成一个重载的Demo
public class StudentDemo {

    public static void main(String[] args) {

        Student s1 = new Student();
        Student s2 = new Student("阿杜");
        Student s3 = new Student("阿杜",);
    }
}

class Student{
    private int age;    //年龄

    public Student(){
        System.out.println("这是构造");
    }
    public Student(String name){
        System.out.println(name);
    }
    public Student(String name,int age){
        System.out.println("这是构造"+age);
    }   
}
           
输出结果:
JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法
好了,面向对象这一张的内容很多,但是很重要,所以我们一定要学会他,博客会陆续更新的,谢谢

继续阅读