实例代码
public class Dog{ String color; double height; double weight; public String guidHome(){ return "狗在看家"; } } class TestDog{ public static void main(String[] args){ Dog dog=new Dog(); dog.color="黄色"; dog.height=50.5; dog.weight=60.0; System.out.println(dog.height+"cm高"+dog.weight+"kg重"+dog.color+"的"+dog.guidHome()); } }内存结构图一 内存结构图2 堆内存中的东西java的垃圾回收机制会自动回收
个人总结:变量分为常量和变量,变量分为局部变量和成员变量。成员变量分为对象成员变量和类成员变量。方法分为对象方法和类方法,对象成员变量不能在类方法中使用,但是类成员变量可以在对象方法中使用
局部变量: 1.在方法中或者语句块中 2.局部变量必须初始化 3.都存储在栈中 4.生命周期:定义的时候产生, 当前的方法的括号语句块的括号执行完毕消失 成员变量(属性): 成员变量又分为对象成员变量 和类成员变量(被static关键字修饰) 1.在类中定义 2.可以不赋值但是都有默认值 3.存储在堆中 4.生命周期:随着对象的消失而消失,会被JVM的垃圾回收机制回收 (当对象没有引用的时候会被回收),匿名对象就是没有被引用的对象。 匿名对象:匿名对象是无意义的, 因为在栈中没有一个变量会对它引用很快 就会被垃圾回收机制回收掉this关键字表示当前的,它只能在对象方法中使用 this关键字的特性:代表当前类的对象,所以当哪个对象调用含有this的对象方法的时候, this就代表哪个对象,所以理解的重点就是要辨别当前的对象到底是哪个,到底是当前的对象还是当前调用这个含有this方法的对象。 另外this关键字可以理解为 new object();的简写,所以可以这么使用: this(属性,属性);这就是通过this(实参列表)可以调用本类中的构造器,必须注意的是只能在方法中的第一行 打印一个对象实际是打印它的地址(jdk提供的地址而不是内存中的真正地址,内存中真正的地址是16进制的)
方法的执行是在栈中执行的这儿还需要注意的是类属性在数据共享区