zoukankan      html  css  js  c++  java
  • java--整理下关于static关键字的知识

    如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于所有的实例域却都有自己的一份拷贝。--《java核心技术》

    使用static的两种情形:1、只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本不创建对象。2、希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用这个方法。--《java编程思想》

    static几个用到的地方:

    静态变量:这个不解释。

    静态常量:避免每个对象都拷贝一份常量。(这边提醒下自己加了final才是声明常量),通过Math.PI调用

    public class Math
    {
      public static final double PI=3.1415926;      
    }

    静态方法:比如Math类中的 Math.pow(x,a),在运算时,不使用任何Math对象,换句话说,就是没有隐式参数(提醒下自己隐式参数指this参数);可以认为静态方法是没有this参数的方法,因此静态方法不能操作对象,所以不能在静态方法中访问实例域,但是,静态方法可以访问自身类中的静态域。

    工厂方法:这个来自《java核心技术》,我不太了解NumberFormat,我觉得我看懂了,但我不敢概括,只能截图放着了。

    在《java 8 编程入门官方教程》中还看到了 static 代码块:

    具体:有时类在创建对象之前,需要进行一些初始化。例如,可能需要建立与远程站点的连接。也可能需要在使用类的任何static方法之前,初始化某些static变量。为了处理这些情况,java允许声明static代码块。static代码块在类第一次被加载时执行,因此是在使用类之前执行的。可以参考代码

    package test2;
    
    class StaticBlock {
        static double rootOf2;
        static double rootOf3;
        static {
            System.out.println("Inside static block.");
            rootOf2=Math.sqrt(2.0);
            rootOf3=Math.sqrt(3.0);
        }
        StaticBlock(String msg) {
            System.out.println(msg);
        }
    }
    class SDemo3 {
        public static void main(String args[]) {
            StaticBlock ob = new StaticBlock("Inside Constructor");
            System.out.println("Square root of 2 is "+StaticBlock.rootOf2);
            System.out.println("Square root of 3 is "+StaticBlock.rootOf3);
        }
    }

    为什么main方法要加static:main方法不对任何对象进行操作,事实上,再启动程序时没有任何一个对象。静态的main方法将执行并创建程序所需有的对象。--《java核心技术》

    另外我还想提醒自己的是:

    (17)尽量避免随意使用静态变量

    要知道,当某个对象被定义为static的变量所引用,那么gc通常是不会回收这个对象所占有的堆内存的,如:

    public class A
    {
        private static B b = new B();  
    }

    此时静态变量b的生命周期与A类相同,如果A类不被卸载,那么引用B指向的B对象会常驻内存,直到程序终止--来自http://www.cnblogs.com/xrq730/p/4865416.html

  • 相关阅读:
    WinSCP 与 Putty 中文显示乱码解决方法
    centos 6.2上oracle 11g的远程安装
    CentOs 6.3_64静默安装oracle11g_r2
    IP地址修改后ORACLE不能使用问题
    linux查看本机IP、gateway、dns
    linux启动SSH及开机自动启动
    linux下如何从自动获取ip转到手动配置ip
    Linux系统(CentOS 6.4)的NTFS驱动NTFS3g的安装和配置
    正则表达式——去除文本中的非汉字(VB2005)
    遍历排列的实现——VB2005
  • 原文地址:https://www.cnblogs.com/wkmocr/p/7517921.html
Copyright © 2011-2022 走看看