①Java数据类型: 基本数据类型:4个整数类型:byte、short、int、long 2个浮点类型:float、double 1个字符类型:char 引用数据类型:String s; s=new String("Hello world"); Mouse m;
②基本数据类型在内存中:只占1块内存。引用数据类型在内存中:占2块内存
③堆内存装的是所有new出来的东西。堆内存比较大,用来动态分配内存用的。
④例子: String s; //JVM根据内容“hello”查找对象,如果没找到,则在heap堆中创建一个新对象并将其赋值给s; //否则使用已经存在的对象 s=new String("Helllo world"); //使用new语句创建一个String类型的对象,并让s指向它,以后可以通过s完成对其操作 //JVM直接在heap上创建新的对象,所以在heap中会出现内容相同,但地址不同的String对象
⑤例子: Dog d=new Dog(); 实际上new出来的Dog在堆内存里面,变量d是对Dog这个对象的引用,d可能在堆内存里面,也可能在其它内存里面;
⑥ * 类是一个人静态的概念,他是放在代码区里面 * 对象是new出来的,位于堆内存中,只有在运行期间,才知道内存要分配多大,所以把对象放在堆内存中,堆内存比较大;如果对象不用了 ,垃圾收集器收回去; * 类的每个成员变量在不同的对象都有不同的值(除了静态变量),而方法只有一份,执行的时候才占用内存,方法不调用就是一堆代码
⑦ 问题:为什么对象位于堆内存? 因为堆内存是用来动态分配内存的,只有在运行的过程中,我们才new一个对象放在堆内存中。运行过程是指输出:java HelloWorld命 令 ,而不是javac HelloWorld.java编译命令。
⑧:局部变量:方法或语句块内部定义的变量 成员变量:方法外部、内的内部定义的变量
⑨ C c1=new C(); C c2=new C(); c1、c2都是方法里定义的变量,为局部变量,存在: 栈stack
⑩ 成员变量、对象都存在: 堆heap 局部变量存在: 栈stack static变量和字符串常量存放在: 数据块 代码存放在: 代码块
①① 使用new+构造方法,创建一个新的对象 构造方法是定义在Java类的一个用来初始化对象的函数 构造方法与类同名且没有返回值
①② 方法调用:值传递 int date=9 ; test.change(date) public void change(int i) { i=1234 } 通过change()是改变不了date最初的值的。 只有通过setDate()方法才可改变
①③ 方法一旦执行完毕,由方法分配的局部变量的内存将自动消失;Dog d=new Dog();这个局部变量不是马上就消失,而是待会由垃圾收集器回收消失
①④ public Dog(String color,int leg){ this.color=color; this.leg=leg; } 形参和局部变量同等对待,放在栈内存中