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
        }
    }
  • 相关阅读:
    JavaScript HTML DOM
    Java数组声明、初始化
    如何破解MyEclipse 10.x
    SpringBoot框架中解决日期展示问题
    spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    Spring boot启动时报 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long错误
    springboot 配置mybatis打印sql
    解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
    解决使用Navicat等工具进行连接登录mysql的1521错误,(mysql为8.0版本)
    【转载】VUE的背景图引入
  • 原文地址:https://www.cnblogs.com/wangyinxu/p/6510305.html
Copyright © 2011-2022 走看看