java -- 面向对象一

一.面向对象和面向过程

什么是面向过程?在生活中我们如果要做一件事情,事情都是一步一步的去完成,这样的一个思维模式就是一个面向过程的思想。

而什么是面向对象呢?就是我们做一件事情,我们不自己做,我们找一个人帮我们做,最后我们只要等待这个人完成,这就是面向对象的思想。

举一个简单的例子:

/*
假如我要买一部手机,我的工作流程是这样的:
    一.面向过程的思想是这样的:
        1.首先我们得先确定我们要买哪个牌子的手机
        2.确定买哪个手机后,我们可能是要选择去网上买还是去实体店买
        3.当我们确定在去实体店买后,我们可能会去多几家店,比比价格
        4.最后,我们才会买到我们的手机
        5.手机买到手
        
        
    二.面向对象的思想是这样的:
        1.我们就只要确定我们买哪个牌子的手机
        2.我们找个人帮我去买手机(中间什么东西我们都不管,都由这个人完成)
        3.最后我们拿到我们需要买的手机
        ps:这个人就是我们指的对象
*/

二.面向对象编程

1.对象

在上述的例子中,我们找了一个人专门帮我们买手机,我们就可以把这个人称为一个对象

这类事物,实实在在存在的个体,也叫类的实例。对象与类的关系可以理解为:对象 is a 类,

例如:dog is an animal,我们就说dog是animal的一个实例。对象使用 new 关键字创建。

2.类

帮我们买手机的人肯定是从事代购行业的人,整个从事代购行业的人的整体,我们称之为一个类

简单概括:现实世界的抽象,或者说是对现实生活中事物的一种描述(属性和方法)

3.类与对象的关系

/*
类:是一组相关的属性和行为的集合
对象:是该类事物的具体体现
举例:
    类    学生
    对象    班长就是一个对象
*/

 

示例代码:以下是定义了一个类

package com.it_01;

public class Phone {
    //定义属性变量
    String brand;

    //定义价格
    int price;

    //定义颜色

    String color;

    //定义方法
    public static void call(String body){
        System.out.println("和"+body+"打电话");
    }

    public static void sendMessage(String body){
        System.out.println("和"+body+"发信息");
    }

}

定义好上述的类后,我们就可以使用上述的类了:

package com.it_01;

public class PhoneDemo {
    public static void main(String[] args){
        //新建一个对象
        Phone ph = new Phone();

        System.out.println("ph:"+ph);

        //输出对应的成员的变量
        System.out.println(ph.brand);
        System.out.println(ph.price);
        System.out.println(ph.color);

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

        //改变变量的值
        ph.brand = "iphone";
        ph.price = 66666;
        ph.color = "black";

        //再次打印成员变量的值
        System.out.println(ph.brand);
        System.out.println(ph.price);
        System.out.println(ph.color);

        System.out.println("--------------");
        //调用方法
        ph.call("小明");

        ph.sendMessage("小红");


    }


}

4.成员变量和局部变量

成员变量和局部变量的关系如下所示:

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

示例代码如下:

package com.it_04;
/*
 * 成员变量和局部变量的区别:
 *         A:在类中的位置不同
 *             成员变量:类中,方法外
 *             局部变量:方法中或者方法声明上(形式参数)
 *         B:在内存中的位置不同
 *             成员变量:堆内存
 *             局部变量:栈内存
 *         C:生命周期不同
 *             成员变量:随着对象的创建而存在,随着对象的消失而消失
 *             局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
 *         D:初始化值的问题
 *             成员变量:有默认值
 *             局部变量:没有默认值。必须先定义,赋值,最后使用
 */
public class Variable {
    int x; //成员变量
    
    public void show() {
        int y = 0; //局部变量
        
        System.out.println(x);
        System.out.println(y);
    }
}

三.面向对象的基本使用方法

1.private关键字

当我们通过对象直接访问成员变量的时候,会存在数据的不安全,可能会出现恶意篡改数据的情况,这样就可能会出现一些非法是数据值的情况

这个时候,我们就要想办法,不能让对象直接访问成员变量,这个时候,我们就需要用到了private关键字了

  为了不让其示例对象直接通过 对象.属性名 来使用和修改,而是通过set属性名,get属性名,更安全,这样属性就不会随意的被赋值上任何非法的值了,可以在set属性名的方法中进行控制。

例如:

/*
人都是大于0岁的,一般也没有超过两百岁的人
如果我们这里不这样控制的话,而是采用直接让对象通过属性进行修改的话,
这里的年龄可能就会出现小于0岁的,大于1000岁的情况,因此我们这里需要限制条件,对象只能通过方法来设置年龄,
这样我们就可与在设置方法中加入条件进行控制,就不会出现非法数据的情况了
*/

示例代码如下:

1.定义一个学生类

package com.it_03;
/*
 * 学生类
 * private:
 *         是一个修饰符
 *         可以修饰成员变量,也可以修饰成员方法
 *         被private修饰的成员只能在本类中被访问
 *
 * 针对private修饰的成员变量,我们会相应的提供getXxx()和setXxx()用于获取和设置成员变量的值,方法用public修饰
 */
public class Student {
    String name;
    //int age;
    private int age;

    public void setAge(int a) {
        // 这里提供的设置控制年龄的条件,人都是大于0岁的,一般也没有超过两百岁的人
        if(a<0 || a>200) {
            System.out.println("你给的年龄有误");
        }else {
            age = a;
        }
    }

    public int getAge() {
        return age;
    }

    public void show() {
        System.out.println("姓名是:"+name+",年龄是:"+age);
    }
}

2.使用学生测试类来测试:

package com.it_03;
/*
 * 学生类的测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建学生对象
        Student s = new Student();
        s.show();

        s.name = "漩涡鸣人";
        //s.age = 28; 错误:不能通过对象直接修改成员属性
        //s.age = -28; 错误:不能通过对象直接修改成员属性
        //s.setAge(-28);  //设置不成功,条件不能通过
//        s.setAge(28);
        s.show();
        System.out.println("------------------");
    }
}

 

 

 

 

 

 

  

posted @ 2018-09-07 18:14  明-少  阅读(106)  评论(0)    收藏  举报