章四、面向对象(1)—— 对象与引用

 零、新建一个工程


依次点 File -> New -> Project 

 创建一个 Java 工程

 

 这样就创建好了。

一、面向过程和面向对象


        对于面向过程和面向对象,都是程序设计的思路,其中还有指令式编程和函数式编程。在所有的编程范式中,我们最多的还是面向过程和面向对象两种。

● 面向过程的程序设计思想

面向过程的程序设计思想(Procedure Oriented Programming),简称 POP

        顾名思义,其关注的焦点在于 程序的运行过程 ,即操作数据的步骤。当某个过程代码重复出现时,可将这个过程抽取为一个函数。这样就可以大大简化冗余代码,便于维护。

        典型程序语言:C语言        代码结构:以函数为组织单位

这是一种“执行者思维”,适合解决简单问题。通过分析出解决问题所需要的步骤,然后把步骤一步一步实现。

● 面向对象的程序设计思想

面向对象的程序设计思想Object Oriented Programming),简称 OOP

        与面向过程不同的是,面向对象所关注的焦点是 ,通过参照现实中的食物,将事物的属性特征、行为特征抽象出来,在计算机程序设计过程中用 表示。

        典型的语言 :JAVA 、C# 、C++ 、Python 、 Ruby 和 PHP等

        代码结构:以为组织单位,每种事物都具备自己的 属性和行为 / 功能 

这是一种“设计者思维”,即只需要知道需要实现的功能,再引用实现功能的代码,适合解决复杂问题。代码扩展性强

        面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。 但是,具体到实现部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理。我们千万不要把面向过程和面向对象对立起来,他们是相辅相成的。面向对象离不开面向过程!

例:对于将大象装进冰箱的不同方法

面向过程:

1.打开冰箱

2.把大象装进冰箱
3.把冰箱门关住

面向对象:

人类{
        打开( 冰箱 ){
                冰箱.开门( ); 
        }
        操作( 大象 ){
                大象.进入( 冰箱 );
        }
        关闭( 冰箱 ){
                冰箱.关门( );
        }
}
冰箱类{
        开门( ){        };

        关门( ){        };
}
大象类{
        进入( 冰箱 ){        };
}

 

二、类和对象


 类(Class)和对象(Object)是面向对象的核心概念

        类 :具有相同特征的事物的抽象概念,是抽象的、概念上的定义。

        对象 :实际存在的该事物的每个个体,是的具体,因而也称为实例。

类 => 汽车图纸 ; 对象 => 实际存在的一辆汽车,拥有类中定义的功能,可以被使用

1、类

(1)类的结构

        • 变量:事物属性的描述(名词)

        • 方法: 事物的行为(可以做的事情 动词)

        • 构造方法:初始化对象

        • 块:一段没有名称的代码块( 在章四(2)中详讲)

        • 内部类: 即在类体中声明的类

(2)发现类

第一步:发现类

        根据不同类型的车,归纳车的特征,来抽象出“车类”这个概念;

类的声明格式为:

[访问权限修饰符] [修饰符] class Car{        }

        其中访问修饰符有两种  即 public 和 默认(无限制);

        修饰符有 final , abstract

        关键词Class用来定义一个类

第二步:构建类的共有属性(成员变量)

        成员变量 是定义在 类中 方法体之外 的变量。

        成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。

        在定义 成员变量 时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

        成员变量 可以被类中方法、 构造方法和特定类的语句块访问。

        成员变量的作用范围为整个类体。

 第三步:构建累的共有行为(成员方法)

 2、对象

 对象:对象是类的一个实例,是以类为模板在内存中创建的实际存在的实例。

对象的创建

Car byd = new Car();

 其中 Car byd 是使用 Car类 作为类型声明的一个变量 byd;

new Car ( ) 是使用 new 创建对象,然后调用Car类的构造方法初始化对象;

“ = ” 用于将右边创建的对象地址赋给左边的 byd 变量。

