java中的面向对象思想与数据的封装

1.对象

 对象的概念:

        所有具象化的个体都是对象,也就是常说的万物皆对象,我们可以将一个宇宙,一个星球,一个国家,一个人,一辆车,一只猫,一直蚂蚁,一个细胞都看做一个对象。而对象存在属性与方法,对于一个人来说,一个手是你的属性,而你可以通过这个手做什么事,就是你的方法。简而言之,属性就是你的年龄,面貌,姓名这些值,而你的方法就是指你可以做到的行为(比如编程)。

对象对的特点:

  • 对象具有属性和行为。
  • 对象具有变化的状态。
  • 对象具有唯一性。
  • 对象都是某个类别的实例。
  • 一切皆为对象,真实世界中的所有事物都可以视为对象。

2.面向对象(Object-Oriented Programming 简称OOP)

Java是一门完全面向对象的语言
面向对象思想,是一种编程思维,也是一种思考问题的方式.

如何建立面向对象的思维呢?
1、先整体,再局部
2、先抽象,再具体
3、能做什么,再怎么做

面向对象的三大特征: 封装,  继承.  多态

面向对象与面向过程的思想对比::
     面向过程-洗衣服:
        1.拿个盆
        2.倒点水
        3.倒店洗衣粉
        4.泡一泡
        5.搓一搓
        6.洗一洗
        7.晾干
    面向对象-洗衣服
        1.找个女朋友
        2.把衣服给他
结论:
    面向过程: 强调的是"过程".完成任何工作,都要一步一步的自己完成.
    面向对象: 强调的是"对象".完成工作时,首先,要找个对象,然后,把工作交给对象,让对象帮我们干活.

3.类与对象

类的概念:

        类就是"类别". 他是一系列事物的统称,是一个抽象性的概念.对象: 是实际存在的个体.
对于java来讲,类是对一种具备同样特点(即同样属性与方法)的集合体,类不是一个具体的对象,只是一描述。对象则是类的具象化(实例化),具备类的属性与方法。比如说人类是一个类,指定的一个人就是对象。猫是一个类,确定的一只猫则是一个对象。而对象具备这个类所有方法与属性。

        类就像是一张设计图, 而对象则是根据这个设计图所创建出的一个体. 对象时基于类的.

       类是对象的描述

        对象时类的个体

3.1类的语法格式

public class 类名{
    //属性(成员变量)
    //1.成员变量就是一个"放在类中方法之外"的变量.
    //2.描述该类时使用的名词,就是该类的属性
    
    //方法(成员方法)
    //1.成员方法就是一个"没有static关键字"的方法
    //2.描述该类时使用的动词,就是该类的方法
}

3.2对象的创建与操作

 // 创建对象
                        类名 对象名 = new 类名();
// 使用成员变量
                        对象名.成员变量(仅在成员变量没有封装的情况下这样使用)
// 使用成员方法
                        对象名.成员方法();

3.3类中的成员变量与局部变量

 4大区别:

书写位置:
                    成员变量: 类中方法外
                    局部变量: 方法内部.
存储位置:
                    成员变量: 存储在堆中,和对象在一块.
                    局部变量: 存储在栈中,和方法在一块.
生命周期:
                    成员变量: 随着对象的创建而出现,随着对象的消失而消失.
                    局部变量: 随着方法的调用而出现,随着方法的结束而消失.
初始化值:
                    成员变量: 有默认初始化值.
                    局部变量: 没有默认初始化值.

4.private关键字

概念:

        是一个权限修饰符, 代表的是私有的, 可以对成员变量进行封装

作用:
    可以修饰成员变量,也可以修饰成员方法.
    被private的修饰的成员, 只能在类的内部访问. 不可以在别的类中访问
注意:
    如果对成员变量进行了private私有化,则必须给成员变量提供两个方法.一个用来获取值(get变量名()),一个用来设置值(set变量名())

        set方法:

        public void set(数据类型  形参变量名){

              成员变量 = 形参变量名;

        }

        get方法:

         public 返回值数据类型 get(){

                renturn 成员变量;

}

5.this关键字

特点:
    this关键字,只能书写在方法的内部.
    this代表的是"调用方法的那个对象".
作用:
    当成员变量和局部变量重名的时候,使用"this.成员变量"来找到成员变量.

6.封装

概念:

        指的是把"代码/逻辑"封起来,加以限制,不让别人随便调用,这种行为就称之为"封装".
优点:

        提高代码的复用性.

        提高代码的安全性.
应用:

        常见的"方法"就是对成员变量进行封装.

        成员变量的封装,就是让成员变量私有化,然后提供get,set方法.

7.构造方法(构造器)

概念:

        是写在类中的一种特殊的“成员方法”,它是在类构造对象时要使用的方法,通过这一方法实现对对象的初始化。我们在创建对象时,等号右边new后边的内容便是该类的构造方法(如:new Person(12))。 但是像之前写的一些类,我们并未加入构造方法,这样的情况下,系统会自动添加无参构造方法(如:new Person()).

        简单来说构造方法就是将对象中的成员变量进行初始化,
      

格式:
    1.构造方法的名字必须和类名一模一样
    2.构造方法没有返回值类型,连void都没有
    3.构造方法不能有返回值.就是不能有"return 值;"
执行:
    1.构造方法是在创建对象的时候,就自动执行.
    2.构造方法不能手动调用.
作用:
    在创建对象的同时,给成员变量进行赋值(初始化).
注意:
    1.如果我们不书写任何构造方法,则系统会默认提供一个无参构造方法.
    2.如果我们书写了任何构造方法,则系统就不再提供无参构造方法了.
    3.以后在书写类的时候,永远都写上"无参构造方法"和"有参构造方法".

 7.1构造方法的"有参"和"无参"

无参数构造方法:

               就是不赋予成员变量参数,让成员变量的值为默认值

有参数构造方法:

                就是在创建对象时将成员变量进行赋值

8.javaBean(标准类)

 概念:

        javaBean就是专门用于封装数据的类,

书写要求:

        必须将所有成员变量进行私有化

        必须提供对应的getter和setter方法,

        必须然提供无参构造方法与有参构造方法

 9.面向对象的代码练习

        需求:

        创建一个类 用来描述"学生",  属性为姓名与年龄,功能是打印姓名与年龄

        根据这个类创建一个方法,实现学生的年龄是多少就打印多少行 生日快乐


/**
 * 定义一个学生类
 *      属性:
 *          姓名
 *          年龄
 *      功能:
 *          打印出这个学生的信息
 */
public class student {
    //定义成员变量,进行封装
    private String name;
    private int age;
    //为封装的成员变量,提供set方法与get方法
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }

    public void show(){
        System.out.println(name+"- -"+age);
    }
}
/**
 * 根据student类来创建一个对象
 * 使用成员变量实现根据年龄打印生日快乐的功能
 */
public class TestStudent {
    public static void main(String[] args) {
        //定义对象 s
        student s= new student();
        s.setName("金城武");
        s.setAge(22);
        int count = 0;
        for (int a = 0; a <s.getAge();a++){
            System.out.println("生日快乐");
            count++;
        }
        System.out.println(count);

    }
}


版权声明:本文为Karl_Thomas原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。