zoukankan      html  css  js  c++  java
  • 【JAVA基础】static 修饰符

    • 一旦使用static修饰成员变量,那么这个变量不再属于对象自己,而是属于所在的类。多个对象共享同一份数据。
    • 一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。

    无论是成员变量,还是成员方法。如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。如果有了static,都推荐使用类名称进行调用。
    静态变量:类名称.静态变量
    静态方法:类名称.静态方法()

    使用场景:在同一类中,当某一数据被所有实例化对象共享时,可以用static修饰

    注意事项:
    1. 静态不能直接访问非静态。

      1)static修饰的方法不能引用非static 修饰的变量

      2)非static修饰的方法可以引用static 修饰的变量
    原因:因为在内存当中是【先】有的静态内容,【后】有的非静态内容。
    “先人不知道后人,但是后人知道先人。”
    2. 静态方法当中不能用this或者super。
    原因:this代表当前对象,通过谁调用的方法,谁就是当前对象。

    public class Student {
        private  int id;
        private  String name;
        private  int age;
        static String room="Class 10 room";
    
        private  String home;
        private static int count=0;
    
        public Student() {
            this.id=++count;
        }
    
        public Student(int age, String name) {
            this.id=++count;
            this.age = age;
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getHome() {
            return home;
        }
    
        public void setHome(String home) {
            this.home = home;
        }
    
        public static int getCount() {
            return count;
        }
    
        public static void setCount(int count) {
            Student.count = count;
        }
        //成员方法,需要通过obj调用
        public void  introduceMyself(){  //成员方法可以访问成员变量和静态变量
            System.out.println("Hello all,我的名字叫"+this.name+",我今年"+this.age+"岁了,我的班级为"
                    +Student.room+"我的学号为"+this.id);
        }
        //静态方法,只能通过类名调用
        public static  void showAddress(){ //静态方法只能访问静态变量,不能访问成员变量
            System.out.println("我们的班级为"+room);
        }
    }
    
    ==================================
    public class staticDemo {
        public static void main(String[] args) {
            Student stu1= new Student(12,"张三");
            Student stu2= new Student(13,"张四");
    
            stu1.introduceMyself();//Hello all,我的名字叫张三,我今年12岁了,我的班级为Class 10 room我的学号为1
            stu2.introduceMyself();
            Student.showAddress();//我们的班级为Class 10 room
    
        }
    }
    

     

    静态代码块

    静态代码块的格式是:

    public class 类名称 {
    static {
    // 静态代码块的内容
    }
    }
    

    特点:当第一次用到本类时,静态代码块执行唯一的一次。

    静态内容总是优先于非静态,所以静态代码块比构造方法先执行。

    静态代码块的典型用途:
    用来一次性地对静态成员变量进行赋值。

    public class Person {
    
        static {
            System.out.println("静态代码块执行!");
        }
    
        public Person() {
            System.out.println("构造方法执行!");
        }
    
    }
    
    ===================
    public class demoStatic {
        public static void main(String[] args) {
            Person p1= new Person();  
            Person p2= new Person(); //第二次执行不再执行静态代码块
    
        }
    }
    //静态代码块执行!
    //构造方法执行!
    //构造方法执行!
    

      

  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/paulwinflo/p/12938277.html
Copyright © 2011-2022 走看看