zoukankan      html  css  js  c++  java
  • 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如何导入本地项目

  • 相关阅读:
    不容易系列之一(错排)
    找新朋友(欧拉函数)
    二分查找
    快速排序(分治)
    归并排序(分治)
    畅通工程(并查集)
    A Knight's Journey (DFS)
    Network Saboteur (DFS)
    Oil Deposits(油田)(DFS)
    Dungeon Master (三维BFS)
  • 原文地址:https://www.cnblogs.com/occlive/p/13377320.html
Copyright © 2011-2022 走看看