04章【面向对象(上)】

文章目录

  • 面向对象基本概念
  • 类与对象
  • 类和对象的定义格式
  • 对象与内存分析
  • 封装性
  • 构造方法
  • this关键字
  • 值传递与引用传递
  • 对象的一对一关系
  • static关键字
  • main方法分析
  • 代码块
  • 单例设计模式
  • 对象数组与管理

面向对象基本概念

什么是面向对象:

  • 面向对象是一种编程思想。
  • 面向对象是一种思考问题的思维方式。

建立面向对象思维方式:

  • 先整体,再局部
  • 先抽象,再具体
  • 能做什么,再怎么做

如何学习面向对象:

  • 掌握一门面向对象语言的语法
  • 熟悉面向对象的设计原则
  • 熟悉面向对象设计模式

类与对象

类与对象的关系

  • 类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。
  • 类由属性和方法组成:
    • 属性:就相当于一个个的特征
    • 方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉

类和对象的定义格式

类的定义

在Java中可以使用以下的语句定义一个类:

class 类名称{属性名称;返回值类型 方法名称(){}
}

对象的定义

  • 一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:
类名称 对象名称 = new 类名称() ;

按照以上的格式就可以产生对象了。

如果要想访问类中的属性或方法(方法的定义),则可以依靠以下的语法形式:

  • 访问类中的属性:
对象.属性 ;
  • 调用类中的方法:
对象.方法() ;

对象的声明

在java中对象声明有两种含义

声明对象:Horse horse= null; ;
// 表示声明了一个对象,但是此对象无法使用,horse没有具体的内存指向实例化对象:horse= new Horse() ;
// 表示实例化了对象,可以使用//通过对象调用方法:
horse.eat()//匿名对象调用方法:
new Horse().eat()

对象与内存分析

  • new 关键字表示创建一个对象
  • new 关键字表示实例化对象
  • new 关键字表示申请内存空间
  • 注意:如果使用一个没有申请内存空间的对象,会报空指针异常:java.lang.NullPointerException

对象在内存中的结构:

Horse horse= null; 
horse = new Horse();

在这里插入图片描述

给对象的属性赋值:

horse.name =“小白”; 
horse.age = 4;

在这里插入图片描述

在内存中创建多个对象:

Horse horse1=null horse1 = new Horse()
Horse horse2=null horse2 = new Horse()

在这里插入图片描述

声明两个对象,一个实例化,一个没实例化

Horse horse1=null horse1 = new Horse()
Horse horse2=null

在这里插入图片描述

对象之间的赋值:

horse1.name=“小白” horse2=horse1
horse1.age=4 horse2.name=“小黑”

在这里插入图片描述

分别实例化两个对象:

Horse horse1=null horse1 = new Horse ()
Horse horse2=null horse2 = new Horse()

在这里插入图片描述

对象之间的赋值:

horse1.name=“小白” horse2=horse1
horse1.age=4 horse2.name=“黑黑”
horse2.name=“小黑”

在这里插入图片描述

类与对象小结

  • new关键字:表示向内存申请空间,也表示实例化一个对象,创建一个对象。
  • 一个对象在内存中的大小,由该对象的所有属性所占的内存大小的总和。引用类型变量在32位系统上占4个字节,在64位系统上占8个字节。加上而外的对象隐性数据所占的大小。
  • 相同的类型才可以赋值
  • 不同的引用,指向同一个对象,任何一个引用改变对象的值,其它引用都会反映出来。
  • 编程时要注意的问题,在确定不使用对象时,要尽早释放对象:引用=null
  • 当一个堆中的对象没有被任何引用变量所指向时,该对象会被JVM 的 GC 程序认为是垃圾对象,从而被回收

封装性

封装性的概念

  • 封装性是面向对象思想的三大特征之一。
  • 封装就是隐藏实现细节,仅对外提供访问接口。
  • 封装有:属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装…

封装的好处

  • 模块化
  • 信息隐藏
  • 代码重用
  • 插件化易于调试
  • 具有安全性

封装缺点:

  • 会影响执行效率

封装之前:

class Person{String name;int age;
}

封装之后:

class Person{  //属性是成员变量private String name;private int age;//参数及方法内定义的变量是局部变量public void setName(String name){this.name = name;}public String getName(){return name;} 
}

成员变量和局部变量

  • 在类中的位置不同
    • 成员变量:在类中定义
    • 局部变量:在方法中定义或者方法的参数
  • 在内存中的位置不同
    • 成员变量:在堆内存(成员变量属于对象,对象进堆内存)
    • 局部变量:在栈内存(局部变量属于方法,方法进栈内存)
  • 生命周期不同
    • 成员变量:随着对象的创建而存在,随着对象的销毁而消失
    • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
  • 初始化值不同
    • 成员变量:有默认初始化值,引用类型默认为null
    • 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用
  • 注意:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则

