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