zoukankan      html  css  js  c++  java
  • 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
        }
    }
  • 相关阅读:
    数据库表结构变动发邮件脚本
    .net程序打包部署
    无法登陆GitHub解决方法
    netbeans 打包生成 jar
    第一次值班
    RHEL6 纯命令行文本界面下安装桌面
    C语言中格式化输出,四舍五入类型问题
    I'm up to my ears
    How to boot ubuntu in text mode instead of graphical(X) mode
    the IP routing table under linux@school
  • 原文地址:https://www.cnblogs.com/wangyinxu/p/6510305.html
Copyright © 2011-2022 走看看