Java基础——类和对象

类和对象

引入

面向过程

  • 以功能为基础,自顶向下、逐步细化。

  • 缺陷:

    • 代码重用性低
    • 代码可维护性差
    • 数据和操作分离,不能保证数据安全

面向对象

  • 将数据、操作分装成,以类的对象为程序的基本元素。通过向对象发送消息,调用方法完成功能。
  • 特点:
    • 数据安全
    • 基本元素为对象
    • 代码重用率高,维护量小
    • 程序= 对象 + 对象 + 对象

类和对象

类:现实世界中具有相同属性和行为的物理实体的抽象。
对象:现实世界具体的物理实体,每个对象有特定的属性和行为

关系

[类]是对[对象]的抽象。是创建对象的蓝图,描述了所创建对象共同的属性和行为。

  • 学生

    • 属性
      • 姓名
      • 年龄
      • 性别
      • 年纪
    • 行为
      • 学习
    • 属性
      • 名字
      • 颜色
      • 品种
    • 行为
      • 吃饭
      • 舔毛

[对象]是[类]的实例。

  • 小强

    • 属性
      • 姓名:小强
      • 年龄:13
      • 性别:男
      • 年纪:初一
    • 行为
      • 学习
  • 咪咪

    • 属性
      • 名字:咪咪
      • 颜色:橘色
      • 品种:土猫
    • 行为
      • 吃饭
      • 舔毛

Java实现

类:同种对象的集合和抽象,是具有共同行为和属性的对象的统一描述体。抽象的数据类型。

对象:现实世界某个具体物理实体在计算机逻辑中的映射、体现。


类:通常即包含成员属性和成员方法抽象数据类型

//类
//权限修饰符 class 类名{
//   权限修饰符 成员的声明和定义;
//}
class Cat{
      //属性
      int id;
      String name;
      int age;
      String type;
      Color color;
      //行为
      public void eat(){
            System.out.println("吃饭");
      }
      public void lick(){
            System.out.println("舔毛");
      }
}

对象:类型创建的实例

//1.类名 对象名 = new 类名(参数);
//2.类名 对象名;
//  对象名 = new 类名(参数);
class Demo{
      public static void main(String args[]){
            //对象
            Cat cat = new Cat();
            Cat cat2;
            cat = new Cat();
      }
}

注意:

  • class是声明类的而关键字。
  • 类名是标识符,开头首字符大写。
  • 类包含成员属性、成员方法;成员属性声明必须以;结束。
  • 定义一个类 = 定义一个类型和一个作用域。
  • 类只是抽象的数据类型,类对象才是具体可操作的实体。

类成员

类成员的访问

  • 对象名.属性名
  • 对象名.方法名(参数);
//实例化对象
Cat cat = new Cat();
//访问对象属性
System.out.printtln(cat.name);
//访问对象方法
cat.lick();

类成员的修饰

访问权限修饰符 类内 类外
解释 本类成员方法访问 被本类对象引用
public
private

为体现Java语言的三大特征的之一 封装,通过访问修饰符来实现信息隐藏

封装的实现:

  • 成员属性用private修饰
  • 成员方法用public修饰

成员属性默认值

成员属性类型 默认值
boolean false
char 'u0000'
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0
引用类型 null

成员方法

在面向对象语言中,方法是不能脱离类来存在。方法必须在类内部

//方法修饰符 返回值 方法名(参数){
//      方法体;
//}
  • 返回值类型

    • void 不需要返回值。
    • 返回值用return语句实现,return返回的值必须与方法返回值一致。
    //不需要返回值
    void add(){}
    //需要返回值
    int get(){
          return 1;
    }
    
  • 方法名

    • 遵循java标识符规则
    • 有意义
  • 参数列表

    • 可没有参数
    • ,分隔多个参数
    • 参数类型是Java语言的任何数据类型
    add(){}
    delete(int i,int j){}
    put(int[] arr,HashMap map){}
    
  • 方法体

    • 实现功能的Java语言代码
    • {}
    • 可定义局部变量,只能在方法体内使用

方法传参

参数传递

  • 值传递:方法接收的是调用者提供的变量的值
  • 地址传递:方法接收的是调用者提供的变量地址

