0
点赞
收藏
分享

微信扫一扫

Java基础总结(五)面向对象(类和对象)

兮城 2022-04-02 阅读 65

​        提到Java,大家都知道它是一门面向对象的语言,那么,什么叫面向对象呢,我们今天就来讨论一下。

​        这里举个简单的生活中的例子,假设我们要洗衣服,我们需要接水、浸泡、倒洗衣粉、揉搓、漂洗、最后晒干。这样一步一步来的工作方式我们称为面向过程,每件事都需要我们进行参与,而面向对象呢?那就简单了,我们只需要找能够完成洗衣服这件事的对象就可以了,比如我们可以找妈妈,让她给我们洗,当然了,我们也可以找全自动洗衣机,它也可以帮我们完成,我们只需要把衣服交给这些对象,然后他们会帮我们把衣服洗好,而我们不用去关心这个洗衣服的过程,这就是面向对象,需要注意的是,这些对象本身依然是面向过程的。

​        这样做有什么好处呢?显而易见,对于我们来说,这极大的方便了我们,我们从一个参与者变成了指挥者,就像洗衣服,我们不用去关心放多少水、浸泡多长时间、倒多少洗衣粉、搓洗的力度要多大等等,从代码层面来说,这使得我们可以放更多的心思在代码整体结构和逻辑上面,而不用去纠结各个功能的具体实现。

​        

​        提到Java中的对象,我们就不得不知道类和对象的关系,

类(class)

​        首先要知道,类是一个抽象的概念。它指具有相同特征和相同行为的事物的合集,比如人类,就指的是人这一类动物,之所以说它是一个抽象概念,就是因为我们无法知道人类说的具体是谁,我们都是人类,但这个人类并没有具体到我们中的哪一个。而对象指的就是类的具体实例化,比如张三这个人,他是人类,同时他也是一个具体体现,张三可以是个男生,但人类就不一定是男生了。

​    在Java中类是构造对象的模板和蓝图,基于类创建出来的对象,都含有本类中的基本特征,这一点也很好理解。

​    掌握了类的基本概念,下来我们要从代码方面了解Java中类的组成:

类的格式

​    类的基本格式是:

​            修饰符  class  类名{

​            成员属性;

​            成员方法;

​            }

一个完整的类由类名、修饰符、成员属性和成员方法组成,其中类名需要用驼峰式命名,而成员属性和成员方法都可以是空白,那么他就是一个没有属性也没有方法的类。

类中的成员 (属性)

​        在类中,我们可以定义任意种属性,如下:

public class Test{
    String name;
    int age;
    String sex;
    int id;
}

​        这里我们就给这个类定义了四个属性,需要注意的是,这些属性都属于成员变量,就算我们不给他们赋值,系统也会帮我们自动的初始化,初始化的值随着数据类型的不同而不同,详见下表:

数据类型系统自动初始化值
Stringnull  
int 0  
double0.0  
booleanfalse
char空格字符

​        需要知道的是,不仅String的自动初始化值为null,所有引用类型的初始化值都为null,只是说String类型是我们用的比较多的引用数据类型,所以我在这里只列举了String的情况。

​        类中的这些属性会具体体现在类的对象身上,称为成员变量,这些成员变量随着对象的创建而产生,随着对象的消失而消失,同时,每一个对象的属性都是各自的,比如对象1的name是张三,对象2的name可以是李四,二者互不影响。

类中的成员 (方法)

​        在类中,我们不但会定义成员变量,还会定义一些方法,定义方法的格式是:

​        修饰符  void  方法名(参数列表){

​                        方法体;

​                                                    }

​        方法被调用一次,方法中的方法体就会被执行一次,我们可以把重复使用的代码放进方法中,当我们需要使用时就调用它,这样我们就只用写一份代码,增强了我们代码的复用性和简便性,极大的减少了重复代码。

​        需要注意的是,方法之间是平级的关系,他不像之前说的循环结构和判断结构一样可以嵌套,方法是不可以嵌套的,不过一个在一个方法中可以调用另一个方法。比如:

public static void Test1(){
    Test2();
}

public static void Test2(){
    System.out.println("这是方法2");
}

​        这样使用方法1调用方法2是可以的,但是在方法1里面写方法2就不行。

​        我们也可以在方法中定义变量,在方法中的变量称为局部变量,随着方法的调用而产生,随着方法执行完毕而消失,并且这些变量只在该方法的范围内有用,方法外的程序访问不到,这里和循环中的局部变量是一个意思。需要注意的是,这些局部变量系统并不会帮我们进行初始化,我们在使用的时候要先手动进行初始化,否则就会报错。

类中的成员 (构造方法)

​        构造方法是类中比较特殊的一类方法,它主要用于创建对象时的初始化,在创建对象的时候会先运行构造方法,他的格式是:

​            类名 (参数列表){

​            方法体;

​            }

​        这里构造方法的名字必须和类名相同,同时可以有多个构造方法,不过他们的参数列表不能相同,否则就会报错。

