一.无参构造方法
当在类中没有书写无参的构造方法时,系统会自动提供一个无参的构造
注意:如果你提供了一个 有参 的构造方法时,这时系统将不会再给你提供一个 无参 构造.后期有可能会导致报错,
建议在书写的时候将两个方法同时写上.
二.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.程序结束
静态方法特点:
* 静态方法 随着类的加载而加载(跟静态变量一样) * 静态方法的执行跟成员方法一样 入栈和出栈 * 静态方法中不能使用成员变量 * (静态方法加载的时候还没有对象) * 静态方法中不能对非静态的方法进行调用 * 因为静态进行调用时 成员变量是跟着对象的 还没有被创建 * * 简单记:静态只能调用静态的 * 静态和成员的 成员都可以调用他们,因为成员进行调用的时候 静态的已经创建了