zoukankan      html  css  js  c++  java
  • java static

    JAVA.static

    static是静态修饰符,主要作用在于创建独立于具体对象的域变量或者方法。

    出发点:当我们通过new关键字去创建对象的时候数据的存储空间才会被分配,类中的成员方法才能被对象所使用。程序中任何变量或代码,都是在编译时,有系统自动分配内存来存储,静态的意义时在编译后分配的内存会一直存在直至程序结束释放内存空间。

    静态变量、方法##

    被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。

    PS:

    1.在静态方法中没有this关键字因为静态是随着类的加载而加载,而this是随着对象的创建而存在的。静态比对象优先存在。

    2.静态可以访问静态的,但是静态不能访问非静态的。

    3.非静态的可以去访问静态的。

    构造块、静态块##

    静态块、方法、变量在main前执行

    静态块>main()>构造块>构造方法

    public class Study_static {
        public static char text = 'a';  //静态对象
        
        public Study_static(){         //构造函数
            System.out.println('c');
        }
        
        {                              //构造块
            System.out.println('b');
        }
        
        static{                         //静态块
            System.out.println(text);
        }
        public static void main(String[] args){
            Study_static a = new Study_static();
            
        }
    }
    //out:a->b->c
    

    先执行静态块,再tudy_static a = new Study_static();该语句创建对象,则又会调用构造块,输出构造块,再执行构造函数。

    静态类

    非静态内部类能够访问外部类的静态和非静态成员。静态类不能访问外部类的非静态成员。他只能访问外部类的静态成员。

    一个非静态内部类不能脱离外部类实体被创建,一个非静态内部类可以访问外部类的数据和方法,因为他就在外部类里面。

    class OuterClass{
      private static String msg = "GeeksForGeeks";
      // 静态内部类
      public static class NestedStaticClass{
        // 静态内部类只能访问外部类的静态成员
        public void printMessage() {
         // 试着将msg改成非静态的,这将导致编译错误 
         System.out.println("Message from nested static class: " + msg); 
        }
      }
      // 非静态内部类
      public class InnerClass{
        // 不管是静态方法还是非静态方法都可以在非静态内部类中访问
        public void display(){
         System.out.println("Message from non-static nested class: "+ msg);
        }
      }
    } 
    class Main
    {
      // 怎么创建静态内部类和非静态内部类的实例
      public static void main(String args[]){
        // 创建静态内部类的实例
        OuterClass.NestedStaticClass printer = new OuterClass.NestedStaticClass();
        // 创建静态内部类的非静态方法
        printer.printMessage();  
    
        // 为了创建非静态内部类,我们需要外部类的实例
        OuterClass outer = new OuterClass();    
        OuterClass.InnerClass inner = outer.new InnerClass();//这样new出来的
        // 调用非静态内部类的非静态方法
        inner.display();
        // 我们也可以结合以上步骤,一步创建的内部类实例
        OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();
        // 同样我们现在可以调用内部类方法
        innerObject.display();
      }
    }
    
  • 相关阅读:
    技术博客开博,谢谢大家
    数据库自动备份,crontab定时任务
    服务器端口对外开放(包括,mysql,django)
    记 第一次linux下简易部署 django uwsgi nginx
    Oracle Undo表空间使用情况分析
    Oracle自动启动脚本配置
    Oracle 12cR2 RAC节点查询GV$视图报错ORA-12805
    Oracle 12cR2 RAC集群安装指南
    基于Java SSM框架和layui构建的博客、论坛、新闻、文章随笔系统(包含前后台)
    SSM实现java开发电子手机商城在线商城系统源码 MySQL数据库
  • 原文地址:https://www.cnblogs.com/tillnight1996/p/10662187.html
Copyright © 2011-2022 走看看