java 静态

主要思想
主要为了标记下java关于静态变量,静态方法,静态块,静态嵌套类,内部类之间的关系

参考

Java 静态类、静态方法和静态变量
http://hongyubox.com/2016/08/05/Java%20%E9%9D%99%E6%80%81%E7%B1%BB%E3%80%81%E9%9D%99%E6%80%81%E6%96%B9%E6%B3%95%E5%92%8C%E9%9D%99%E6%80%81%E5%8F%98%E9%87%8F/
Java 静态变量、方法、快,(非)静态内部类 https://www.jianshu.com/p/8cb87b7177ef
为什么Java内部类要设计成静态和非静态两种? https://www.zhihu.com/question/28197253

静态对象

  1. 全局唯一的,一改全改,保持数据的唯一性;
  2. 引用时只需 类名.静态变量 或 类名.静态方法 即可,无需get,set;
  3. 与final联合使用,可以视为 全局常量,即一旦赋值不能更改;

静态变量

  1. 属于类而非对象或实例;

静态方法

  1. 只能访问或调用其他静态变量或方法;
  2. 不能引入this,super(this);

静态块

  1. 仅在类被加载时执行一次;
  2. 不能访问非静态变量,方法;

静态嵌套类

  1. 在类的内部使用static修饰一个类;
  2. 只能访问外部类的静态方法或变量;
  3. 可以直接创建,无需先创建外部类对象;
  4. 我是静态内部类,只不过是想借你的外壳用一下。本身来说,我和你没有什么“强依赖”上的关系。没有你,我也可以创建实例。那么,在设计内部类的时候我们就可以做出权衡:如果我内部类与你外部类关系不紧密,耦合程度不高,不需要访问外部类的所有属性或方法,那么我就设计成静态内部类。而且,由于静态内部类与外部类并不会保存相互之间的引用,因此在一定程度上,还会节省那么一点内存资源,何乐而不为呢;

内部类

  1. 嵌套在类的内部;
  2. 可以访问外部类的变量和方法和外部类中的其他内部类;
  3. 创建对象时必须依赖于外部类的创建;
  4. 如果设计类B的目的只是为了给类A使用,就可以将B设定为内部类,没必要将B设置成单独的java文件,防止与其他类产生依赖关系;
  5. 不能含有静态内容,inner classes cannot have static declaration;
public class Outter {
    private int variable0 = 0;
    private static int  variable1 = 1;
    private final static int variable2 = 3;

    static {
        variable1 = 4;
    }

    public void solution1(){
        System.out.println(variable0 + " " + variable1 + " " + variable2);
    }

    public static void solution2(){
        System.out.println(variable1 + " " + variable2);
    }

    public void solution5(){
        InnerTwo two = new InnerTwo();
        two.solution4();
    }
    class InnerOne{
        private int variable3 = 5;

        public void solution3(){
            solution1();
            solution2();
            System.out.println(variable0 + " " + variable1 + " " + variable2 + " " + variable3);
        }
    }

    class InnerTwo{
        InnerOne one = new InnerOne();
        public void solution4(){
            one.solution3();
        }
    }

    static class InnerThree{
        private int variable4 = 6;
        private static int variable5 = 7;
        private final static int variable6 = 8;

        public void solution5(){
            solution2();
            System.out.println(variable1 + " " + variable2 + " " + variable4 + " " + variable5 + " " + variable6);
        }

        public static void solution6(){
            solution2();
            System.out.println(variable1 + " " + variable2 + " " + variable5 + " " + variable6);
        }
    }

    public static void main(String[] args){
        System.out.println(Outter.variable1 + " " + Outter.variable2 + " " + InnerThree.variable5 + " " + InnerThree.variable6);
        Outter.solution2();
        Outter.InnerThree.solution6();
        Outter.InnerThree three = new Outter.InnerThree();
        System.out.println(three.variable4);
        three.solution5();

        Outter out = new Outter();
        System.out.println(out.variable0);
        out.solution1();
        Outter.InnerOne one = out.new InnerOne();
        System.out.println(one.variable3);
        one.solution3();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值