Java基础知识学习之面向对象一

来源:互联网 发布:苹果mac怎么更新不了 编辑:程序博客网 时间:2024/06/08 15:48

类的学习

1.什么是面向过程?什么是面向对象?
面向过程专注于程序实现的细节,而面向对象专注的是能够执行行为的主体。
面向对象基于面向过程。人们在编程中发现,某些功能可以组合为一系列集合,
而我们想要使用某种功能时,直接可以访问具有该功能的集合,并且下次还可以使用
这种特性,便被称为面向对象。
1.1什么是对象?
以自然语言举例,小明坐在课桌旁,复习数学知识。–这句话里,小明,桌子都是客观存在的实体
每个实体都有属于该实体的属性和功能,不同的属性决定了实体之间的不同;小明具有姓名,性别,衣着
等属性,课桌具有材质,大小等属性,桌子还有供人学习的功能。
数学知识实际上也是实体,是现实生活中数学文本上内容的抽象集合。
但我们只要了解到,小明,课桌在java语言中就是对象(实体),任何对象(实体)都在堆内存中占有一定的空间。
1.2什么是类?
类就是对象的概念抽取。
小明是一个对象,小红也是一个对象,小芳也是一个对象,描述他们的属性也都是姓名,性别,衣着,年龄,
班级,学号等共同具有的东西。于是我们把小明,小红,小芳归纳为一个叫”学生“的类别当中。学生便叫做类。
同理,”桌“就是课桌的类,桌也有某个饭桌可以作为对象。
1.3
综上,类是概念,对象是概念实体化。
面向对象符合我们自然语言分析问题的方式。举例:我们要将河里的水收集起来,
面向过程一般是:跑到河边–>蹲下来–>发现无法捞起水–>回到家里–>制作一个能储存水的容器–>
跑到河边–>蹲下来–>拿出容器–>平放容器–>容器浸入水中–>容器正放–>容器上抬–>站立–>返回

正常人看到这个一定会说”Are you kidding me?“,但是对于计算机,它不会跟你用自然语言交流,它只能识别一系列
逻辑指令,而人们要操作计算机,则必须从头开始设计一系列指令。这非常麻烦,而且不符合人们的思维习惯。
而面向对象的方法是:使用一个桶,到河边舀水,回家。
桶这个对象,具有储存水的功能,它将”>拿出容器–>平放容器–>容器浸入水中–>容器正放–>容器上抬”封装
为”舀水“这一动作。因此,我们一说舀水,人们就自然而然地执行了这个动作,而不在意具体的细节如何。
这样就大大地提高了交流的效率。

当然计算机不会一开始就能识别什么叫舀水,所以人们在编写舀水这个功能的时候,具体的动作仍然要设计好,但只要设计好
,下次人们再调用时,就可以一劳永逸地直接使用该功能了。所以面向对象基于面向过程,但面向对象适用于开发大型
复杂程序。
1.4如何提取出对象以及其所属的类?
人开门–》这个主谓宾句子,人和门都是类,那这个开的动作该归哪个对象呢?
有一种思路,与开发生直接关系的是门,于是开这个功能放到门这个类中,而人这个类有开的动作,可以这样设计:
class 人{开门(某个具体的门)}或者class 门{开()},都可以

2.如何建立类和对象?
2.1建立类
类一定要有事物的属性以及行为的抽象集合。
比如建立一个Car类型:
class Car
{
int numOfwheel;//轮胎数
String color;//车颜色
void run()//车运行这个功能
{
…..
}
}
2.2声明该类的对象:
Car Toyota=new Car();//类实际上就是ADT(抽象数据类型),Toyota是该类型的变量,
JAVA特殊的地方在于,除了8个基本数据类型的变量是存在于栈的实体之外
,其余任何数据类型的变量本质都是指针,指向存在于堆内存的实体,因此,Toyota必须
指向一个实体,该实体用new创建了Car()实体。
2.3如何使用对象:
Toyota.numOfwheel=4;
Toyota.color=”red”;
Toyota.run();
这样使用
2.4提高安全性,使用私有变量private
Toyota.num显然是必须要大于0的,因为车轮不可能为0,但Toyota.num=-1这个指令却可以执行
因此我们引入private关键字

lass Car//封装了一个Car类,里面的方法就是接口{    private int numOfwheel;//轮胎数    private String color;//车颜色    void run()//车运行这个功能    {        .....    }    public int setNumofwheel(int num)    {    if(num<1)        ...    return  num;    }    public int setColor(String color)    {    ...    return color;    }}

这样把numOfwheel与color变成私有Car类的私有变量,只有Car中括号内可以使用,而外界接触不了
要想使用,必须通过Toyota.setNumofwheel(4)这样的接口方法来改变。如果不符合要求比如输入-1,
系统就会报错并终止程序。

其它综合问题:

1.局部变量VS成员变量
定义在方法中的变量都是局部变量,方法中的for()中定义的变量也是局部变量
局部变量存在栈内存,随方法的加载而出现,结束便从内存释放返回(return);
成员变量是只要在类级别中括号里的都是成员变量,存在堆内存中,随对象建立,对象被当作
垃圾回收便消失

2.匿名对象
如果只调用一次,那就使用匿名对象;比如show(new Demo());
3.分析以下程序:

    class Demo//新建了一个类    {        int x=6;//成员变量        public static void main(String[] args)        {            Demo d=new Demo();//声明并新建一个类对象            d.x=8;            show(d);//一开始是6,但d.x=8是结果为8,而show()又改变了一次,最终结果是7            show(new Demo());结果是7            sop("x="+d.x);        }        public static void show(Demo d)        {            d=7;            System.out.println(d);        }    }
0 0