IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java static关键字的作用域及使用描述 -> 正文阅读

[Java知识库]Java static关键字的作用域及使用描述

static

作用域:

  • 成员变量(Filed),被修饰的成员变量一般称之为静态变量或类变量。多搭配final使用。
  • 函数方法(Method),被修饰的方法一般称之为静态方法
  • 内部类,被修饰的内部类称之为静态内部类
  • 和import搭配使用
  • static静态代码块

示例:

package com.start.test;

/**
 * import static + 全限定名称 + .*;将指定类引入后,就可以直接访问类中的静态成员变量和静态方法,
 * 就无需再使用类名+方法或成员变量的方式来使用其他类的静态方法或静态属性;
 * 例如下面getName()方法使用的Test2类的field1属性和testMethod()方法;
 * 该搭配是jdk1.5版本新引入的,自jdk1.5版本之后生效
 */

import static com.start.test.Test2.*;

public class TestStatic {

    private String Tcode;

    /**
     * 被static修饰的成员属性,也称为静态变量、静态属性或类属性,
     * 既然被称之为类属性,顾名思义这个属性是属于当前类的,而不是属于对象的,也就是说无需创建对象就可以个使用这个属性,
     * 一般静态变量的使用方式为 类名.属性名  即TestStatic.name就可以直接获取当前属性值,当然也需要注意权限修饰符的作用域。
     * 根据命名规范静态变量的变量名称应驼峰式命名。
     */
    static String name;

    /**
     * 1.被static修饰的代码块,会优先于普通代码块先执行,也就是在普通代码块之前执行
     * 2.相比于普通代码块,静态代码块可以给静态成员变量和静态常量进行赋值。
     * 对静态常量进行赋值这一点比较特殊,因为静态常量必须赋值,但如果给一个静态常量赋值时想根据某些条件进行赋值,
     *  如果条件比较简单可以使用三元表达式进行简单逻辑判断例如下方的OLD静态常量,但如果判断条件复杂就可以使用静态代码块来进行赋值操作例如下方的AGE属性,
     *  而且静态代码块和静态常量之间不需要关注先后顺序例如下方的AGE属性,但需要注意说的是静态常量静态变量不行,例如name属性就必须写在静态代码块上方才可使用。
     *  可以参考Integer类的IntegerCache,这里面就进行了比较复杂的判断。
     * 3.当调用当前类的静态方法时会先执行静态代码块
     * 4.当创建当前类的实例对象时,也会优先调用静态代码块-->普通代码块-->构造器
     *
     */
    static {
        /**
         * 在进行逻辑判断时,需要注意无论怎样进行逻辑判断,AGE静态常量必须赋值,
         * 如果下面的if分支判断没有写最后的else AGE=80,是编译不通过的
         */
        if (null == name){
            AGE = 0;
        }else if (name.equals("张三")){
            AGE = 20;
        }else if (name.equals("李四")){
            AGE = 50;
        }else {
            AGE = 80;
        }

        System.out.println("-----------");
    }

    /**
     * 被static和final同时修饰的成员属性,称之为静态常量,他也是类属性,非
     * 与静态变量相比,静态常量必须进行初始化赋值,并且具有不可变性。
     * 根据命名规范静态常量应全部大写
     */
    static final Integer AGE;

    static final Boolean OLD = AGE>70?true:false;

    /**
     * 静态方法,相比于普通方法,静态方法无需创建对象后调用,和静态变量一帮可被其他类直接进行访问,如果权限允许的话。
     * 在静态方法中无法直接调用非静态方法,如果需要调用非静态方法,只能先创建对象再进行访问,即使访问当前类的方法也是如此。
     * 在静态方法中无法使用普通的成员变量,必须使用静态变量或静态常量,因为普通的成员变量是属于类的,类的初始化要比对象早或者可能就没有当前类的对象。
     */
    static void getName(){
        System.out.println(field1);
        testMethod();
    }


    /**
     * 被static修饰的内部类,称之为静态内部类。相比于其他普通的内部类有如下异同
     * 1.静态内部类可以定义静态变量、静态常量、静态方法,普通内部类则不可以。普通内部类只可创建普通的成员变量和方法,和static有关的操作都不可使用。
     * 2.在其他对象中可以创建静态内部类的实例对象,例如TestStatic.ClassStatic tcs = new TestStatic.ClassStatic();
     *   而普通的内部类无法直接通过new指令创建,也就是其他对象无法直接访问某个对象的内部类对象。也就是说普通内部类直供当前对象使用,当前对象可以通过new的方式创建内部类对象,其他对象无法直接访问。
     * 3.内部类可以无条件访问外部类的属性及方法,即使属性和方法是private的。普通内部类对这个描述自然是没问题的,但如果是静态内部类就不行了,原则上静态内部类与外部类是平级的,就需要按照正常的访问关系进行访问
     *   也就是该new就new,没有不创建对象实例直接引用这一说,可以直接引用的也就是外部类的静态变量、静态常量和静态方法。外部类唯一可以对静态内部类产生影响的就是权限修饰符。
     * 总结:还是那句话静态内部类是属于类的,是可被共享的与普通类无异(当然具体还得看权限修饰符如何修饰的,如果是private的那就只能当前类是由),只是创建时需要带上当前类名。
     *      而普通内部类是属于对象的,只能当前对象使用,使用时需要new一个内部类的对象实例。
     */
    protected static class ClassStatic{
        static String code;

        static String getCode(){
            return code;
        }
    }

    public class ClassStaticWithin{

         String code;
         String getName(){
            return name;
        }
    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:07:02  更:2021-12-06 15:08:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:58:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码