当前位置: 首页 > news >正文

Java——类和对象

文章目录

    • 一、认识类和对象
    • 二、了解面向对象编程和面向过程编程
    • 三、类的定义和使用
    • 四、构造方法
    • 五、 this关键字

一、认识类和对象

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
类:类是“模板”的概念,描述一类事物共有的属性和行为。类是抽象的概念,如狗,猫,人等,不能具体到某个实体。
对象:对象就是通过类这个模板构造出来的一个实体,有了对象后,这些属性便有了属性值,行为也有了意义。

二、了解面向对象编程和面向过程编程

面向过程编程:把问题拆成“一步一步怎么做“。
面向对象编程:把问题拆成“由哪些东西组成、这些东西各自能做什么”。
用洗衣服举个例子:
面向过程编程
在这里插入图片描述
会一步一步的按照顺序执行。

优缺点:
简单直观、贴近机器执行流程;
项目一大,数据和函数星罗棋布,牵一发而动全身;
复用靠“复制粘贴 + 改”,维护成本高。

面向对象编程:
在这里插入图片描述
相当于把洗衣服过程的数据和操作被封装到对象内部。

优缺点:
优缺点
1.高内聚低耦合,易于扩展和维护;
2.建模贴近人类思维,适合大型系统;

高内聚:一个模块内部的元素彼此高度相关,只干同一件事。
1.代码易读:一看名字就知道职责。
2.可维护:改 bug 只在一处动刀。
3.复用性强:整块搬走即可。

低耦合:模块之间依赖关系尽量少、尽量弱,接口清晰。
低耦合的模块就像乐高积木,哪里需要哪里搬,减少重复造轮子。
面向对象编程和面向过程编程对比

维度面向过程面向对象
核心单元函数(过程)对象(类)
设计起点算法步骤领域模型(名词)
数据与行为分离封装在一起
复用手段公用函数库、复制粘贴继承、组合、多态
扩展方式改函数内部 → 易牵一发动全身添加新类/方法 → 开闭原则
代表语言C、Pascal、ShellJava、C++、Python、C#

三、类的定义和使用

前面已经解释过类的定义了,接下来直接举例说明。

class dog
{public String name;//姓名属性public int age;//年龄属性public void eat(){System.out.println(name+"吃饭");//吃饭的行为}public void sleep(){System.out.println(name+"睡觉");//睡觉的行为}
}

这个类里面简单的介绍了狗共有的属性和行为。
定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的,有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。
类的使用,对象的实例化:

public static void main(String[] args) {dog doga=new dog();doga.name="旺财";doga.age=5;doga.eat();doga.sleep();}//输出结果//旺财吃饭//旺财睡觉

用new 关键字用于创建一个对象的实例。
使用 . 来访问对象中的属性和方法。
同一个类可以创建对个实例。

四、构造方法

1.构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同没有返回值类型,设置为void也不行,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

class dog
{public String name;//姓名属性public int age;//年龄属性public void eat(){System.out.println(name+"吃饭");//吃饭的行为}public void sleep(){System.out.println(name+"睡觉");//睡觉的 行为}public dog(String name, int age) {//构造方法this.name = name;this.age = age;}public static void main(String[] args) {dog doga=new dog("旺财",2);doga.eat();doga.sleep();}
}

构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。
2.构造方法可以重载

 public dog(String name, int age) {//构造方法this.name = name;this.age = age;}public dog(){this.name="小黑";this.age=1;}

3.如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。一旦用户定义,编译器则不再生成。
4.构造方法中,可以通过this调用其他构造方法来简化代码

public dog(String name, int age) {//构造方法this.name = name;this.age = age;}public dog(){this("小黑",1);//通过this调用构造方法}

但是不能形成环,而且this(…)必须是构造方法中第一条语句

public dog(String name, int age) {//构造方法this();}public dog(){this("小黑",1);//通过this调用构造方法}

这样就是形成了环,你调用我,我调用你。

五、 this关键字

1.区分同名的成员变量和形参

public dog(String name, int age) {//构造方法this.name = name;this.age = age;}

就像这样,有this的是成员变量,没有this的是形参。
2.在构造器里调用兄弟构造器

public dog(String name, int age) {//构造方法this.name = name;this.age = age;}public dog(){this("小黑",1);//通过this调用构造方法}

3.把自身引用当参数/返回值传出去

class Counter {private int count;Counter add() { ++count; return this; } 
}

在内部类里指向外部类对象

class Outer {int value;class Inner {int value;void test() {System.out.println(this.value);      // Inner 自己的System.out.println(Outer.this.value); // 外部类的}}
}

this 永远代表“正在执行这段代码的那个对象。

http://www.dtcms.com/a/321049.html

相关文章:

  • 数据结构(六):树与二叉树
  • 触觉导航新突破:Contactile 触觉传感器推动机器人 “零示教” 实现复杂曲面作业
  • PyQt简介
  • WinForm 工具箱内容剖析
  • Linux常见服务器配置(三):MariaDB数据库管理和WEB服务器
  • hyper-v虚拟机启动失败:Virtual Pci Express Port无法打开电源,因为发生错误,找不到即插即用设备
  • UE5 图片9宫格切割
  • 强遮挡场景误检率↓79%!陌讯多模态融合算法在充电桩占位检测的实战优化
  • 跨域解决方案
  • Day10 SpringAOP
  • SpringCloud基础
  • C语言实战:从零实现strcpy函数的5种进阶方案
  • 掌握 Spring WebClient:入门到精通的全方位教程
  • Seaborn 数据可视化库:入门与进阶指南
  • 2025年渗透测试面试题总结-07(题目+回答)
  • 登录注册前端详细实现 (Angular 15+)
  • Leetcode-.21合并两个有序链表
  • 如何板端编译OpenCV并搭建应用--基于瑞芯微米尔RK3576开发板
  • 视频质量检测中准确率↑32%:陌讯多模态评估方案实战解析
  • stm32u575手写数字识别教程
  • Coze Studio 概览(九)--插件管理
  • sqli-labs通关笔记-第37关POST宽字符注入(单引号闭合 手工注入+脚本注入 3种方法)
  • Zabbix监控MySQL性能实战指南
  • OpenAI 正式发布 GPT-5:架构与性能全解析
  • 【深度学习1】什么是神经网络
  • TDSQL GTS文件说明
  • SQL的多表连接查询(难点)
  • 【代码随想录day 15】 力扣 110.平衡二叉树
  • 总结运行CRMEB标准版(uniapp)微信小程序的问题
  • Spring Boot 优雅配置InfluxDB3客户端指南:@Configuration + @Bean + yml实战