Java中的构造方法、静态变量和静态方法(基础详解)

Java中的构造方法、静态变量和静态方法

构造方法

    构造方法注意事项:
    1. 如果你没写无参的构造方法
       系统会给你提供一个无参的构造方法
    2. 如果我只写了 有参的构造方法
       这时 系统就不再给你提供无参的构造方法
    3. 写类的时候 建议 无参 有参 构造方法 全写


    定义类 书写顺序
    成员变量 -> 无参 有参 构造方法 -> set/get方法 ->成员方法

    例如:

    public class Demo01 {
    public static void main(String[] args) {
        Car car = new Car();
        car.name = "法拉利";
        car.num = 911;
        car.sayHi();

        //有参构造方法创建对象
        Car car2 = new Car("兰博基尼",10);
        System.out.println(car2.name);

        // 在赋值成员变量时 使用 哪种方法好?
        //set方法 和 有参的构造方法
        }
    }

    class Car{
        String name;
        int num;

        构造方法的重载:只跟参数有关
        当类中的成员变量 需要计算的时候 可以 在 构造方法中 完成


        //无参构造方法
    public Car() {
            System.out.println("我是无参的构造方法");
        }
        //有参的构造方法
    public Car(String name,int num) {
        //初始化成员变量
        this.name = name;
        this.num = num;
        System.out.println("我是有参的构造方法");
    }


    public void sayHi() {
        System.out.println(this.name + " " + this.num);
    }

    public void fun(){
        System.out.println("哈哈");
    }

静态变量

    静态变量 (使用static修饰)
    静态变量保存在 方法区的 静态区(共享区)
    静态变量是共享区间

    静态变量 如何调用?
    1. 可以使用 对象来调用
    2. 可以使用 类名来调用(推荐)

    为什么静态变量要使用 类名 去调用??
    因为 只要加载了.class文件 就加载了静态变量(这时 还没有对象产生)

    静态变量(属于类 也叫 类变量)
    非静态变量(属于对象 也叫 对象变量)
    这两者的区别是什么?

    1.调用方式不同
        静态变量:   对象或类名去调用(推荐 类名)
        非静态变量: 只能使用 对象去调用
    2.内存中存在的位置不同
        静态变量:   方法区的静态区
        非静态变量: 堆内存
    3.加载的时机不同
        静态变量:   随着类的加载而加载(不依赖对象而加载)
        非静态变量: 随着对象的创建而创建(以来对象)
    4.生命周期不同
        静态变量:   随着类的销毁而销毁(相当于程序结束)
        非静态变量: 随着对象的销毁而销毁

        例如:
        public static void main(String[] args) {
        AVGirl girl1 = new AVGirl();
        girl1.name = "苍老师";
        AVGirl.country = "日本";
        girl1.sayHi();

        AVGirl girl2 = new AVGirl();
        girl2.name = "波多老师";
        AVGirl.country = "北海道";


        girl2.sayHi();
    }
}
    //当你在设计类的时候 需要考虑成员变量是否需要共享
    class AVGirl{
        String name;   //姓名
        static String country;//国籍

        public void sayHi() {
            System.out.println(this.name + "  " + this.country);
        }

静态变量在内存中的表现

静态变量在内存中加载步骤
    1. 加载.class文件(字节码文件) 到方法区
    2. main方法入栈
    3. 要创建AVGirl的对象 先要加载 AVGirl.class
          AVGilr.class 中 分为 静态区和非静态区
          这时 初始化静态变量county 初值为 null;
    4. 创建对象(堆区开辟空间) 
    5. 把对象的地址 赋值给 girl1 变量 保存
    6. 通过类名 修改 类变量的值
    7. sayHi 方法 入栈 打印
    8. sayHi 出栈
    9. main 出栈   

静态方法

    静态方法(使用static修饰的方法)
    非静态方法:
        1.可以使用静态变量和非静态变量
        2.可以使用静态方法和非静态方法

    静态方法:
        1.只能使用静态变量
        2.只能使用静态方法

        例如:
            public static void main(String[] args) {
        Man man = new Man();
        man.fun();
    }
}

    class Man{
        int num1 = 10;
        static int num2 = 5;
        // 非静态方法 可以访问 静态变量 和 非静态变量
        // 静态方法 可以访问谁?(加上静态 相当于 随着类改变 跟对象没关系)
        public void fun() {
            System.out.println(this.num1);
            System.out.println(Man.num2);

            //调用静态方法(类方法) 推荐使用 类名 调方法
            Man.fun1();
        }

        //静态方法
        //静态方法中 不能访问 非静态变量(因为 加载类的时候 还没有对象)
        //简单记: 静态只能使用静态的
        public static void fun1(){
            //System.out.println(num1);
            System.out.println(num2);
        }
    main方法的解析

    main就是为了让jvm去调用的方法

    public jvm调用这个方法 要使用最大权限

    static jvm调用时是不需要创建对象的 直接使用类名调就行

    main 不是关键字  jvm 只认识 main这个词

    String[] args  接收键盘输入的值
                                                                      Day.8 
  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值