Java语言——面向对象

面向对象:

        面向对象,从我们学习计算机语言开始的那一天就开始接触这个单词了,想必对其是陌生有熟悉。从开始学习C语言就有人一直在说C语言是一门面对过程的语言,但是仅仅只接触了C语言并不能深刻的理解什么是面对过程。不过从现在开始通过对比Java语言与C语言我们可以更加深刻的理解对象与过程的区别了。

        说到面对对象,其实并不是多么的高大上,说白了面对对象和面对过程不过是两种不同的编程风格而已。当然这两种不同风格也代表了不同的编程思想,编程思想无论好坏只是“术业有专攻”,对于不同的问题有自己的专长而已,下面我们对两种不同的风格进行深一度的分析:

        面向过程:那就先从面向过程开始吧,面向过程(procedure -Oriented Programming简称POP),我们从字面意思上其实就能看出来面向过程的语言更加注重于操作过程,而事实上面向过程的语言思想也更加倾向于一个“执行者”,其所注重的地方也更在于如何通过完成一个一个步骤来实现目标,以函数为单位来操作,像是大名鼎鼎的C语言就是典型的面向过程语言的代表,不过随着时代的发展,技术的进步面向过程的思想开始逐渐力不从心,其弊端在于面对解决复杂问题的时候,会花费很多步骤,这对于一个程序员来说,代码冗杂,后期维护难,功能扩展难都是让人挠头皮的大问题,于是便有了面向对象的编程思想。

        面向对象:面向对象(Object Oriented Programming,简称OOP),从上文我们可以直到面向对象诞生在我们难以攻克复杂问题的时代,因此其特长就是解决相对于面向过程而言更为复杂的问题。面向对象的思维方式更加偏向于一个“组织者”,通过将一个一个功能打包做成类的方式,以类的方式进行操作,只在需要的时候调用,这种思想在面对复杂问题的时候将会极大程度的减少冗杂的代码,以及问题的复杂程度。

        这两种思想的转变,我们举个例子说明:在制作一款游戏的过程中,我们需要考虑到:画面制作,音乐制作,编程实现,发行发售以及后期更新维护这一系列的问题。而画面制作音乐制作这类还可以细分,那么面向过程就是从底层开始一步一步完成画面制作然后完成音乐制作,一直到最后发售游戏。而面向对象就是只需要将自己需要实现的功能化作不同模块交给不同的“技术人员”,自己只等验收成品就好。

类和对象

        在面对对象学习的过程中,我们需要弄清楚类和对象的定义:

        类:类是一种抽象的概念上的定义,从一类群体中抽象出来的特征。

        对象:对象是存在某种类的特征的实体,是具体的存在的个体。

        类和对象的关系就像是人的个体与人类这个概念的关系一样,在没有人类这个概念之前人类看人类就像狗看狗,猫看猫一样,这东西跟我长得还挺像。在很多跟我长得像的东西中抽取特征用语言和定义描述出来才有了人类这一概念。人类这个概念就好比是类,而我作为个体则是符合这个类的对象。

        类的结构:变量(名词),方法(动词),构造方法,块,内部类

        一般而言,我们在创造类的时候首先要明白这一个类需要干什么,比如说我这一个类是人物类,那么我就需要抽象出一个类来描述人物的特征:        

public class Character {
    //类的声明形式:[访问权限修饰符 修饰符 名]{}

    //人物的类:称呼,攻击力,防御力,生命值,存活状态
    String name;
    double atk;
    double def;
    int hp;
    boolean save;
    //在定义成员变量的时候可以使用任意一种数据类型
    //若不对其进行初始化,则Java会使用默认的之对其进行初始化
    //成员变量的值可以作用在整个类体,就好比是这个类的全局变量
    //类成员的行为以及特征表述,我们都可以通过方法来表述
    void menu(){
        System.out.println("姓名:"+name+"血量:"+hp);
    }
}

        上面对类进行了说明,接下来我们用代码来阐述对象:

