面向对象第一节

本文详细探讨了面向对象设计思想,包括类的定义与结构,如成员变量、构造方法和方法重载。重点讲解了Java中的类和对象,如何创建、使用以及它们之间的区别。此外,还介绍了变量分类和对象与引用的概念,以及this关键字的应用。
摘要由CSDN通过智能技术生成

一.面向对象和面向过程的设计思想

1.面向过程

利用面向过程(缩写POP)的思想来解决问题,首先需要分析出解决问题的步骤,然后把步骤一步一步实现.面向过程的设计思想关注于流程.

2.面向对象

面向对象(缩写OOP)是以分类的方式进行思考和解决问题.

使用面向对象的思想解决问题,需要**先对整体关系作出分类.**根据不同的类深入的分析问题.面向对象的思想更符合人类的认知习惯.

3.面向过程与面向对象关系

面向对象无法取代面向过程,他们是相辅相成的.在解决问题的时候,面向对象在宏观上把握事物之间的关系,但是当要考虑实现那些细节的时候,仍然采用面向过程的思想.

二.Java类

1.什么是类?

类就是一个模板,他是描述一类事物的属性和行为的集合.

类是一个抽象的概念,他表示客观某类群体的一些基本特征.

比如生活中我们常说的车就是一个类.什么是车?能代步的,机械构造的就可以叫他车,不管是三轮四轮,都可以叫他车.这是一个大类.在这个类中我们可以细分,四轮轿车,四轮SUV…

2.类的结构

成员变量:事物属性的描述.

方法:事物的行为,也就是可以做的事情.

构造方法:初始化对象.

内部类:就是在类中声明的类.

块:一段没有名称的代码块.

最终在使用的时候,根据类实例化具体的对象.

3.类的定义

1.发现类

类的声明格式为:

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

访问修饰符有两种:public,无(默认).

修饰符:final,abstract.

关键字class用来定义一个类.

2.发现类的共有属性

声明成员变量的格式为

[访问权限修饰符][修饰符] type 变量名 = value;
例如:
public class Car{
    String name;
    float price;
    [访问权限修饰符][修饰符] void start(){
        System.out.println("汽车启动");
        [return 返回值;]
    }
}

注意:

成员变量是声明在类中,方法体之外的变量.

成员变量可以使用Java中的任意数据类型.

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

成员变量在创建对象的时候会从类中复制一份到对象中.

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

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

三.Java对象

1.什么是对象

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

比如上面我们提到的四轮汽车,那么我们说的奔驰E300L就是四轮汽车这个类的一个对象.这个对象具有类中定义的功能,可以被使用.

2.对象的创建和使用

在创建对象前必须先有类,比如我们说的汽车,先给他创建一个类.才能创建出具体的对象.

Car bmwx7 = new Car();//以Car为模板,在内存中创建出一个具体的对象.

“=”:将右边创建的对象地址赋给左边的变量.

Car bmwx7:使用Car为类型声明一个变量bmwx7.可以使用这个访问对象中的成员变量和成员方法.

同一类的每个对象有不同的成员变量存储空间.

同一类的每个对象共享该类的方法.

实际生活中是先有对象才有类.编程时候是先设计类才有对象.

四.类和对象的总结

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

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

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

五.变量分类

之前在基础语法里,提到过按照数据类型可以分为基本数据类型和引用数据类型.

在这块我们可以按照变量位置分为成员变量,局部变量.

1.成员变量

成员变量的位置以及具体的注意事项在上文Java类的第三节中已经提到过.

成员变量的存活周期是开始于对象的创建,结束于对象的销毁.

2.局部变量

局部变量是在方法,构造方法,或者语句块中定义的变量.

局部变量可以使用Java变量中的任一数据类型.但是不同的是,局部变量在使用前必须进行初始化.

局部变量的存活周期是开始于方法的调用入栈,结束于方法出栈.

六.方法分类

1.成员方法

成员方法是定义在类中的方法,主要是完成某种行为和功能.

语法格式:
[访问权限修饰符][修饰符] 返回值类型 方法名(参数列表){
    方法体;
    [return 返回值;]
}

2.构造方法

作用:构造方法是用来初始化对象的方法.

特点;构造方法名与类名相同,且没有返回值,不需要用void来修饰.

在创建一个对象的时候,至少要调用一个构造方法,每个类都有构造方法,**如果没有显示的为类定义构造方法,Java将会为该类提供一个默认的构造方法.**但是只要在一个Java类中定义了一个构造方法后,默认的构造方法将失效.

七.方法重载

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

参数不同可以有三方面的不同:

1.数量不同

2.顺序不同

3.类型不同

例如:构造方法的重载

public class Car{
    public Car(){
        //无参数的构造方法
    }
    public Car(String name){
        //有参数的构造方法
    }
}

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

例如:

Car car1 = new Car();//调用无参数的构造方法
Car car2 = new Car("奥迪");//调用有参数的构造方法

注意:**方法重载跟方法的返回值类型没有任何关系.**两个方法的返回值类型不同,但是参数的数量,类型,顺序都相同. 即使系统不报错,也不能说是方法重载.

八.对象与引用

1.对象引用

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

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

例如:

Car bm = new Car();

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

1.右边的"new Car()",是以Car类为模板,在堆空间里创建一个Car类对象.(对象没有名字,也就没有办法直接访问它,需要通过对象引用来间接访问对象.)

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

3."="操作符使对象引用指向刚创建的那个Car对象.

我们可以把这条语句拆分为两部分:

Car bm;

bm = new Car();

这样就比较容易理解,有两个实体,一个是对象引用变量,一个是对象本身.

对象就像一个气球,引用变量就像一根绳,可以用来系气球.

Car car1;//创建一个绳子car1,但是并没有系气球
Car car2;//创建一个绳子car2,也没有系气球
Car1 = new Car();//给car1系上气球
car2 = car1;//这里发生了复制行为,但是对象本身并没有被复制,被复制的只是对象引用
//最后的结果是,car2也指向car1所指向的对象,两根绳系的是同一个气球.

2.值传递与引用传递

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

1.值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,他们两个有着不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值.

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

        int a = 10;
        new Class().test(a);
        System.out.println(a);
    }
        public void test(int b){
            b = 20;
            System.out.println(b);
        }
}

输出结果是

20 10

2.引用传递:(形式参数类型是引用数据类型):也称为传地址.方法调用时,形式参数会复制实际参数的地址,使得形式参数和实际参数指向同一个对象.在方法执行下,对形式参数进行的操作实际上就是对对象的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变会影响实际参数.

基本类型传递的是该数据值本身.引用类型传递的是对象引用,而不是对象本身.

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

        Car car1 = new Car();
        car1.price = 10000;
        new Class().test(car1);
        System.out.println(car1.price);
    }
        public void test(Car car2){
           car.price = 20000;
        }
}

输出结果是

20000

九.this关键字

this关键字代表当前对象.

可以使用this关键字引用成员变量.也可以引用成员方法.

在一个类的方法或者构造方法内部,可以使用"this.成员变量名 "这样的格式来引用成员变量名.常常用来区分重名的成员变量和局部变量.

public class Car{
    double price;
    public Car(double price){
        this.price = price;//右边的price就是形参,左边的就是Car类中的成员变量
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值