java基础概念13-类和对象

news2024/9/21 22:31:00

一、面向对象OOP

类class:相同事物的共性的代码描述,所有类是引用数据类型

对象(实例)instance:类的具体的一个个体的实物。

二、类的定义

在Java中,一个类(Class)是定义对象的蓝图或模板,它包含了描述该类对象状态的数据(属性或字段)以及操作这些数据的方法

示例:

2-1、对象成员变量的默认初始化值

三、封装

示例:

3-1、private权限修饰符

为了防止出现以上的赋值错误,用private修饰属性。

 

小结:

四、this关键字

4-1、成员变量、局部变量

1、成员变量

  1. 定义:成员变量是定义在中的变量,而不是在方法内部。它们可以是任何类型,包括基本数据类型和引用类型。

  2. 作用域:成员变量的作用域是整个类体(从声明点开始,直到类结束)。但是,它们的访问可能受到访问修饰符(如public、protected、private和默认(无修饰符))的限制。

  3. 生命周期:成员变量的生命周期与对象实例的生命周期相同。当对象被创建时,成员变量被分配内存并初始化(如果未显式初始化,则自动初始化为默认值)。当对象被销毁时,成员变量所占用的内存也会被释放。

  4. 访问方式:成员变量可以通过对象实例来访问(对于非静态成员变量)或通过类名来访问(对于静态成员变量)。

2、局部变量

  1. 定义:局部变量是定义在方法代码块(如if语句、循环等)内部的变量。它们仅在定义它们的方法或代码块内部可见和可用。

  2. 作用域:局部变量的作用域是从其声明点开始,到包含它的代码块结束。一旦离开这个作用域,局部变量就不能再被访问。

  3. 生命周期:局部变量的生命周期是从其被声明并初始化时开始,到包含它的代码块执行完毕时结束。一旦局部变量所在的代码块执行完毕,局部变量所占用的内存就会被释放

  4. 访问方式:局部变量只能在声明它们的代码块内部被访问。

  5. 初始化:局部变量在使用前必须显式初始化,否则编译器会报错。这是因为局部变量存储在上,而栈上的内存是自动管理的,如果不初始化,编译器无法确定其初始值。

3、小结

 

4-2、就近原则(变量遮蔽)

如果一个局部变量(或参数)的名称与类中的一个成员变量相同,那么在这个局部变量被声明的代码块中,成员变量会被遮蔽。

class Test {  
    int x = 10; // 成员变量  

    void method() {  
        int x = 20; // 局部变量,遮蔽了成员变量x  
        System.out.println(x); // 输出20,因为局部变量x在作用域上更近  
    }  
}

4-3、this的作用

this关键字是一个非常重要的引用变量,它指向当前对象的实例。

this可以区别成员变量和局部变量,当局部变量与成员变量同名时,访问当前对象的成员变量。

若是想要访问被遮蔽的成员变量,需要用this关键字。

五、构造方法(构造器、构造函数)

作用:在创建对象的时候给成员变量进行赋值的。

修饰符 类型(参数列表)
{
    // 方法体
}

一个类可以有多个构造方法,只要它们的参数列表不同(这称为方法重载)。

【注意】默认构造方法

        如果类中没有明确声明任何构造方法,则Java编译器会自动提供一个无参的默认构造方法。但是,如果类中定义了至少一个构造方法(无论是否有参数),则不会自动生成默认构造方法

        若是自己重载了构造方法,一般需要把空参构造也创建出来!!!

 示例:

public class Person {  
    // 成员变量  
    String name;  
    int age;  
  
    // 无参构造方法  
    public Person() {  
        this.name = "Unknown";  
        this.age = 0;  
    }  
  
    // 有参构造方法  
    public Person(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
  
    // 另一个有参构造方法,参数列表不同,实现了构造方法重载  
    public Person(String name) {  
        this.name = name;  
        this.age = -1; // 假设-1表示年龄未知  
    }  
  
    // 成员方法(示例)  
    public void display() {  
        System.out.println("Name: " + name + ", Age: " + age);  
    }  
  
    public static void main(String[] args) {  
        // 使用无参构造方法创建对象  
        Person p1 = new Person();  
        p1.display(); // 输出: Name: Unknown, Age: 0  
  
        // 使用有参构造方法创建对象  
        Person p2 = new Person("Alice", 30);  
        p2.display(); // 输出: Name: Alice, Age: 30  
  
        // 使用另一个有参构造方法创建对象  
        Person p3 = new Person("Bob");  
        p3.display(); // 输出: Name: Bob, Age: -1  
    }  
}

小结:

六、javabean类、pojo类

6-1、javabean类

 

JavaBean类是一种遵循特定规范的Java类,JavaBean类具有以下几个核心特点:

  1. 公共类与无参构造方法:JavaBean类必须是public,并且提供一个无参数的公共构造方法public constructor)。这个无参构造方法允许在不指定任何参数的情况下创建类的实例。

  2. 属性封装:JavaBean的属性(即类的成员变量)必须是私有的(private,以确保封装性。这意味着类的内部状态不能直接被外部访问或修改。为了访问和修改这些私有属性,JavaBean类必须提供公共的getter和setter方法。这些方法遵循特定的命名规则,例如,对于名为name的属性,getter方法命名为getName(),setter方法命名为setName(String name)

  3. 可重用性与可维护性:通过封装数据和相关的操作方法,JavaBean提供了一种可重用且易于维护的组件。这使得JavaBean在Java EE和其他Java应用程序框架中非常受欢迎,因为它们可以被轻松地插入到其他应用程序中,以实现特定的功能。

  4. 序列化(可选):虽然序列化不是JavaBean的必要条件,但许多JavaBean实现了Serializable接口,以便它们可以被序列化到磁盘或通过网络发送。这对于分布式应用程序和需要持久化存储数据的应用程序非常有用。

  5. 命名规范:JavaBean的命名遵循一定的规范,例如,包名全部小写,类名每个单词首字母大写(驼峰命名法),属性名和方法名也遵循类似的命名规则。

6-2、pojo类

POJO(Plain Old Java Object)类指的是简单的Java对象,它们不依赖于任何特定的框架或技术,也不继承任何特殊的类或实现任何特殊的接口。

POJO类通常只包含一些属性和对应的getter/setter方法,用于存储和访问数据,而不包含任何业务逻辑。

在MVC(模型-视图-控制器)架构中,POJO类常用作模型层的一部分,用于表示应用程序的数据。

POJO与JavaBean在概念上有些相似,但JavaBean通常要求实现Serializable接口和提供无参构造方法,而POJO则没有这些要求。因此,可以认为JavaBean是POJO的一个特例或子集。

七、对象内存图

【回顾】:

方法区:

当要运行一个类的时候,这个类的字节码文件(xxxx.class)会被加载到方法区中临时存贮。

 

7-1、一个对象的内存图

当main()方法执行结束后,main()方法会从栈内存中出去,main()方法中的变量也就没有了!

栈中变量指向的堆内存的箭头也就没有了。

所以,堆内存中若是没有变量指向这个空间,这个空间也会在堆内存中消失,变成垃圾!

八、基本数据类型 VS 引用数据类型

8-1、基本数据类型

 

8-2、引用数据类型

8-3、小结

九、this的内存原理

 this的本质:表示所在方法调用者的地址值

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

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

相关文章

【经验总结】ShardingSphere+Springboot-02 数据分片、标准分片算法、时间间隔分片算法

文章目录 三、分片算法配置3.1 数据分片3.1.2 垂直分片3.1.2 水平分片 3.2 (标准)分片算法3.2.1 INLINE 基于行表达式的分片算法 (必须掌握)关于是否开启范围查找 3.2.2 INTERVAL 时间范围分片算法 三、分片算法配置 3.1 数据分片…

vue2学习 -- 路由

文章目录 1. 相关理解2. 基本使用2.1 安装2.2 嵌套路由2.3 路由传参2.3.1 query2.3.2 路由的命名2.3.3 params 2.4 路由的props配置2.5 routerlink的replace属性 3. 编程式路由导航4. 缓存路由组件5. 两个新的生命周期钩子6. 路由守卫6.1 全局前置 / 后置路由守卫6.2 独享路由守…

Java面试题--JVM大厂篇之Java中Parallel GC的调优技巧与最佳实践

目录 引言: 正文: 1. 理解Parallel GC的工作原理 2. 常见痛点与解决方案 痛点一:长时间暂停 痛点二:频繁的Minor GC 痛点三:内存溢出 3. 调优参数推荐 4. 实战经验分享 结束语: 引言:…

海思AE模块Lines_per_500ms参数的意义

​ 基础知识 1秒(S)1000毫秒(ms)1000_000微妙(s)1000_000_000纳秒(ns) 1GHz1000Mhz1000_000KHz1000_000_000Hz 1Hz1/s 抗频闪原理 海思AE模块参数中有一个LinesPer500ms的参数,意思为500ms对应的曝光行数。此个参数和抗频闪有关。 我们知道: 50HZ…

SQL注入实例(sqli-labs/less-17)

0、初始网页 1、确定闭合字符 注入点在于password框,闭合字符为单引号 2、爆库名 1 and updatexml(1,concat(0x7e,database(),0x7e),1)# 1 and (select 1 from (select count(*),concat((select database()),floor(rand()*2))x from information_schema.tables gr…

【C语言】通讯录的实现(基本版和动态版)

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html 🎁代码托管:C语言: C语言方向(基础知识和应用) (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、…

教育法、义务教育法、教师法、未成年人保护法、预防未成年人犯罪法、学生伤害事故处理办法

《中华人民共和国教育法》 《中华人民共和国义务教育法》 《中华人民共和国教师法》 《中华人民共和国未成年人保护法》 《中华人民共和国预防未成年人犯罪法》 《学生伤害事故处理办法》

C++:string

1.STL简介 STL(standard template library标准模版库),是c标准库的重要组成部分,是一个包罗数据结构与算法的软件框架。 STL有很多版本,我们学习STL要阅读部分源代码,主要参考SGI版本。 STL的六大组件&a…

Volana:一款基于Go开发的Shell命令代码混淆工具

关于Volana Volana是一款功能强大的Shell命令代码混淆工具,该工具基于Go语言开发,可以帮助广大研究人员实现对Shell命令或脚本代码的混淆处理。 在红队测试过程中,隐蔽性是非常重要的一个方面,许多基础设施会记录命令并实时将其发…

Java 中的泛型 集合(List,Set) Map

泛型的本质是参数化类型,即允许在编译时对集合进行类型检查,从而避免安全问题,提高代码的复用性 泛型的具体定义与作用 定义:泛型是一种在编译阶段进行类型检查的机制,它允许在类,方法,接口后通过<> 来声明类型参数.这些参数在编译时会被具体的类型替换.java在运行时,会通…

Java生成Word->PDF->图片:基于poi-tl 进行word模板渲染

文章目录 引言I Java生成Word、PDF、图片文档获取标签渲染数据生成文档案例II 工具类封装2.1 word 渲染和word 转 pfd2.2 pdf转成一张图片III poi-tl(word模板渲染) 标签简介文本标签{{var}}图片标签表格标签引用标签IV poi-tl提供了类 Configure 来配置常用的设置标签类型前后…

dwg图纸识别,提取建筑外轮廓坐标数据

1.业务流程说明 目的是通过dwg图纸&#xff0c;在网页端绘制出一个包括建筑外轮了的白模。为了达到这个目的&#xff0c;我们需要dwg图纸识别&#xff0c;提取到图纸中的建筑外轮廓的坐标数据。 2. 实施步骤 1.1 根据dwg图纸&#xff0c;转换成dxf文件&#xff0c;通过对dxf文…

区域与语言CultureInfo

CultureInfo 类 命名空间: System.Globalization 程序集: System.Globalization.dll 提供有关特定区域性&#xff08;对于非托管代码开发&#xff0c;则称为“区域设置”&#xff09;的信息。 这些信息包括区域性的名称、书写系统、使用的日历、字符串的排序顺序以及对日期…

56 锐键交换机开局

锐键交换机开局 一 锐键视图切换 1 Ruijie> 用户视图 2 Ruijie# 特权模式 3 Ruijie(config)# 全局配置模式 4 Ruijie(config-if-GigabitEthernet 1/1/1)# 接口配置模式 5 Ruijie(config)#show vlan 6 exit (退出) 7 enable(进入)

【电子数据取证】支持最新版微信、企业微信、钉钉等重点应用数据提取分析!

文章关键词&#xff1a;电子数据取证、手机取证、云取证、电子物证、仿真取证 针对取证调查员目前在案件现场无法提取通讯聊天数据的情况&#xff0c;为了更好地适应这一实战需求&#xff0c;龙信科技快速响应对A303“鹰眼”介质快取系统和A315计算机快速采集系统全面升级&…

java10-集合框架

1. 集合的简介 1.1什么是集合 集合Collection&#xff0c;也是一个数据容器&#xff0c;类似于数组&#xff0c;但是和数组是不一样的。集合是一个可变的容器&#xff0c;可以随时向集合中添加元素&#xff0c;也可以随时从集合中删除元素。另外&#xff0c;集合还提供了若干个…

人工智能安全态势和趋势

吴世忠 中工院士 国家保密科技委主任 重大风险隐患呼唤加强安全研究&#xff0c;人工智能面临未来担忧 1 总体态势 1.1 相对于技术发展&#xff0c;安全研究严重滞后 1.2 我国研究十分活跃&#xff0c;论文数量遥遥领先 1.3 影响力美国排名第一&#xff0c;大厂大学作用大 1…

【python】Python操作Redis数据库的详细教程与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

三防平板助力MES系统,实现工厂移动式生产报工

在当今竞争激烈的制造业环境中&#xff0c;提高生产效率、优化生产流程以及实现精准的生产管理已经成为企业生存和发展的关键。 MES系统作为连接企业计划层和控制层的桥梁&#xff0c;在实现生产过程的信息化、数字化和智能化方面发挥着重要作用。与此同时&#xff0c;三防平板…

JNPF快速开发平台助力企业实现工作流自动化

随着企业信息化建设的不断深入&#xff0c;工作流自动化已成为提升企业效率、优化业务流程的关键手段。JNPF快速开发平台凭借其强大的功能和灵活的配置&#xff0c;为众多企业提供了实现工作流自动化的高效解决方案。 关于低代码开发平台的普及应用 随着信息技术的迅猛发展&…