public class TestCharacter {
    public static void main(String[] args) {
        //对象的创建和使用
        Character character=new Character();
        /*
            创建对象和使用这一步其实说起来也挺复杂的:
            =左边的Character character 是使用Character类作为类型声明一个变量character
            就如同我们平常创建变量一样: int a = 0;
            左边是对于变量类的说明,只不过我们一直使用并未注意过这一点
            =右边也就是创建一个对象,这里new的语法是固定的,意思是调用左边声明类的构造方法来构造一个对象
         */
        Character Kochiya=new Character();
        //这一行代码是想说明:每个不同的对象拥有不同的存储空间,就像每个有趣的灵魂都存储在不同的身体里一样
        character.atk=50;
        //我们可以通过这种” . “这种方法来调用对象所属类下的属性和方法
    }
}

        总结一下:在思考的时候我们可以通过一个群体中个体的特征和习惯来抽象出“类”,但是编程的时候我们需要先创造出“类”,然后才能创造“对象”。 

构造方法

        构造方法是一种特殊的赋予初始化值的方法,就像平常写代码调用一个方法的时候,弹出来的提示中提示我们需要输入什么类型的值,这种就是构造方法所向我们展示出的东西。

        构造方法具体的写法放下面的代码里面:

    public Setting(){
        System.out.println("无参形式");
        String name="kami";
    }
    public Setting(int a){
        System.out.println("一个参数形式");
        atk=a;
        System.out.println(atk);
    }
    public Setting(int a,int b){
        System.out.println("两个参数形式");
        def=b;
        atk=a;
        System.out.println(atk+" "+def);
    }
/*
    构造方法的声明形式:
    public 类名(参数){}
    注意这里的类名必须要和当前所在类的类名一样,后面参数可以不知有一种,这个叫方法的重载,我们将在下面讲到
*/

方法的重载

        方法的重载就是我们在构造方法中不止定义了一种初始化的参数,如上面我所写到的多种参数形式。调用的时候系统也会根据不同的参数列表选择不同的方法,下面我们对参数不同稍作讲解:主要有三种不同:数量不同,类型不同,顺序不同:

public class MyMath {
    public MyMath(int x,int y){
        int max=x>y?x:y;
        System.out.println("最大的是:"+max);
    }
    public MyMath(int x,int y,int z){
        int max=(x>y?x:y)>z?(x>y?x:y):z;
        System.out.println("最大的是:"+max);
    }
    public MyMath(double x,double y){
        double max=((x-y)>0)?x:y;
        System.out.println("最大的是:"+max);
    }
    public MyMath(double x,double y,double z){
        double max=((((x-y)>0)?x:y)-z)>0?(((x-y)>0)?x:y):z;
        System.out.println("最大的是:"+max);
    }
}

 对象与引用

        这里我们需要深入了解一下引用类型的伙计了,简单来说除了八种基本数据类型,其他的数据类型全部都是引用数据类型。在这里引用数据类型最最最容易搞我们的地方在于它和基本数据类型传参以及赋值的操作。

int a=0;
String name="ErGou";

        一上面这两个为例,基本数据类型是我们直接将0赋予给a这个值,而String这个引用数据类型他看似跟a没什么区别,但实际上存储的时候,它会先指向name的首地址然后再进行赋值,这也就不得不说到我们的值传递和引用传递了,其实本质就在于上述两种不同的操作方法。当然这也并不难理解,这两种传递很想C语言中的传值和传址两兄弟:

        简单来说值传递并不会改变实际参数的值,但是引用传递会改变实际参数。

        值传递:值传递在传递的时候,只将自己的值传给形参,但是并不会将自己的地址传入形参,所以形参如何变化都无法影响到原来的实参。

        引用传递:引用传递在传递的时候是传递的自己的地址,所以形参在进行变化的时候是对其地址进行变化,所以引用传递会影响到实参的实际值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值