一、内存分析
内存分析:指数据的存储,理解程序执行过程,运行期的行为,不是编译期。
分类
栈: 方法栈存储方法的局部变量|形参后进先出
堆: 对象堆存储new的对象散列存储
方法区: 特殊的堆,类方法区,存储类的信息,存储不变的信息共享的信息,散列存储
内存示例:
publicstaticvoid main(String[] args) { //创建对象 Pig pig =new Pig(); pig.color="黑色"; pig.weight=1000; pig.gongDi(); //带了自己的数据
//一个人 Person p =new Person(); p.name ="王志勇"; p.age =18; p.gender =true; //true-->男 p.height =1.92; p.laugh();
//一个人 Person p2 =new Person(); p2.name ="老裴"; p2.laugh(); } |
引用
引用名在左边,对象在右边,通过引用访问、改变对象。
“引用指向了谁?””对象被谁所指向?”
1、 JAVA一切皆为值传递 (地址的副本)
2、 一个对象可以有多个引用所指向,当其中一个引用对该对象发生了变化,其他的引用也可见。
3、 一个引用在同一个时刻只能指向一个对象
二、构造器
构造器也成为构造函数,特殊的方法,用于初始化对象信息,为new服务(其他地方不能调用)。创建对象类名引用 =new 构造器;
1、格式
修饰符类名([形参列表]){
}
注意点
1)、没有返回值类型|void,可以存在return ,跳出方法
2)、作用: 初始化对象信息的
3)、new 创建时调用构造器,与new一起
2、空构造
没有参数的构造器,如果没有编写任何构造器,javac自动加入空构造
一旦加入构造器,javac不再加入,建议,手动加入空构造。
3、构造器重载
存在多个构造器,构造器之间存在重载,注意: 就近原则,如果方法的局部变量|形参与属性同名,使用 this.区分
三、this
1、this:代表调用者本身,在成员方法、构造器中形参隐式传递this,避免发生就近最优原则。
2、this([实参])构造器首行,调用其他构造器。
This的用法:1、哪个对象在调用This所在的函数,那么This就等于哪个对象
2、当定义类功能时,该函数内部需要调用该函数的对象时,用This代表这个对象。
3、但凡本类功能内部使用了本类对象,都用this表示。
4、this能调用构造函数,而且只能放在第一行。
四、static
是一个修饰符,只能修饰成员(成员变量。成员函数)
静态的,凡是静态的就是跟对象无关,属于类的;都是对象们共享。修饰以下
1、 属性–>静态变量类变量
2、 方法 -->静态方法类方法
3、 静态块 :在使用类之前加载,仅加载一次
4、 当成员被静态变量修饰后,就多了一中调用方法,除了可以被对象调用外,还可以直接被类名调用,方法为 类名.静态成员
5、 随着类的加载而加载
6、 优先与对象的存在
7、 被所有对象共享
需要注意 静态方法只能访问静态成员。非静态方法可以访问静态也可以访问非静态
静态方法中不可以定义this,super等。
类变量随着类的加载而存在于方法区中,随着类的消失而消失
实例变量随着对象的建立,存在与堆中。随着对象的消失而消失
主函数是静态的。
静态的方法|块: 不能直接访问成员信息
publicclassTestStatic { public static inta; //静态变量 类变量 public int b; //成员变量 实例变量 publicvoid t(){ System.out.println("成员方法"); } //静态方法 publicstaticvoid test(){ System.out.println("静态方法。。。。。"); /* 静态的不能直接访问非静态信息 b =100; t(); */ }
//静态块: 在使用类之前加载,仅加载一次 static{ a =100; System.out.println("静态块,加载类信息,初始化类的信息"); }
publicstaticvoid main(String[] args) { inta=200; System.out.println(TestStatic.a); TestStatic.a =100; //当前类中类.可以省略 /*TestStatic.*/test(); //调用静态方法
} } |
|