构造方法

什么是构造方法

  • 构造方法就是类构造对象时调用的方法,用于对象的初始化工 作
  • 构造方法是实例化一个类的对象时,也就是new 的时候,最先调用的方法。

构造方法的定义:
构造方法是在类中定义的,构造方法的定义格式:

方法名称与类名称相同,无返回值类型的声明。

对象的实例化语法:

Dog dog = new Dog(); //new Dog后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法了

构造方法重载:

  • 无参构造方法:
public Dog(){}
  • 带一个参数的构造方法:
public Dog(String name){this.name = name;
}
  • 带多个参数的构造方法:
public Dog(String name,int age){this.name = name;this.age = age;
}

构造方法小结

  • 构造方法名称与类名相同,没有返回值声明(包括 void)
  • 构造方法用于初始化数据(属性)
  • 每一个类中都会有一个默认的无参的构造方法
  • 如果类中有显示的构造方法,那么默认构造方法将无效
  • 如果有显示的构造方法,还想保留默认构造方法,需要显示的写出来。
  • 构造方法可以有多个,但参数不一样,称为构造方法的重载
  • 在构造方法中调用另一个构造方法,使用this(…),该句代码必须在第一句。
  • 构造方法之间的调用,必须要有出口。
  • 给对象初始化数据可以使用构造方法或setter方法,通常情况下,两者都会保留。
  • 一个好的编程习惯是要保留默认的构造方法。(为了方便一些框架代码使用反射来创建对象)
  • private Dog(){},构造方法私有化,当我们的需求是为了 保正该类只有一个对象时。

什么时候一个类只需要一个对象?比如,工具类(没有属性的类,只有行为)并且该工具对象被频繁使用。
权衡只用一个对象与产生多个对象的内存使用,来确定该类是否要定义为只需要一个对象。


this关键字

在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:

  • 调用类中的属性
  • 调用类中的方法或构造方法
  • 表示当前对象

值传递与引用传递

示例一:值传递

public class ValueDemo{public static void main(String[] args){int x = 10;method(x) ;System.out.println(“x=+x) ;}public static void method(int mx){mx = 20;}
}

示例二:引用传递

public class RefDemo1{public static void main(String[] args){Duck d = new Duck();method(d) ;System.out.println(Duck age =+d.age) ;}public static void method(Duck duck){duck.age = 5;}
}
class Duck{int age = 2; //省略封装
}

示例三:String传递

public class RefDemo2{public static void main(String[] args){String name =“小飞”;method(name) ;System.out.println(“name=+name) ;}public static void method(String sname){sname =“小备”;}
}

示例四:String传递

public class RefDemo3{public static void main(String[] args){Person p = new Person();method(p) ;System.out.println(“person name=+p.name) ;}public static void method(Person p ){p.name =“备备”;}
}
class Person{String name =“飞飞”; //省略封装
}

对象的一对一关系

static关键字

main方法分析

代码块

单例设计模式

对象数组与管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经典ABR算法介绍:Pensieve (SIGCOMM ‘17) 原理及训练指南

文章目录 前言Pensieve原理*Pensieve重训练参考Oboe [SIGCOMM 18]Comyco [MM 19]Fugu [NSDI 20] A3C熵权重衰减思路实现 前言 Pensieve是DASH点播视频中最经典的ABR算法之一,也是机器学习类(Learning-based)ABR算法的代表性工作。Pensieve基…

母婴品牌找小红书达人卖货怎么做?

小红书母婴种草推广,就是品牌方找小红书上的达人进行产品体验和内容分享,从而达到卖货的目的,软广形式更容易被大众所接受,而且小红书平台上的宝妈用户群体都是有一定消费水平的一二线城市用户,所以这样就会形成一套完…

十一、常用API——正则表达式

目录 练习1: 正则表达式的作用 正则表达式 字符类(只匹配一个字符) 预定义字符(只匹配一个字符) 数量词 类 Pattern 正则表达式的构造摘要 反斜线、转义和引用 字符类 行结束符 组和捕获 Unicode 支持 与…

第3章 无监督学习与预处理

目录 1. 无监督学习的类型2. 无监督学习的挑战3. 预处理与缩放3.1 不同类型的预处理3.2 应用数据变换3.3 对训练数据和测试数据进行相同的缩放快捷方式与高效的替代方法 3.4 预处理对监督学习的作用 4. 降维、特征提取与流形学习4.1 主成分分析(PCA)4.1.…

大数据StarRocks(八):集群扩缩容

