java基础知识-类与对象

类与对象

众所周知,java是一个面向对象(object-oriented programming,oop)的语言,它与面向过程有着本质的不同,

1.面向对象和面向过程的区别?

面向过程是一种站在过程的角度思考问题的思想,它强调的是功能行为,功能的执行过程,即先干啥,后干啥。

面向过程的设计:最小的程序单元是函数,每个函数负责完成某一个功能,用以接受输入数据,函数对输入数据进行处理,然后输出结果数据。整个软件系统由一个个的函数组成,其中作为程序入口的函数称之为主函数,主函数依次调用其他函数,普通函数之间可以相互调用,从而实现整个系统功能。
在这里插入图片描述

  • 面向过程的缺陷

    面向过程的设计,是采用置顶而下的设计方式,在设计阶段就需要考虑每一个模块应该分解成哪些子模块,每个子模块有细分为更小的子模块,如此类推,直到将模块细化为一个个函数。

  • 问题:

    1)设计不够直观,与人类的习惯思维不一致;

    2)系统软件适应性差,可扩展性差,维护性低。

    面向过程最大的问题在于随着系统的膨胀,面向过程将无法应对,最终导致系统的崩溃。为了解决这一种软件危机,我们提出了面向对象的思想。

    面向过程最大的问题在于随着系统的膨胀,面向过程将无法应对,最终导致系统的崩溃,为了解决这一种软件危机,我们提出了面向对象思想。

面向对象是一种基于面向过程的新的编程思想,是一种站在对象的角度思考问题的思想,我们把多个功能放到不同对象里,强调的是具备某些功能的对象。

在这里插入图片描述

  • 面向对象是更加符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚
  • 注意:不要粗浅的认为面向对象一定就优于面向过程的设计

上面介绍了面向对象和面向过程的不同点,接下来,我们仔细介绍一下什么是对象,在介绍对象之前,我们先说说什么是类。

类是构造对象的模板或者蓝图,在类中,我们定义了一组相关属性和行为。通过该属性和行为来描述该对象。属性就是描述该事物的一些状态信息,行为就是该事物可以做什么。比如,我定义一个人的类,那么人就有身高,体重,年龄这些信息,同时人还有吃饭,睡觉这些行为。而对象就是一类事物的具体的体现,对象是类的实例,并且具备这个类的属性和行为。

类的定义的格式

public class 类名{
//成员变量
//成员方法
}

public  class  Person{
   //定义成员变量
   public String name;
   public int age;
   //定义成员方法
   public  void  eat(){
      System.out.println("吃饭");
   }
   public  void  sleep(){
       System.out.println("睡觉");
   }
}

在这里插入图片描述

接下来,在主函数里进行调用。

首先,我们需要通过类来创建一个对象,格式为:

类名 对象名 = new 类名();

然后通过“.”来访问成员变量和成员方法

在这里插入图片描述

在这里,因为我们给属性赋值了,所以输出会有结果,如果,不赋值直接打印,那么就是按我们之前讲的java基本数据类型的默认值,例如int的默认值为0,而对于像数组,类,接口这样的引用类型,默认值为null.

成员变量与局部变量

刚才,我们在Person类中定义了name和age属性,这些称之为成员变量,还有一种局部变量,存在于方法中,

在这里插入图片描述

它们之间也有很多的不同点,首先定义的位置不同,从上图可以看出,同时,根据定义的位置它们的作用的范围也不一样,很显然,成员变量在整个类中都能被使用,而局部变量只能在当前方法中被使用。它们在内存中的位置也不一样,成员变量存在于堆内存中,而局部变量存在于栈内存中。

构造器

我们在创建对象的时候会使用new关键字,那么new关键字到底有什么作用呢?

1.为即将创建的对象分配存储空间。

2.引起对象构造方法的调用。

3.为对象返回一个引用

构造方法是一个在创建对象使被自动调用的特殊方法,java的类都要求有一个构造方法,如果我们没有定义构造方法,那么java的编译器会默认给我们提供一个缺省的构造方法(不带任何参数);

基本格式

修饰符 类名(参数列表){

​ 方法体;

}

public  class  Person{
    //定义成员变量
    public String name;
    public int age;
    //定义成员方法
    public  void  eat(){
        System.out.println("吃饭");
    }
    public  void  sleep(){
        System.out.println("睡觉");
    }
    public Person() {
        System.out.println("默认构造方法被调用了");
    }
}

在这里我们加入一个默认的构造方法。

public class Demo01 {
    public static void main(String[] args) {
          Person p = new Person();
    }
}

在这里插入图片描述

在这里,我们只是创建了一个对象,根据打印结果,我们可以发现我们定义的构造方法被默认调用了,构造方法有一些特点

  1. 构造方法的名字和类名相同,且没有返回值
  2. 我们不能直接调用构造方法,必须通过new 关键字来自动调用,从而创建类的实例

我们也可以定义一个有参构造方法,可以给成员变量赋值

public  Person(String name, int age){
    this.name = name;
    this.age =age;
}

此时我们在main函数中加入以下代码

Person  p1 = new Person("李四",18);

这样,我们不仅创建了一个p1对象,同时给里面的属性赋值了,就不用通过对象名.属性的方式来赋值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值