首页 > 编程语言 >java入门基础 static final 关键字 修饰符 解释(通俗易懂)

java入门基础 static final 关键字 修饰符 解释(通俗易懂)

时间:2022-10-04 14:12:47浏览次数:46  
标签:java 变量 静态 修饰符 static C2 C1 final

  • finalstaticfinal static 区别解释?

    • static是用来修饰静态资源的(包括类、方法、变量等),final 是用来保证当前变量为常量,final static即保证为静态常量(意思就是不依赖于对象去调用,也不可以被改变)
    • final 可以用在方法参数声明中,保证引用变量不会被改变(只读)。
  • 这其中也需要看所修饰的为对象还是变量或者常量

首先解释一下static所修饰的变量、方法、类它们都是可以单独存在,静态类一定是静态内部类

  1. 静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static变量和方法(final static为除外,他本质也是常量)。

  2. 静态内部类使用场景一般是当外部类需要使用内部类,而内部类无需依赖于外部类资源,并且内部类可以单独创建的时候

可修饰的位置介绍:

  1. 静态内部类和静态变量可无限套娃:static 可修饰成员变量和方法和内部类。
class T1 {
    static int n;
    public static void t() { }
    static class T2{
        static int n;
        static class T3{
            static int n;
        }
    }

    public static void main(String[] args) {
        System.out.println(T1.n);
        System.out.println(T1.T2.n);
        System.out.println(T1.T2.T3.n);
    }
}

不可修饰的位置注意点:

  1. 内部类(非静态)不能有静态声明(成员变量、方法)原因:非静态内部类需要实例化外部类去调用该类,
class C1 {
    static int n;
    class C2 {
        static int n;   // 编译报错: Inner classes cannot have static declarations
    }
}
  1. 非静态变量、方法、类不可以被静态方法实例化引用

    由于 this(main函数)为静态方法,相当于一定存在,但是 类C2 非静态(说明他为类C1的成员),静态方法main() 一定存在,编译器也需要方法内的实例化对象或者说引用的对象一定存在,但是类C2存在的前提是类C1实例也存在(无法保证)。

    如下列代码中,可通过本类的非静态方法去实例化内部类调用方法,因为这样保证了C1类实例一定是存在的。

class C1 {
    
    class C2 {
        private int id;
        private String name;
        public void test2(){ }
    }
   
    public static void main(String[] args) {
        C2 c2 = new C2(); // 编译不通过, java: 无法从静态上下文中引用非静态 变量 this
        C1 c1 = new C1(); // 正确调用C2.test2()
        c1.test1();
    }

    public void test1() {
        C2 c2 = new C2();
        c2.test2();
    }
}

总结:无论是变量、方法、类。它们都可称为资源,所谓资源的静态和非静态。即静态资源就是可单独存在,非静态资源需要依赖于实例对象去调用,他不可单独存在。

标签:java,变量,静态,修饰符,static,C2,C1,final
From: https://www.cnblogs.com/malongfeistudy/p/16753686.html

相关文章

  • Java 属性文件乱码问题
    属性文件乱码通常是中文乱码,在英文下通常没有这个问题。 ​​​​ 如上图显示的,中文字符在属性文件中读取后会显示为乱码.问题和解决导致这个问题的主要原因是属性文件如......
  • Java 属性文件乱码问题
    属性文件乱码通常是中文乱码,在英文下通常没有这个问题。  如上图显示的,中文字符在属性文件中读取后会显示为乱码.问题和解决导致这个问题的主要原因是属性文件如果......
  • 013——static静态关键字
    1.static静态关键字1.1static是什么,static修饰成员变量的用法1.1.1static是什么?static是静态的意思,可以用来修饰成员变量、成员方法。static修饰成员变量之后称为......
  • 初学者了解的Java!
    简单看JavaJava的诞生和发展Java是由SunMicrosystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由JamesGosling和同事们共同研发......
  • Java方法(方法的调用,重载)
    方法调用:调用方法:对象名.方法名(实参列表)Java支持两种调用方法的方式,根据方法是否返回值来选择当方法返回一个值的时候,方法调用通常被当做一个值,例如intlarger......
  • java网络编程--5 URL 下载网络资源
    java网络编程--5URL下载网络资源1.8、URL统一资源定位符,定位互联网的某一个资源DNS域名解析www.baidu.com-->xxx.xxx.xxx.xxx//协议://IP地址:端口号/项目名/资源......
  • java----面向对象(1)概念,类与对象的创建,构造器,创建对象和内存分析,以及小总结
    面向对象编程1.java的核心思想就是OOP面向过程思想:步骤清晰,第一步做什么,第二步做什么,适合处理一些较为简单的问题2.面向对象思想:分类的斯文模式,思考问题首先会解决问题......
  • 多线程详解——Java
    多线程详解——Java.Thread1.1多任务​ 在计算中,多任务是一种多个任务(也称之为进程)共享处理资源(如CPU)的方法。在多任务操作系统上,例如WindowsXP,您可以同时运行多个应用......
  • 0579-5.15.1-Java 应用程序中修改Kerberos ticket_lifetime参数无效异常分析
    作者:辉少1文档编写目的在Kerberos环境中,我们的应用程序通过Java代码来提交任务需要先进行Kerberos凭证的初始化然后进行应用程序的提交,本文档主要讲述Java应用程序中读取krb......
  • 0578-5.15.1-Kerberos环境下Java应用程序认证超时异常分析
    作者:谢敏灵/辉少1文档编写目的在Kerberos环境中,我们的应用程序通过Java代码来提交任务需要先进行Kerberos凭证的初始化然后进行应用程序的提交,本文档主要讲述Java应用程序长......