写点什么

Java 面向对象精讲【上】

作者:XiaoLin_Java
  • 2021 年 12 月 04 日
  • 本文字数:2962 字

    阅读完需:约 10 分钟

Java面向对象精讲【上】

简介

📢博客主页:https://www.infoq.cn/profile/F7BF297568FAA8/publish

📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论!

📢本文由 XiaoLin_Java 原创🙉

📢不要等待机会,而要创造机会。✨

一、面向过程和面向对象

1.1、面向过程

强调的是我该怎么去做。即功能的执行过程,即先干啥,后干啥。在面向过程中,我们会写很多的函数,每一个函数负责完成某一个功能。



而一个主函数里面有多个小函数,需要完成某个功能的时候依次调用即可



由此我们发现面向过程的设计思想存在以下几个缺陷:系统软件适应性差,可拓展性差,维护性低。

1.2、面向对象

一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来做


面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象


面向过程和面向对象的差别如下:



面向过程和面向对象各有千秋,面向对象更符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性,它拥有三大特征:


  1. 封装

  2. 继承

  3. 多态

二、变量

2.1、变量的分类

根据变量定义的位置的不同,我们大致可以把变量分为两大类:


  1. 成员变量:直接定义在类中,方法的外面,又称之为字段,不是属性

  2. 局部变量:除了成员变量外,其他变量都是局部变量,仅仅存在于方法内、代码块、方法的形式参数中

2.2、变量的初始值

变量的初始化表示在内存中开辟一个存储空间进行存储,只有初始化后才可以使用,不同的变量类型初始值不同


成员变量


默认是有初始值的,不同类型的初始值不同



局部变量


局部变量没有初始值,必须手动初始化才可以使用

2.3、变量的作用域

变量根据定义的位置不同,也决定了各自的作用域是不同的,关键是看变量所在的花括号的位置


成员变量


在所定义的类中都有效


局部变量


从开始定义的位置到花括号内有效,花括号外就无效了

2.4、变量的生命周期

变量的生命周期,通俗的来说就是变量在内存中可以存活多久


成员变量


成员变量是属于对象的,对象在堆内存中,所以成员变量也是存储在堆内存中的,随着对象的 1 消亡而消亡


局部变量


局部变量是存储在栈内存的,随着方法的调用的结束而消亡


局部变量是存储在方法中的,每次调用方法都会在栈空间开辟一个内存空间,我们成为栈帧,方法 1 调用结束,栈帧就被销毁了,内存中存储的变量数据也就销毁了

三、类

3.1、类的定义

类是拥有相同特性(状态)和行为(功能)的多个对象的抽象


  • 使用成员变量来表示状态

  • 使用成员方法来表示行为


格式


public class 类名{    //可编写0到N个成员变量   修饰符 数据类型 变量名1;   修饰符 数据类型 变量名2;        //可编写0到N个成员方法    修饰符 返回值类型 方法名称(参数){        //方法体    }}
复制代码


注意:


  1. 成员方法和变量都不可以用 static 修饰,修饰符不是必须的

