①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; //声明了一个String类型的应用变量,但并没有让它指向一个对象
s=new String("Helllo world"); //使用new语句创建一个String类型的对象,并让s指向它,以后可以通过s完成对其操作
⑤例子:
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;
}
形参和局部变量同等对待,放在栈内存中