zoukankan      html  css  js  c++  java
  • java-static静态关键字

    static修饰成员属性作用:
    多个对象共享同一份数据,一旦用了static关键字。那么这样的内容不再属于自己,而是属于类,只在类中保存唯一一份,所有对象共享同一份。

    成员变量中static用法

    /*
    类的定义注意事项:
    成员变量是直接定义在类党总的,在方法外边
    成员方法不要写static关键字。
     */
    public class Student {
        private int id;//学号,不在构造方法中使用
    
        private String name;//姓名
    
        private int age;//年龄
    
        static String room;//教室
    
        private static int idCounter = 0; //计数器,自动生成学号使用
    
        public Student() {
            this.id = ++idCounter;
        }
    
    
        public Student(String name, int age) {
            this.id = ++idCounter;
            this.name = name;
            this.age = age;
        }
    
        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 static String getRoom() {
            return room;
        }
    
        public static void setRoom(String room) {
            Student.room = room;
        }
    }
    
    //创建实例
    public class StaticDemo {
        public static void main(String[] args) {
            Student stu = new Student("李四",18);
            stu.room = "教室001";
            Student stu1 = new Student("张三",26);
            System.out.println("姓名:" + stu.getName() + "年龄:" + stu.getAge() +
                    "所在教室:" + stu.room + "学号:" + stu.getId());
            System.out.println("姓名:" + stu1.getName() + "年龄:" + stu1.getAge() +
                    "所在教室:" + stu1.room + "学号:" + stu1.getId());
        }
    }
    
    

    static修饰成员方法作用:
    一旦static修饰成员方法,那么这个方法不属于对象,而是属于类。
    如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。

    public class Student {
        public void eat(){
            System.out.println("普通方法!");
        }
        public static void staticMain(String[] args) {
            System.out.println("静态方法!");
        }
    }
    
    实例化使用方法:
    
    public class StudentDemo {
        public static void main(String[] args) {
            Student stu = new Student();
            stu.eat();//正确调用普通方法
            Student.staticMain();//正确调用静态方法
            staMain();//调用自己的静态方法,可以省略类名 完全等效于 StudentDemo.staMain
        }
    
        public static void staMain() {
            System.out.println("自己的方法");
        }
    }
    
    


    静态方法与静态变量的作用域:

    1. 静态方法可以直接访问静态成员变量。

    2. 静态方法不能访问非静态成员变量。(原因:非静态属于对象,而静态方法属于类)

    3. 静态方法当中不能使用this。因为静态方法是通过类调用,this仍然指的是对象。

    4. 普通方法可以访问所有的成员变量。

    static内存图:

    静态代码块:
    直接在类中用static声明

    1. 当第一次用到本类时,静态代码块执行唯一的一次。
    2. 静态的内容总是优先于非静态,所以静态代码块的内容先执行。
      静态代码块的典型用途:
      用来一次性对静态成员变量进行赋值。
    public class Phone {
        static {
            System.out.println("静态代码块启动!");
        }
        public Phone(){
            System.out.println("构造方法执行!");
        }
    }
    
    //实例化对象
    public class PhoneDemo {
        public static void main(String[] args) {
            Phone n1 = new Phone();
            Phone n2 = new Phone();
        }
    }
    

  • 相关阅读:
    bzoj 2084: Antisymmetry 回文自动机
    bzoj 1819: 电子字典 Trie
    bzoj 1398: 寻找主人 AC自动机+最小表示法
    bzoj 4199: [Noi2015]品酒大会 后缀树
    bzoj 4044: Virus synthesis 回文自动机
    信用风险评分卡研究-第4章笔记
    信用风险评分卡研究-第3章笔记
    信用风险评分卡研究-第2章笔记
    信用风险评分卡研究-第1章笔记
    评分卡建模流程目录
  • 原文地址:https://www.cnblogs.com/lishi-jie/p/11699288.html
Copyright © 2011-2022 走看看