同一类的每个对象有不同存储空间,对象是类的一个实例,必然具备该类事物的属性和行为(即方法)。

对象的使用:

对象名.属性 或 对象名.方法 来访问对象成员(包括属性和方法)

3、总结类和对象

类是一类事物的抽象概念,是一个模型

对象是由这个模型所创造的,一个个具体存在的,实实在在存在的实例

所以创建对象的过程也叫实例化对象

 三、构造方法


构造方法名与类名相同且 没有返回值 ,且 不需要使用void 修饰

 作用:在构造方法中为创建的对象成员变量(属性)初始化赋值

特点: 每个类都有构造方法,如果 没有自行 地为类定义构造方法,Java将会为该类提供一个默认无参构造方法,但是只要在一个Java类中定义了一个有参构造方法后,默认的无参构造方法会失效。

//这个就是一个有参的
public Person(String a,int b,String c){
    name = a;
    age = b;
    gender = c;
}
//要想再使用无参的就要自己定义
public Person(){

}

四、方法的重构


方法的重载:指一个类中具有相同的名字,但参数不同的多个方法。

参数不同(三个方面的不同):

        1.数量不同

        2.类型不同

        3.顺序不同

调用时,会根据不同的参数表选择对应的方法。

注意:方法重载跟方法的返回值类型没有任何关系

五、对象与引用


重点是什么是引用类型

Java语言中除基本类型之外的变量类型都称为引用类型。

Java中的对象是通过引用对其操作的

例如:我们自定义一个Car类

class Car{

                String name;

                String color;

                float price;

}

Car bm = new Car();

通常把这条语句的动作称之为创建一个对象,其实,它包含了三个动作:

1)右边的new Car()”,是以Car类为模板,在堆空间里创建一个Car类对象。

2)左边的Car bm”创建了一个Car类型引用变量。所谓Car类的引用,就是以后可以用来指向Car对象的对象引用。

3“=”操作符使对象引用指向刚创建的那个Car对象。

我们可以把这句拆成两部分:

Car bm;

bm = new Car();

这样写,就比较清楚了,有两个实体:一个是对象引用变量,一个是对象本身

举一个实际的例子:

new Car();   这个语句在堆空间里创建了实体,尽管它们也是确确实实存在的实体,但是,我们看不见,也摸不着。

对象没有名字,也就没法直接访问它。我们需要通过对象引用来间接访问对象。

对象好比是一只很大的气球,但是我们抓不住它。引用变量是一根绳,可以用来系汽球。

Car car1;                   //创建一根绳子,一根还没有系上任何一个汽球的绳;

Car car2;                   //又做了一根绳,还没系上汽球,

car1 = new Car();      //car1 系上气球;

car2 = car1 ;           //这里,发生了复制行为。要说明的是,对象本身并没有被复制,被复制的只是对象引用。

结果是,car2也指向了car1所指向的对象。两根绳系的是同一只汽球。

值传递

Java中进行方法调用中传递参数时,参数传递有两种:

值传递: (形参数类型是基本数据类型):

        方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形参数类型是引用数据类型参数):

        也称为传地址。方法调用时,实际参数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身 。但是无论是值传递还是引用传递,其本质都是传值,所以也都统称值传递.

public class Test2 {

    public static void main(String[] args) {
        Dog dog = new Dog();
        //以Dog()类为模板创建一个 Dog类对象
        //Dog dog 创建类一个 Dog类型的引用变量,就是可以用来指向Dog对象的对象引用
        //" = " 操作符使对象引用指向创建的 Dog 变量
        dog.name = "旺财";
        Test2 test2 = new Test2();
        test2.test(dog);
        test2.test("小白");
        System.out.println("dog ="+dog.name);
    }
    //传递对象
    public void test(Dog d){
        d.name = "小黑";
        System.out.println("d = "+d.name);//小黑
    }
    //传递值
    public void test(String name){
        System.out.println("name = "+name);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三木几

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值