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

类的学习

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值