java===static关键字

package cn.china;
/*
 * 主函数特殊之处:
 * 1.格式是固定的
 * 2.被jvm所调用和识别
 * public:权限必须是最大的
 * static:虚拟机调用的时候不需要new对象,直接用主函数所属类名调用即可。
 * void:主函数没有具体的返回值。
 * main:函数名,不是关键字,只是一个JVM识别的固定名字。
 * String[]args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。*/
public class testDemo1 {

    public static void main(String[] args) {
        Person p1=new Person();
        //p1.name="小强";
        //p1.show();
        //类名可以直接调用static关键字修饰的变量
        System.out.println(Person.country); 
    }

}
class Person{
    String name;//成员变量,实例变量
    /*
     * static关键字,设置共享数据
     * static特点:
     * 1、static是一个修饰符,用于修饰成员
     * 2、被static修饰的成员,被所有的对象共享
     * 3、static优先于对象存在,因为static的成员随着类的加载就已经存在了
     * 4、static修饰的成员多了一种调用方式,可以直接被类名所调用。类名.静态成员
     * 5.静态修饰数据是共享数据,对象中存储的是特有数据*/
    static String country="china";//静态变量,类变量
    /*
     * 成员变量与静态变量的区别?
     * 1、两个变量的生命周期不同。
     * 成员变量随着对象的创建而存在,随着对象的被回收而被释放
     * 静态变量随着类的加载而存在,随着类的消失而消失
     * 2、调用方式不同。
     * 成员变量只能被对象调用
     * 静态变量可以被对象调用,也可以被类名调用。
     * 3、别名不同
     * 成员变量也称为实例变量
     * 静态变量也成为类变量
     * 4、数据的存储的位置不同
     * 成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
     * 静态变量数据存储在方法区(共享数据区)的静态区中,所以也叫对象的共享数据。
     * */
    /*静态使用注意事项:
     * 1、静态方法只能访问静态成员。因为非静态要存在于实体中,而静态成员先在,非静态需要实例化以后才存在堆内存中
     * 2、静态方法中不可以使用this或者super关键字。因为没有对象,静态方法存在于对象之前;
     * 3、主函数是静态的。
     * */
    /*
     * 静态什么时候用? 
     * 1、静态变量
     * 当分析对象中所具备的成员变量的值都是相同的,这个成员就可以被静态修饰。
     * 只要数据在对象中是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
     * 如果是相同的数据,对象不需要修改,只需要使用即可,不需要存储在对象中,定义成静态的
     * 2、静态函数
     * 函数是否用静态修饰,就参考一点,该函数功能是否访问到对象中的特有数据。
     * 简单点说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。
     * 如果不需要,就可以将该功能定义成静态。当然,也可以定义为非静态的,
     * 但是非静态需要被对象调用吗,而创建对象调用非静态的没有访问特有数据方法,该对象定义没有任何意义,浪费堆内存*/
    /*
     * 静态代码块
     * 随着类的加载,而执行。而且只执行一次。
     * 作用:
     * 用于给类进行初始化*/
    static int num;
    static{
        num=10;
        num*=3;
        System.out.println("java"+num);
    }
    /*
     * 构造代码块
     * 构造代码块可以给所有对象进行初始化,构造函数是给对应的对象进行初始化。
     * */
    {
        System.out.println("wawa!!!");
    }
    public static void show1(){
        System.out.println(Person.country+":");
    }
    public void show()
    {
        /*
         * 局部代码块
         * 限定局部变量生命周期*/
        {
            System.out.println("sdfgd");
        }
        System.out.println(country+":"+name);
        // TODO Auto-generated constructor stub
    }
}
原文地址:https://www.cnblogs.com/wangyinxu/p/6510305.html