- 新建一个Pet类
package base.oop.demo04; public class Pet { String name; int age; public void shout(){ System.out.println("叫了一声"); } }
- 现在右边pet类存在一个默认的无参构造
- 首先第一步我们要把pet给new出来
package base.oop.demo04; public class Application { public static void main(String[] args) { Pet dog = new Pet(); dog.name = "旺财"; dog.age = 3; dog.shout(); System.out.println(dog.name); System.out.println(dog.age); } }
- 首先程序运行是需要模板,第一步把Application类的代码信息放进来。
- 那这个类有main方法,常量字符串(常量池专门存放常量)。常量池里面有旺财
- 加载完他了,要执行main方法了。main方法是在栈的最里面的。当他执行完之后,被d出去了,程序也差不多结束了。
- 给 Pet dog 打一个断点
- 往下一步的时候,他走到了右边的Pet类,那说明他要加载这个类。
- Pet类也有个常量池,常量池也有字。(下面几个图堆栈写反了)
- Pet这个类new的时候,进入了class Pet,当前name为null,age为0,所以肯定是没值的。
- 那么现在对象的模板加载进来了,那他是不是要生成一个具体的对象dog。当等于dog时,也生成了一个变量。dog在栈里面是一个引用,变量的名字。真正的对象是在堆里面的。通过这个模板去new了一个Pet。shout()是引用了方法区里的shout()
- 下面 dog.name=“旺财” ,他把旺财丢给了name,name才有值
- 所有的值赋完了,这个对象才有这些值,才可以使用。
- 现在我们再来new 一个 cat ,cat是要指向真实的pet。那cat和dog是两个完全不同的对象了。类是一个模板,new出来的就是一个引用名
- 引用变量的意思是,它本身变量在栈里面是引用变量名,真正指向的是堆中具体的对象,只是通过栈给了他一个名字。本质上还是一样的东西。
- 静态方法区,就是之前static就在这个地方,就是一开始就和类一起加载的。所有的对象都可以去用到它。
- 类是一个模板,对象是一个具体的实例。
- 方法的定义和调用
- 对象的引用—引用类型。引用类型对应基本类型,对象是通过引用来 *** 作的。引用是内存图中栈的那个东西,真实指向的是堆里面的。说白了引用对象就是指向一个地址,真实 *** 作的是堆。
- 对象的属性,一般叫字段(成员变量),属性默认初始化。数字默认是0,0.0 。char是u0000,布尔值是false,引用类型统统为null。定义为 修饰符 属性类型 属性名 = 属性值。
- 方法就是定义和调用,避免方法死循环。
- 对象的创建和使用,必须使用new关键字创造对象,创造对象需要构造器。对象的属性 Person kuangshen = new Person() ,那他有属性 kuangshen.name ,这样可以调对象的属性。对象的方法: kuangshen.sleep();
- 类中只有静态的属性、动态的行为。说白了就是属性和方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)