static 静态

简介: 1.方法与字段 表明它为这个类的成员共有。 类加载器对static 字段/函数 的处理过程见下。 按照静态字段或函数的出现顺序依次初始化。所以下面的代码会报错。 java不能有静态抽象方法。 抽象类可以有静态方法,但不能有抽象静态方法。 百度知道有这么一个回答: 抽象类一定有抽象方法吗?我来说说吧,静态是属于字节码的;一个抽象类可以没有抽象方法,只是为了不让别

1.方法与字段

表明它为这个类的成员共有。

微笑类加载器对static 字段/函数 的处理过程见下。
按照静态字段或函数的出现顺序依次初始化。所以下面的代码会报错。


微笑java不能有静态抽象方法。

抽象类可以有静态方法,但不能有抽象静态方法。

百度知道有这么一个回答:

抽象类一定有抽象方法吗?我来说说吧,静态是属于字节码的;一个抽象类可以没有抽象方法,只是为了不让别人来实例化它; 以上两点可以说明,静态方法只要有字节码存在就可以运行,所以抽象类中可以有静态方法。 我再多说一嘴,静态和抽象不能共存与方法上,因为静态属于字节码,不需要对象就可以运行,而抽象方法没有方法体,运行没有意义,所以不能共存。

2.语句块

static后直接跟大括号。当第一次用到这个类时,里面的语句得到执行。

微笑何为第一次?

答:使用 Class<?>[] java.lang.Class.getClasses()是不行的,即使用A.class.getClassLoader()不能执行到A类的static{}块。

需要使用Class<?> java.lang.Class.forName(String className) 才可以。JDK中该函数的源码见下:

 @CallerSensitive
    public static Class<?> forName(String className)
                throws ClassNotFoundException {
        return forName0(className, true,
                        ClassLoader.getClassLoader(Reflection.getCallerClass()));
    }
所以可以用这种方法避免延迟加载,例如程序启动时就初始化好DAO层的连接池等,避免业务第一次访问时才初始化,不让用户等。

微笑个人觉得这是构造函数需要做的事情。而现在变成了没名字的语句块,囧。

3.内部类

static只能用在内部类上,详见:内部类


目录
相关文章
|
6月前
|
C语言
学习static定义静态变量
学习static定义静态变量。
57 4
|
存储 Cloud Native 编译器
C++ static与类
C++ static与类
|
2月前
|
C语言
static有什么用途
static有什么用途
|
6月前
|
存储 C语言 C++
C/C++静态static属性/用法
C/C++静态static属性/用法
34 0
|
存储 C++
【C++类】 -- 类与static
【C++类】 -- 类与static
62 0
|
6月前
|
存储 编译器
static存储类
static存储类。
52 0
java一个文件只能有一个公有类的解决方法。 用公有静态内部类。 public static。 类似于C++的命令空间。
java一个文件只能有一个公有类的解决方法。 用公有静态内部类。 public static。 类似于C++的命令空间。
|
Java
深入理解static的作用以及被static修饰的变量、方法、块
static关键字有以下三种使用方法: 1.被static修饰的变量属于静态变量,类变量,可以通过类名,变量名直接引用,不需要进行new一个新类。 2.被static修饰的方法属于静态方法,类方法,可以通过类名,方法名直接引用,而不需要new出来一个对象 3.静态块,用于初始化一个类的时候进行一些操作,静态变量、静态方法和静态代码块都只执行一次,而且只在初始化的时候执行。
285 1
|
存储 C语言
static的作用
static的作用
159 0