  2. 在描述对象的类中,不需要定义 main 方法,main 方法在专门的测试类中编写,切测试类和描述对象的类是分开编写的

四、对象

4.1、对象的创建

类名 对象遍历名 = new 类名();
复制代码


如果我们直接打印对象的话,打印的是类似数组地址的 hashCode 值

4.2、匿名对象

创建对象之后没有赋值给某个遍历,只能使用一次


new 类名();
复制代码

4.3、给字段设置数据

对象变量名.字段名 = 值;
复制代码

4.4、获取字段的数据

数据类型 变量 = 对象变量.字段名;
复制代码

4.5、对象调用方法

对象变量名.方法(参数);
复制代码

4.6、对象实例化的内存分析

以下面简单地 Cat 类进行分析


public class Cat(){    String name;    int age;}
复制代码


创建对象


Cat cat = new Cat();
复制代码



此时如果通过查看对象的 name 和 age 属性可以发现分别为初始值 null 和 0


给对象赋值


cat.name="xiaolin";cat.age=18;
复制代码



对象调用方法


public class Cat(){    String name;    int age;    public void say(){        System.out.println("我们一起学猫叫");    }}
复制代码


五、构造器(构造方法)

5.1、构造器的定义

构造器,也称之为构造方法(Constructor),作用是用来创建对象和给对象做初始化操作,只能在创建对象的时候使用一次


构造器的语法


public 类名(参数){    //方法体}
//示范:public class Cat { public Cat() { } //省略其他代码}
复制代码


构造器的特点


  1. 构造器名称和类名相同

  2. 不能定义返回类型

  3. 构造器中不能出现 return 语句

5.2、默认构造器

我们在创建类的时候,没有手动写构造器,而没有报错,原因是因为如果我们在编写对象的时候,如果没有写构造器的话,编译器会在编译源文件的时候,自动创建一个默认构造器,默认构造器的特点:无参数、无方法体。


如果类使用了 public 修饰,那么他默认的构造器也会使用 public 修饰,反之亦然

5.3、构造器的使用

没有构造器之前


之前,我们是先通过一个默认参数构造器,先创建出一个对象再初始化(给字段设置值)


Cat cat = new Cat();c.name = "xialin";c.age = 18;
复制代码


有了构造器之后


有了构造器之后,可以直接通过构造器同时完成对象创建和初始化操作


public class Cat {  String name;  int age;
public Cat(String name, int age) { this,name = name; this.age = age; }
void say() { System.out.println("我是" + name + ",今年" + age + "岁"); }}
复制代码


Cat cat = new Cat("zs", 19);cat.say();
Cat cat = new Cat(); // 此行报错
复制代码


当自己定义出构造器之后,编译器不再创建默认的构造器了,所以就不再自动有无参构造器,我们一般在开发中无参构造器和有参构造器会同时编写,他们构成重载关系


public class Cat {  String name;  int age;    //无参数构造器  public Cat() {  }    //带参数构造器  public Cat(String name, int age) {    this,name = name;    this.age = age;  }    //其他代码}
复制代码

六、封装

封装是面向对象三大特征之一,其含义有两个(掌握思想):


  • 把对象的字段和方法存放在一个独立的模块中(类)

  • 信息隐藏,尽可能隐藏对象的数据和功能的实现细节


封装的好处:


  • 保证数据的安全性,防止调用者随意修改数据

  • 提高组件的重用性,把公用功能放到一个类中,谁需要该功能,直接调用即可


限制字段不能够随意修改的利器就是访问修饰符

6.1、访问修饰符

访问修饰符,决定了有没有权限访问某个资源,封装的本质就是要让有些类看不到另外一些类中定义的字段和方法。Java 提供了不同的访问权限修饰符来限定类中的成员让谁可以访问到



  • private:表示当前类是私有的,只能在本类中访问,离开本类之后就不能直接访问

  • 不写:表示当前包私有,定义和调用只能在同一个包中,才能访问

  • protected:表示子类访问权限,同一个包的可以访问,即使不同包但是有继承关系也是可以访问的

  • public:表示公共的,可以在当前项目的任何地方访问


一般在开发中都是提供私有属性,暴露公有的访问方法

6.2、JavaBean 规范

JavaBean 是一种某些符合条件的特殊类,但是必须遵循一定的规范:


  1. 类必须使用 public 修饰

  2. 必须保证有公共无参数构造器,即使手动提供了带参数的构造器,也得手动提供无参数构造器

  3. 段使用 private 修饰,每个字段提供一对 getter 和 setter 方法


public String getName(){    return   name;  //返回name字段存储的值}public void setName(String  n){    name = n;  //把传过来的参数n的值,存储到name字段中}
复制代码

6.3、构造器和 setter 方法

构造器和 setter 方法都可以给对象设置数据:


  • 构造器,在创建对象的时候设置初始数据,只能初始化一次。

  • setter 方法,创建对象后再设置初始数据,可以设置多次。


发布于: 35 分钟前阅读数: 5
用户头像

XiaoLin_Java

关注

问啥啥都会,干啥啥不行。 2021.11.08 加入

问啥啥都会,干啥啥不行。CSDN原力作者,掘金优秀创作者。

评论

发布
暂无评论
Java面向对象精讲【上】