Java学习经验与总结(06)——面向对象

一 面向对象的思想

1 面向对象思想概述

面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物使用对象的关系来描述事物之间的联系,这种思想就是面向对象。
提到面向对象,自然会想到面向过程,面向过程就是分析解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候一个一个依次调用就可以了。面向对象则是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。当然,一个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能,这样当应用程序功能发生变动时,只需要修改个别的对象就可以了,从而使代码更容易得到维护。

2 面向对象思想举例

(1)举例

做作业: 阅读作业题—分析作业题需要求什么—推导套用公式—算出结果----验证一下是否正确—将过程和结果写到作业上
如果我们用面向对象思想
借一份作业 ----一键复制粘贴

(2) 面向对象的特征

封装(encapsulation)
继承(inheritance)
多态(polymorphism)

(3)面向对象开发

就是不断的创建对象,使用对象,指挥对象做事情。

二 面向对象类与对象的概述

我们学习编程语言,就是为了模拟现实中的事物,我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现。
由此我们就得到了现实中的事物和类的对应关系
事物 类
属性 ----------------- 成员变量
行为 ----------------- 成员方法
定义类其实就是定义类的成员(成员变量和成员方法)
成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。

1 类和对象是什么

类是构造对象的模板或蓝图。我们可以将类想象成制作面包的切割机,将对象想象为面包。由类构造对象的过程称为创建类的实例。简单来说,类是一组相关属性和行为的集合,而对象就是该类事物的具体体现。比如定义一个聊天工具的类,微信就是一个对象。

2 如何由类构成对象

我们首先使用关键字class定义一个类
然后我们想使用类中的属性和功能,就需要创建一个实例,这个实例,就是该类的对象,我们一般通过一个关键字new来创建对象
创建完对象后我们就可以通过这个对象去调用类中的属性和功能
一个类中可以创建多个对象
实例演示如下

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
        Person p = new Person();
        String name = p.username;
        int nianling = p.age;
        char ch = p.sex;
        System.out.println(name);
        System.out.println(nianling);
        System.out.println(ch);
        p.eat();
        p.sleep();
        p.playGame();
    }
}


3 如何构造类的功能

首先我们先定义一个类
然后再类中定义成员属性/成员变量
然后再定义成员方法
实例演示如下

package org.westos.zz;

public class Person {
    String username = "王麻子";
    int age = 20;
    char sex = '男';
    public void eat()      { System.out.println("吃饭");   }
    public void sleep()    { System.out.println("睡觉");   }
    public void playGame() {
        System.out.println("玩游戏");
    }
}

4 创建对象的内存图演示

对象创建的内存图

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

  • 局部变量:定义在方法中或方法声明上(形参)的变量
    局部变量存在栈内存
    局部变量属于方法
    局部变量随着方法的调用而产生,随着方法的调用完毕而消失
    局部变量没有默认值,必须赋值才能使用

      成员变量:定义在类中方法外的变量
      成员变量存储在堆内存
      成员变量属于对象,随着对象的创建而产生,随着对象被回收而消失。
      成员变量有默认值
    

四 方法的形式参数是类名的时候如何调用

Java中参数传递的问题
形式参数
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响形式参数
如果你看到一个方法的像是参数是一个类类型,这里其实需要的是该类的对象
实例演示如下

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
        int num=18;
        String name="张三";
        Student student = new Student();
        System.out.println(student);
        test(num,name,student);
        System.out.println(student.name);
        System.out.println(student.age);
        student.show();
    }
    public static void test(int a, String b, Student student){
        System.out.println(student);
        student.name=b;
        student.age=a;
    }
}
class Student{
    String name="李四";
    int age=19;
    public void show(){
        System.out.println(name);
        System.out.println(age);
    }
}

五 匿名对象的概述和应用

1 什么是匿名对象

就是没有名字的对象

2 匿名对象应用场景

(1)调用方法,仅仅只调用一次的时候。
(2)匿名对象可以作为实际参数传递

3 实例演示

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
        Dog dog= new Dog();
        dog.show();
        dog.show();
        dog.show();
        new Dog().show();
        new Dog().show();
        new Dog().show();
        int age = dog.age;
        new Dog();
        new Dog().show();
        int age1 = new Dog().age;
        test(dog);
        test(new Dog());
    }
    public static void test(Dog dog){
        dog.show();
    }
}

class Dog{
    int age=100;
    public void show(){
        System.out.println("一只小狗");
    }
}

六 封装的概述

1 什么是封装

封装(有时称为数据隐藏)是与对象有关的一个重要概念。从形式上来看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域,操纵的过程称为方法。对于每个特定的类实例(对象)都有一组特定的实例域值。这些值的集合就是这个对象的当前状态。无论何时,只要向对象发送一个消息,它的状态就可能发生改变。

2 封装的好处

  1. 隐藏实现细节,提供公共的访问方式
  2. 提高了代码的复用性 
    
  3. 提高安全性。
    

3 封装的原则

将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。

七 private关键字

1 private关键字的特点

(1)private是一个权限修饰符
(2)可以修饰成员变量和成员方法
(3)被其修饰的成员只能在本类中访问

2 private最常见的应用

(1)把成员变量用private修饰
(2)提供对应的getXxx()和setXxx()方法

3 案例演示

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
            Student student = new Student();
            student.setName("张三");
            student.setAge(40);
            String name = student.getName();
            int age = student.getAge();
            System.out.println(name);
            System.out.println(age);


        }
    }
        class Student {
            private String name;
            private int age;

            public void setAge(int nianling) {
                if (nianling >= 0 && nianling <= 100) {
                    age = nianling;
                } else {
                    System.out.println("年龄不合理");
                }
            }

            public void setName(String mingzi) {
                name = mingzi;
            }

            public String getName() {
                return name;
            }

            public int getAge() {
                return age;
            }

        }

八 this关键字的概述和应用

1 为什么要有this

当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题

2 this关键字特点

是当前类的对象引用。
简单的记,它就代表当前类的一个对象。谁调用这个方法,那么该方法的内部的this就代表谁

3 this的应用场景

解决局部变量隐藏成员变量

4 案例演示

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
        Doctor doctor = new Doctor();
        System.out.println("调用者:"+doctor);
        doctor.setName("王医生");
        doctor.setAge(20);
        System.out.println(doctor.getName());
        System.out.println(doctor.getAge());
        Doctor doctor2 = new Doctor();
        System.out.println("调用者:" + doctor2);
        doctor2.setName("李医生");
        doctor2.setAge(25);
        System.out.println(doctor2.getName());
        System.out.println(doctor2.getAge());
    }
}
class Doctor {
    private String name;
    private int age;
    public void setName(String name){
        System.out.println("this代表的引用:"+this);
        this.name=name;
    }
    public void setAge(int age) {
        System.out.println("this代表的引用:" + this);
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
    public String getName(){
        return this.name;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章