Java对象属性解析:实例变量与类变量深度解析

创始人
2024-12-17 10:19:47
0 次浏览
0 评论

java对象有哪些属性

Java对象的属性包括实例变量(成员变量)和类变量(静态变量)。

下面是详细解释:

实例变量(成员变量):

这是每个对象唯一的属性。
创建类对象时,这些变量被分配给该对象的每个实例。
实例变量可以是私有的、受保护的、标准的或公共的,具体取决于它们的访问控制修饰符。
这些变量在对象创建时初始化,并且可以在对象生命周期中随时更改。
实例变量的值因对象而异。

类变量(静态变量):

这是类的所有实例共有的变量。
无论创建多少个类的对象,静态变量都只有一个实例,并且所有对象都将共享该静态变量的唯一实例。
静态变量由所有对象共享。
无论哪个对象修改它们,都会影响其他对象可见的静态变量的值。
静态变量通常用于存储类的状态信息或配置信息。
静态变量并不直接与类的所有实例关联,而是在程序执行期间加载和保留类时创建。
可以通过类名直接访问。

一般来说,Java对象的属性可以分为两种:实例变量和类变量,分别对应对象的特有属性和类的通用属性。
这两个属性为运行Java程序提供了灵活的数据存储方式。

java类和对象的关系

在Java编程中,类和对象之间的关系是核心概念之一。
对象由类实例化,并包含类的属性和行为。
以“人”为例,它是一个抽象的概念,而具体的“张三”则是一个“人”的物体,具有姓名、年龄等属性,可以进行吃饭、穿衣等动作。
阶级又可分为“男人”、“女人”等不同的子类,它们继承了“人类”的特点和方法,同时又有自己的特点。
同样,“人”又可以进一步分为“老人”和“儿童”。
类多态性允许相同的操作在应用于不同的对象时表现不同。
例如,“男人”和“女人”可能对相同的“食物”有不同的偏好。
继承允许子类继承父类的属性和方法,同时添加自己的属性和方法或重写父类的方法。
这使得代码更加灵活和可扩展。
类中的方法可以分为实例方法和静态方法。
实例方法通过对象调用,例如“ZhangSan.Eat()”,而静态方法通过类名调用,例如“Human.Eat()”。
Eat()”可以被调用。
静态方法也称为共享方法,因为无需实例化对象即可调用,适合需要在整个程序中共享的工具方法。
类和对象之间的关系不仅仅是简单的实例化,而是抽象和具体之间的桥梁。
通过类我们可以定义事物共同的特征和行为,而对象则是这些特征和行为的具体实现。
这种关系不仅有助于组织和管理代码,而且使程序的设计更加模块化,更易于维护。
总之,类是定义其结构和行为的对象的蓝图,而对象是具有特定属性和行为的类的特定实例。
通过类继承和多态性,可以创建各种各样的对象来满足不同的需求。

一个Java对象究竟占多少内存空间?

Java作为一种面向对象的编程语言,为我们提供了无数的功能,使得代码更容易维护和扩展。
然而,一个经常被问到的问题是:我们创建的Java对象占用了多少内存?本文将通过分析Java对象的内存模型来探究这个谜团。
本文环境设置为JDK1.8和64位虚拟机。
在讨论Java对象的内存模型之前,我们首先了解一个基本概念:每个Java对象都包含两部分:MarkWord和KlassWord。
MarkWord是关键实现原理的重要组成部分,而KlassWord则包含描述Java类的元数据和方法信息。
在64位虚拟机环境中,启用指针压缩后,KlassWord占用32位空间,而MarkWord占用64位空间。
因此,Java对象的内存容量至少为96位或12字节。
这是对象标题的固定占用空间,无论对象是否包含属性。
接下来我们用代码验证一下上面的内存模型。
使用openjdk的JOL工具,我们可以检查对象的内存使用情况。
通过创建一个新的常规类,我们注意到一个空对象占用了16字节的内存。
这是由于对象头和虚拟机缓冲的附加字节的组合所致。
在实际应用中,我们更关心非空对象的内存使用情况。
在这里,我们将创建一个包含其他对象的类以进行分析。
通过代码执行,我们注意到TestNotNull类占用了24字节的内存,其中包括12字节的对象头、4字节的int类型变量、4字节的引用变量以及用于内存对齐的4字节的填充。
因此,非空对象实际占用的内存为24字节。
最后,我们需要计算非空对象中实际对象的内存容量。
以NullObject为例,其内存容量为16字节。
因此,整个对象的总内存容量为24字节(非空对象)+16字节(NullObject)=40字节。
通过分析本文,我们可以了解Java对象内存使用的基础知识以及如何使用JOL工具进行验证。
掌握这些知识将有助于我们更有效地使用Java,避免不必要的内存浪费。
热门文章
1
Java字符串分割技巧:轻松获取逗号前的... java任意一个字符串,当它碰到第一个逗号时,返回逗号前面的字符串,例如:str...

2
SQL多表连接查询全解析:JOIN语句应... sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...

3
Java中字符串类型详解:String与... 变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...

4
JavaSE与JavaEE:从基础到企业... javase 和javaee的区别?JavaSE和JavaEE...

5
Java程序员面试必知:核心技术问答与技... java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...

6
Java.exe与Javaw.exe:区... 程序中java和javaw有什么区别java和javaw的区别:两者都是Java...

7
深入解析:Java中的javax包及其与... JAVA导入时,什么是javax?awt是java1.0,swing是java2...

8
Java基础教程:深入理解File和Pa... java中if(!file.exists())什么意思?”“在Java >...

9
Java字符串搜索与位置定位技巧解析 在java中求一个字符串在另一个字符串中多次出现的位置。用indexOf方法怎么...

10
Java静态资源加载机制解析:静态方法与... java静态资源(静态方法,静态属性)是程序一运行就加载到jvm中,还是当被调用...