zoukankan      html  css  js  c++  java
  • 【Java基础】static关键字

    一、static修饰成员变量

      定义一个学生类,其中grade使用static修饰

    public class Student {
    
        private String name;
        private int age;
        static String grade;//所在班级
    
        public Student() {
    
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        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;
        }
    }

      创建Student对象,且只对其中一个对象的grade赋值,此时第二个对象的grade会自动赋值

    /*
    一旦使用static关键字,那么这个变量不再属于对象自己,而是属于所在的类
    即多个对象共享同一份数据
    
     */
    public class Demo01StaticField {
    
        public static void main(String[] args) {
    
         Student one = new Student("郭靖",19);
         //只对one的属性进行赋值
         one.grade = "三年二班";
         System.out.println("姓名:" + one.getName()
                 + " 年龄:" + one.getAge()
                 + " 班级:" + one.grade);
    
         Student two = new Student("黄蓉",18);
         System.out.println("姓名:" + two.getName()
                 + " 年龄:" + two.getAge()
                 + " 班级:" + two.grade);//two的属性值此时也会自动赋值
        }
    }

    二、static修饰成员方法

    public class MyClass {
    
        int num;//成员变量
        static int numStatic;//静态变量
    
        //成员方法
        public void method(){
            System.out.println("这是一个普通的成员方法");
            //成员方法可以直接使用成员变量
            System.out.println(num);
            //成员方法可以直接使用静态变量
            System.out.println(numStatic);
        }
        //静态方法
        public static void methodStatic(){
            System.out.println("这是一个静态方法");
            //静态方法可以直接使用静态变量
            System.out.println(numStatic);
            //静态方法不能直接使用成员变量
            //System.out.println(num);
        }
    }
    /*
    一旦使用static修饰成员方法,那么此方法就成为了静态方法;
    静态方法不属于对象,而是属于类的
    
    如果没有static关键字,必须首先创建对象,通过对象才能使用该方法
    如有有static关键字,那么不需要创建对象,直接通过类名称来使用该方法
    
    注意事项:
    1、静态不能直接访问非静态
        原因:内存中是 先有 静态内容,后有 非静态内容
    2、静态方法中不能用this
     */
    public class Demo02StaticMethod {
    
        public static void main(String[] args) {
            //创建Myclass对象
            MyClass obj = new MyClass();
            //通过对象调用成员方法
            obj.method();
    
            //调用静态方法,可以通过对象名调用(不推荐),也可以通过类名来调用
            obj.methodStatic();//正确,但不推荐
            MyClass.methodStatic();//推荐写法
    
            //对于本类当中的静态方法,可以省略类名称
            myMethod();
            Demo02StaticMethod.myMethod();
        }
    
        public static void myMethod(){
            System.out.println("这是一个本类中的静态方法");
        }
    }

    三、静态代码块

    /*
    public class 类名称{
    
        static{
            代码块内容
        }
    }
    
    特点:
    执行唯一的一次;
    静态内容总是优先于非静态
    
    典型用途:用来一次性地对静态变量进行赋值
     */

      示例:

    public class Person {
    
        static {
            System.out.println("静态代码块执行啦");
        }
    
        public Person(){
            System.out.println("构造方法执行啦");
        }
    }
    public class Demo03Static {
        public static void main(String[] args) {
            Person one = new Person();
    
            Person two = new Person();
        }
    }

      执行结果:

      静态代码块执行啦

      构造方法执行啦

      构造方法执行啦

    根据执行结果可以说明:1、静态代码块优先执行;2、静态初始化块只在类加载时执行一次,所以当再次创建对象 two 时并未执行静态初始化块。

    万丈高楼平地起。
  • 相关阅读:
    ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考
    ASP.NET Core 中文文档 第四章 MVC(3.1)视图概述
    ASP.NET Core 中文文档 第四章 MVC(2.3)格式化响应数据
    ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证
    ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定
    ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览
    mysql 解除正在死锁的状态
    基于原生JS的jsonp方法的实现
    HTML 如何显示英文单、双引号
    win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装、优化、安全等)
  • 原文地址:https://www.cnblogs.com/jcl226/p/13090483.html
Copyright © 2011-2022 走看看