一、FE扩缩容 StarRocks FE 节点分为 Follower 节点和 Observer 节点。Follower 节点参与选举投票和写入,Observer 节点只用来同步日志,扩展读性能。 注意: 所有 FE 节点的 http_port 必须相同。Follower FE 节点(包括 Leader …

Vue Axios——前端技术栈

文章目录 基本介绍Vue是什么? MVVMVue的使用快速入门注意事项和使用细节 Vue 数据绑定机制分析数据单向渲染注意事项和细节 双向数据绑定事件绑定示例:注意事项和使用细节课后作业1课后作业2 修饰符示例 条件渲染/控制: v-if v-showv-if VS v-show课后作…

山海鲸可视化软件:引领航空业数字化转型的智慧机场解决方案

作为山海鲸可视化软件的开发者,我们深知在当今数字化时代,数据可视化的重要性。特别是在航空业,数据可视化不仅可以提高运营效率,还能为决策者提供更准确、实时的信息。为此,我们推出了一款专为智慧机场设计的可视化解…

外观设计重要还是实用性重要?

外观设计和实用性在产品设计中都非常重要,二者并不是对立的关系,而是相辅相成的。以下是我对外观设计和实用性的看法: 首先,外观设计的重要性。产品的外观设计直接影响到产品的品牌形象、市场吸引力和用户体验。一个具有吸引力和…

SDL2 连续帧图像显示

QT使用SDL多窗口显示视频(linux,ubuntu)_linux qt sdl-CSDN博客 QT使用SDL播放YUV视频 - C - QT SDL调用OPENGL渲染图像 - C - 心得 C 使用SDL显示RGB图像数据_c sdl-CSDN博客 SDL库入门:掌握跨平台游戏开发和多媒体编程_sdl开…

亚马逊卖食品有什么具体要求?亚马逊卖食品好做吗?—站斧浏览器

亚马逊卖食品有什么具体要求? 首先,亚马逊要求卖家提供食品的详细信息,包括产品描述、成分表、营养信息和包装规格等。这些信息对于消费者来说至关重要,它们可以帮助消费者了解产品的特点和质量,并做出明智的购买决策…

图解基础排序算法(冒泡、插入、选择)(山东大学实验二)

目录 ⚽前言: 🏐 冒泡排序: 设定: 分类: 起源: 图解冒泡: 图中绿色: 图中橙色: 整体思路: 交换思路: 核心代码: &#x…

3D视觉专用名词概念解释,深度图、点云图、IR图、RGB图像

🌞欢迎来到深度学习的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 🙏作者水平很有限,如果发现错误&#xff…

JAVA电商平台 免 费 搭 建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

Debian系统写Mysql时中文出现乱码无法定入的问题解决方案

原因是操作系统可能精简安装,没有GBK字符集,只有UTF8在转换或使用的时候有问题。 使用locale -a查看系统支持的字符集。正常的比较全的字符集的操作系统如下: 有问题的操作系统字符集如下: 解决方案: 步骤1&#…

基于Java+SSM框架的智慧医疗问诊管理系统【附源码】

基于JavaSSM框架的智慧医疗问诊管理系统详细设计和实现【附源码】 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各…

高效视频剪辑:视频合并让视频焕然一新,添加背景音乐更动听

随着社交媒体和数字内容的普及,视频剪辑已成为一项常用的技能。除了基本的剪辑技巧外,添加合适的背景音乐也是提升视频质量的方法。下面来看云炫AI智剪的高效视频剪辑技巧——如何批量合并视频,添加动听的背景音乐。 视频合并后的效果展示&a…

What is `@Repository` does?

Repository 是Spring注解,标识数据访问层组件(DAO, Data Access Object) 当一个类被标记为 Repository 时: 1、组件扫描与自动代理: Spring通过组件扫描(Component Scan)机制发现带有 Reposit…

【AI绘画+本地部署】基于krita的AI绘画(含windows一键整合包)

comfyuikrita所有相关资源整合包(无需下载后面链接)百度网盘:https://pan.baidu.com/s/1iwNRpdTaD26YbzSDm6WLDA?pwdbur8 –来自百度网盘超级会员V4的分享 krita绘画软件官网地址 https://krita.org/en/download/krita-desktop/ krita-ai-diffusion 插件&#xff…

计算机网络-ACL访问控制列表

上一篇介绍NAT时候就看到了ACL这个东西了,这个是什么意思?有什么作用呢? 一、ACL访问控制列表 访问控制列表 (ACL, Access Control List)是由一系列permit或deny语句组成的、有序规则的列表。ACL是一个匹配工具,能够对报文进行匹配…

鸿蒙原生应用/元服务实战-AGC团队账户

多人及内外结合去开发运营鸿蒙原生应用元服务时,需要用到团队账户,AGC提供了强大的团队角色与权限分工能力。 团队帐号是开发者联盟为实名开发者提供的多个成员帐号登录与权限管理服务。当前团队帐号支持成员参与应用市场(付费推广、应用内付…