区别:

  1. 值传递不能通过形参修改实参的值。
  2. 地址传递可以通过形参修改实参对应变量的值。

Java方法参数类型: 更多了解

  • 基本数据类型:
    • 整数类型
    • 浮点类型
    • 字符类型
    • 布尔类型
  • 引用数据类型:
    • 接口
    • 数组
    • 枚举
  1. 当参数是基本数据类型时,方法不能修改实际参数的值。
  2. 当参数是引用类型时,方法通过地址引用改变了实际参数对象的内容

方法重载

方法重载:同一个类有两个或多个同名方法,但参数类型个数顺序不同

前提依据

  1. 同一作用域(类)
  2. 方法名相同
  3. 参数列表不同
//在同一类中,以下均为重载方法
public class Demo{
      //1.无参
      public void add(){
            System.out.println("我的名字叫add");
      }
      //2.有参,参数个数不同
      public void add(int age,String tall){
            add();
            System.out.println("我的年龄是"+age + "身高是" + tall);
      }
      //3.参数相同,顺序不同
      public int add(String tall,int age){
            //可以相互调用
            add(age,tall);
            return age;
      }
      //4.参数类型不同
      public int add(int age){
            return age;
      }
}

注意:

  • 返回值类型可以不同,无依据
  • 静态、动态可以不同,无依据
  • 重载方法可以互相调用

构造方法

初始化

定义对象时,为对象赋初值;开辟内存单元,对数据成员给出明确值

构造方法分析

构造方法 含义
功能: 初始化对象
方法名: 类同名
参数: 可有可无
返回值: 不指定
内容: 任意,初始化赋值语句
调用: 通过new创建对象时自动调用
public class Cat{
      //成员属性
      private String name;
      //成员定义方法
      public void setName(String str){
            this.name = str;
      }

      public String getName(){
            return name;
      }
      //当类没有手动定义方法,系统会定义一个无参的构造方法
      //构造方法1
      public Cat(){
            System.out.println("构造方法1");
      }

      //构造方法2
      public Cat(String str){
            this.name = str;
            System.out.println("构造方法2");
      }
}

注意

  • 对象的声明周期中,构造方法只调用一次
  • 当类没有手动定义方法,系统会定义一个无参无内容的构造方法
  • 只要类有声明的构造方法,系统不会定义无参的构造方法
  • 一个类可有多个构造方法,参数列表不能相同
  • 构造方法实现时,可通过this调用已存在的构造方法

this关键字

  • 引用本类的方法或属性

    • this.属性;
    • this.方法();
    this.name = "咪咪";
    this.lick();
    
  • 调用本类的构造方法

    • this()this(参数)
    • 只能放在重载的构造方法的第一行
    public class Cat{
          //成员属性
          private String name;
          //成员定义方法
          public void setName(String str){
                this.name = str;
          }
    
          public String getName(){
                return name;
          }
          //当类没有手动定义方法,系统会定义一个无参的构造方法
          //构造方法1
          public Cat(){
                System.out.println("构造方法1");
          }
    
          //构造方法2
          public Cat(String str){
                this.name = str;
                System.out.println("构造方法2");
          }
          //构造方法3
          public Cat(String str,int age){
                this(str);
                System.out.println("构造方法3");
                System.out.println("年龄为"+ age);
          }
    }
    
  • 返回值

    • 返回当前调用方法的对象的引用
    //eat的方法如下
    public Cat add(){
          System.out.println("大吃一斤猫粮");
          return this;
    }
    public static void main(String args[]){
          Cat cat = new Cat();
          cat.eat().eat();
    }
    

面向对象三大特性

面向对象三大特性是Java基础最重要的钢梁
由于涉及知识比较多,类别分散
分为三章进行详解
封装
继承
多态

垃圾收集

C语言与Java语言的垃圾收集机制不同,
本文类与对象l和垃圾收集机制息息相关,不可不看哦(●'◡'●)

垃圾收集


博客相关java项目:查看Github项目
对应github项目:Demo3
导入项目的方法: Java基础——Java如何导入本地项目

原文地址:https://www.cnblogs.com/occlive/p/13377320.html