Eclipse(Mars2)
选择java,调整字体大小,调出console,设置编码方式
对象的内存分析
-
程序运行会吧.class文件加载到内存,eg:Test.class、Person.class
-
虚拟机调用Test类的main方法进栈执行
-
逐行执行方法中的代码
-
Person p = new Person();先执行等号右边,然后赋值给等号左边,看到new就是创建对象,会做的事情:
1)在堆中为这个对象开辟空间,这个类型的成员属性会跟随对象进入到堆内存中,并附默认值
2)调用构造器对象初始化信息
3)把对象在堆内存中的地址(16进制表现形式)返回给引用
Person = 0x00a;
p中存放对象的地址,跟随地址就能在堆中找到对象,p指向这个对象
p代表这个对象,p就是这个对象——>都可以
-
p.name=“宝玉”,跟随p中存放的地址找到堆内容这个的name属性,然后赋值
-
p.eat()调用功能,p执行的这个对象调用eat()功能,方法进栈执行
-
eat()方法执行完毕,弹栈释放内存
-
sleep()功能压栈执行
在成员方法中的成员变量name指的是调用成员方法的对象
-
方法执行完毕,弹栈释放内存
构造器
作用:为对象初始化信息的,不是创建对象
使用:跟随new一起使用
定义:修饰符 类名(参数列表){}
- 如果没有显示定义任何构造器,编译器会给你默认提供一个空构造器(没有参数的构造器)
- 如果有显示的定义构造器,编译器不会再给你提供任何构造器
- 构造器中的成员属性指创建哪一个对象的时候调用这个构造器的这个对象
this关键字
this指代当前new的对象,可以动态的执行不同的对象
构造器的首行调用本类中的其他构造器
注意:必须在构造器首行才可以,且构造器之间不能相互调用
区分同名变量问题
this默认指代当前调用成员方法的对象,如果出现同名变量的问题,想要指代成员变量必须使用this,如果不存在同名问题,this可以省略
在构造器中,this指代当前new的对象
this和static不可以同时使用
static关键字
静态的,是一个成员修饰符,只能修饰成员,不能修饰局部
修成变量:静态变量|类变量
修饰方法:静态方法|类方法
静态内容的使用方式:
-
对象使用
引用名.静态变量名
引用名.静态方法名()
-
通过类名使用
类名.静态变量名
类名.静态方法名()
成员都是属于对象的,静态的内容是属于类的
静态的变量在静态区中存在,是独一份的,所有对象共享的资源
成员的变量在对象的内存空间中,跟随对象存在,有一个对象就有一份成员
静态的内容中只能直接使用静态的内容,不能直接使用成员的内容,但是可以通过对象使用