构造方法的注意事项:
当你这个类中 没有提供 无参的构造方法的时候
系统在你创建对象的时候 也会调用无参的构造
这个无参方法 系统会帮你提供一个
如果你 只提供了 有参的构造方法 那么系统将
不再给你提供 无参的构造方法了
建议:写类的时候 无参 有参的构造方法 都写上
静态变量
静态变量(相当于 一个共享的变量 每个对象都能访问到)
使用关键词 static 修饰
静态变量(类变量)的调用
1.可以使用对象 直接调用(不建议)
2.使用类名直接调用(建议)
为什么建议使用类名直接调用?
使用类名调用静态变量 可以和 成员变量区分
直接使用类名调用更准确 有静态变量时 对象还没有创建
静态变量好处:
节约内存(静态变量 是一个共享变量)
举例:
老师被所有学生共享
静态变量和成员变量的区别
1.所属不同
静态变量:属于类的 也叫类变量
成员变量:属于对象的 也叫对象变量(实例变量)
2.在内存中所处位置不同
静态变量:在方法区的静态区
成员变量:在堆区中
3.在内存中的加载时机不同(生命周期)
静态变量:随着类的加载而加载 随着类的销毁而销毁(程序结束销毁)
成员变量:随着对象的创建而创建,随着对象的销毁而销毁
4.调用方式不同
静态变量:对象名 和 类名(推荐)
成员变量:只能使用 对象名
public class Demo03 {
public static void main(String[] args) {
AVGirl girl1=new AVGirl();
girl1.name="苍老师";
girl1.country="日本";
girl1.sayHi();
AVGirl girl2=new AVGirl();
girl2.name="小泽老师";
girl2.country="日本";
girl2.sayHi();
}
}
class AVGirl{
String name;//姓名
static String country;//国籍
private AVGirl() {
}
public void sayHi() {
System.out.println(name+".."+country);
}
}
对象加载到内存的表现步骤
1.加载有main类的class文件到 方法区中
2.main方法 入栈(需要创建AVGirl对象)
3.先把AVGirl.class加载到 方法区中
4.在堆内存中 开辟空间 创建 AVGirl 的对象
5.赋值方法入栈 出栈
6.main方法执行完毕 出栈
7.程序结束
class Test{
int number1=10;
static int number2=20;
//成员方法中 既可以使用成员变量
//也可以使用静态变量
public void fun1() {
System.out.println(this.number1);
System.out.println(this.number2);
}
//静态方法:随着类的加载而加载(跟静态变量一样)
//静态方法的执行 跟 成员方法一样 入栈和出栈
//静态方法中 不能使用成员变量
//(静态方法加载的 还没有对象)
//简单记:
//静态的只能调静态的
//成员的既能调用成员 也可以调用静态的
public static void fun2() {
System.out.println(number2);
}
public void fun3() {
System.out.println("fun3");
}
}
编写工具类
1.一般所有方法都使用静态的 方便调用
2.构造方法 私有化(对象对于这个类没有用)