可能你发现了,我在上面类的格式中并没有写构造方法,这是因为当我们不写构造方法时,系统会给我们自动生成一个无参的构造方法,并且是隐式的。只有当我们自己手写有参构造方法时,这个无参构造才会消失,这时如果我们还需要无参构造,那么我们就需要自己手动写一个无参构造。

类中的成员大概就是这些,我们下来介绍我们的对象

万物皆对象

        我们已经基本了解到,类是具有相同特征和行为的事物的合集,是一个抽象的概念,而对象就是类的实例化,类的每个对象都具有相同的属性,但是又各自具有各自的特征。一个类的对象可以拥有本类中的所有属性和方法,我们可以通过这个类的对象来调用这些方法。

        在使用方法前,我们需要知道怎样创建一个对象,在这里,我们需要用到关键字new

没有对象?new一个!

        创建对象的格式为:

        类名  对象名 =new 类名(参数列表);

        在这个格式中,只有对象名我们可以自己起,其他的都要严格按照格式来写,你创建的是哪个类的对象,你就哪个类名。

        当你正确的写出这样一条语句时,就说明你已经创建好了一个对象,接下来我们就可以使用这个对象来调用方法了,用代码举个例子:

public class Test{

  public static void main(String []args){

    Test t1 =new Test();    
    t1.show();

    } 

  public void show(){
    
    System.out.println("这是show方法");
    }

}

​        这里我用Test这个类创建了一个叫做t1的对象,我们可以看到,在Test这个类中,有一个show方法,那么我就可以使用这个t1对象来调用show方法,当然,我也可以new多个对象,这些所有的对象也都可以调用show方法。

        这里我们只是写了简单的方法帮助大家理解,在Java自带的核心类库中,很多的类和方法都是开发人员写好的,我们只需要搞清楚某些类中有些什么方法,有着哪些属性,能明白处理一个问题可以使用那些工具类,这就可以了。

        比如我们需要返回一个0~1之间的随机数,我们就只需要调用Math.Random()方法就行了,至于这个方法中是怎样的逻辑,怎样的写法,这不需要我们操心,这就是面向对象的java,是不是感觉突然简单起来了呢,当初我理解到这一层时,也以为我悟了,但越学越发现,Java能作为一个流行这么久的语言,其实并没有我想的那么简单,不过这些都是后话。

 对象的属性(成员变量)

既然我们已经知道怎么创建一个类的对象,那么我们就要更深刻的理解一下上文提到的成员变量,

1.成员变量会被自动初始化:

我们先将上面的代码优化一下:

public class Test{
    int id;
    String name;


  public static void main(String []args){

    Test t1 =new Test();   
    System.out.println(t1.id);
    System.out.println(t1.name);
    } 

  public void show(){
    
    System.out.println("这是show方法");
    }

}

我们在这里添加了两个属性:id和name,注意,我在这里并没有对这两个变量进行赋值,那么结合上文我们知道,系统会自动给成员变量初始化,那么当t1被创建时,t1中的id和name就已经被初始化好了,所以我们这里分别输出的是0和null。当然,我们在后面可以对他进行赋值或者更改,这都是可以的。

2.每个对象的成员变量都是属于自己的:

我们现在增加一个对象:

public class Test{
    int id;
    String name;


  public static void main(String []args){

    Test t1 =new Test();  
    t1.name="张三";
    t1.id=001; 
 
    Test t2 =new Test();
    
    System.out.println(t1.id);
    System.out.println(t1.name);

    System.out.println(t2.id);
    System.out.println(t2.name);
    } 

  public void show(){
    
    System.out.println("这是show方法");
    }

}

        我们又创建了一个t2对象,并且我们对t1进行了赋值,但对t2没有任何操作,这个时候我们分别输出他们的值,我们会发现,t1的name和id分别变成了张三和001,但t2的name和id依然是null和0。

        也就是说,这两个对象的属性都是属于他们自己的,一人一份,更改其中一个并不会影响其他的对象,所以我们对对象进行赋值时,一定要将每个对象都进行赋值操作。

总结

        到这里,我们已经基本了解了类和对象的关系,其实类就是对象的模板,通过这个模板可以创建出很多的对象,但他们各自的属性可能不同,就好比一个汽车类。我们在类中规定汽车需要有轮胎,有发动机等等,但是不同的车的轮胎可以是不一样的,发动机也可以是不一样的,但是他们都属于汽车这个类,想必这样说,大家就都可以理解了吧?

        面向对象本身就是一个抽象的概念,在后面我们还会接触到多态和抽象类,接口等等,都很抽象,如果你看了这篇文章还感觉到云里雾里,很正常,面向对象这里的知识,第一遍接触的同学要说一次就理解掌握,不说不可能,也是比较难的,不用着急,我们继续往后学习,等到整体的把面向对象学习一遍之后,回过头来就发现,我们现在的疑惑和不解就都解开了,加油吧同学们!我们一起努力,一起进步。

举报

相关推荐

0 条评论