跳转到主内容
极星编程网:以代码为星,赴技术山海!

在Java中类和对象的关系是什么_JavaOOP基本概念解析

类是模板,对象是实例:类定义结构不占内存,对象创建时分配堆内存并存储真实数据;类不能直接访问非静态成员,必须通过对象调用。 类是模板,对象是实例——关系一句话说清 类和对象的关系不是“包含”或“继承”,而是“定义与生成”的关系:类不占内存,只是代码里的一段描述;对象一创建就分配堆内存,有真实数据。就像用同一张图纸(
class Car
)造出十辆不同颜色、不同里程的车(
new Car()
),每辆车都是独立个体,互不影响。 为什么不能直接用类调用属性或方法? 因为类本身没有状态——它没存任何具体的
name
、
age
值。你写
Person.name
会编译报错,除非这个
name
被声明为
static
。真正能访问属性和方法的,永远是对象:
person1.name
、
person2.speak()
。常见错误就是把类当对象用,比如误写
Car.start()
(没加
new
,也没声明为
static
),JVM会直接拒绝。 对象创建时发生了什么?内存里怎么分布的? 执行
Person p = new Person();
这行代码时,JVM会做三件事: 先加载
Person
类信息到方法区(只加载一次) 在堆中开辟一块空间,给所有成员变量设默认值(
int
→0,
String
→
null
) 把堆中这块地址赋给栈里的变量
p
,此时
p
才真正“指向”一个对象 后续你写
p.name = "张三"
,改的是堆里那块内存的数据,不是类定义本身。 Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; 容易被忽略的关键细节 很多人以为“类里写了
public void eat()
”,就能直接
Person.eat()
调用——不行,除非加
static
。而一旦加了
static
,这个方法就脱离对象上下文,无法访问
this.name
这类非静态成员。这是初学者最容易混淆的边界:静态属于类,非静态属于对象。别指望一个模板自己吃饭,得先造出一个能吃饭的实体才行。

相关文章