Java的构造方法和static
1.构造方法
你的类中 没有提供无参构造方法时,系统在你创建对象时会调用无参的构造.
这个无参方法,系统会帮你提供一个.
如果你只提供了有参的构造方法,那么系统将不提供无参这个方法.(建议无参 有参都写上)
2. 静态变量
静态变量(相当于一个共享的变量 每个对象都能访问到),用static修饰.
静态变量( 类变量)的调用
1.可以只用对象直接使用(不建议)
2.使用类名直接调用
使用类名调用? 使用类名调用静态变量 可以和 成员变量区分
直接使用类名调用更准确 有静态变量时 对象还没有创建
静态变量好处:
节约内存(静态变量是一个共享变量)
举例
1.老师被所有学生共享
2.饮水机
静态变量和成员变量的区别:
1.所属不同
静态变量:属于类 (类变量)
成员变量;属于对象 (对象变量 实例变量)
2.内存中位置不同
静态变量:方法区的静态区
成员变量: 堆区
3.内存中加载时机不同(生命周期)
静态变量:随着类的加载而加载 随着类的销毁而销毁(程序结束销毁)
成员变量:随着对象的创建而创建 随着对象的销毁而销毁
4.调用方式不同
静态变量:对象名 和 类名(推荐)
成员变量:只能使用对象名
对象加载到内存的表现步骤
1.加载有main函数类的class文件到 方法区中
2.main方法入栈 (创建girl对象)
3.把Girl.class加载到 方法区中
4.在堆内存中 开辟空间 创建Girl的对象
5.赋值方法入栈 出栈
6.main方法执行完毕 出栈
7.程序结束
举例:
public static void main(String[] args) {
Girl girl1=new Girl();
girl1.name="苍";
Girl.country="日";
girl1.sayHi();
Girl girl2=new Girl();
girl2.name="泽";
Girl.country="日";
girl2.sayHi();
}
}
class Girl{
String name;
static String country;
public void sayHi() {
System.out.println(name+".."+country);
}
3.静态方法
public static void main(String[] args) {
Test test=new Test();
test.fun1();
Test.fun2();
Test.fun3();
}
}
class Test{
int num1=10;
static int num2=20;
成员方法中 既可以用成员变量 也可以用静态变量
简单:成员的既调用成员 也能调用静态的
public void fun1() {
System.out.println(num1);
System.out.println(num2);
}
静态方法 :随着类的加载而加载(跟静态变量一样)
静态方法的执行 跟成员方法一样 入栈出栈
静态方法中不能使用成员变量 (静态方法加载时 还没有对象)
简单:静态的只能调静态的
public static void fun2() {
//System.out.println(num1);
System.out.println(num2);
}
public static void fun3() {
System.out.println(num2);
}
}
打印结果:
10
20
20
20
4.解析main函数
public jvm调用main方法时 需要最高权限
static 调用静态方法 是不要创建对象
main 不是关键词 但当程序运行时,jvm只会调用(使用类名调用)一个叫main的函数
String[] args 原来是原来接受键盘输入的字符串
(可以使用javac和java指令)