一.无参构造方法
当在类中没有书写无参的构造方法时,系统会自动提供一个无参的构造
注意:如果你提供了一个 有参 的构造方法时,这时系统将不会再给你提供一个 无参 构造.后期有可能会导致报错,
建议在书写的时候将两个方法同时写上.
二.static
* 静态变量相当于一个共享的变量(每个对象都可以访问到)
* 关键词 static 修饰
*
* 静态变量(类变量)的调用
*
* 1.可以使用对象 直接调用(不建议)
* 2.使用类名直接调用(建议)
* 为什么建议使用类名进行调用?
* 使用类名调用静态变量 可以和 成员变量区分
* 直接使用类名调用更准确 有静态变量时 对象还没有创建
*
* 静态变量好处:
* 节约内存(静态变量 是一个共享变量)
* 举例:
* 老师被所有学生共享
*
* 静态变量和成员变量的区别
* 1.所属不同
* 静态变量:属于类,也叫类变量
* 成员变量:属于对象 也叫对象变量
* 2.在内存中所处的位置不同
* 静态变量:方法区的静态区
* 成员变量:堆中
* 3.在内存中加载时机不同(生命周期不同)
* 静态变量:随着class文件的加载而加载 程序结束之后销毁
* 成员变量:随着对象的创建而创建 随着对象的销毁而销毁
* 4.调用方式不同
* 静态变量:对象名和类名(推荐)
* 成员变量:只能使用对象名
先上内存图:
代码:
public class Demo03 {
public static void main(String[] args) {
AVGirl girl1 = new AVGirl();
girl1.name = "泷泽萝拉";
AVGirl.country = "日本";
AVGirl girl2 = new AVGirl();
girl2.name = "冲田杏梨";
girl1.sayHi();
girl2.sayHi();
}
}
class AVGirl {
String name;// 姓名
static String country;// 国籍
// 思考:构造方法能不能用private 修饰
public AVGirl() {
}
public void sayHi() {
System.out.println(name + "" + country);
}
}
运行结果:
内存图,文字解释:
* 对象加载到内存中的表现步骤
* 1.加载由于main函数的class文件到方法区中
* 2.main方法 入栈(需要创建AVGirl对象)
* 3.先把AVGirl.class文件加载到方法区中
* 4.在堆内存中 开辟空间 创建 AVGirl的对象
* 5.赋值方法入栈 赋完值 出栈
* 6.main 方法执行完毕 出栈
* 7.程序结束
静态方法特点:
* 静态方法 随着类的加载而加载(跟静态变量一样)
* 静态方法的执行跟成员方法一样 入栈和出栈
* 静态方法中不能使用成员变量
* (静态方法加载的时候还没有对象)
* 静态方法中不能对非静态的方法进行调用
* 因为静态进行调用时 成员变量是跟着对象的 还没有被创建
*
* 简单记:静态只能调用静态的
* 静态和成员的 成员都可以调用他们,因为成员进行调用的时候 静态的已经创建了