静态代码初始化详解
2017-12-29 11:31
162 查看
大家都知道在JavaSE 中程序的run 都是在JVM中进行的,刨除反射,几乎所有的方法的执行都需要new 一下
也就是new 一个对象。“你有对象吗?new 一个啊”。
new 的过程就是在堆中开辟出一个空间。也就是初始化的过程。
非静态成员的初始化这里就不提了,这里说的是静态变量的初始化的过程。
static关键字大家都不陌生,最熟悉的莫过于static main方法了。被static修饰的静态数据,无论创建多少个对象,都分配一块储存区域。同时static不能作用于局部变量,只能作用于域中。
如果一个域是静态的基本类型域,并且没有对他进行初始化,那么就会获得基本类型的标准初始值,int =0 ,Boolean = false 而object类型的则是null 等等。
通过大家的日常不难发现静态对象只在需要的时候初始化,而且只会被初始化一次。而且初始化的顺序是先静态后非静态的。下面通过代码来看一下显示的静态初始化的过程。
public class StaticDemo {
public static void main(String[] args) {
Cups.a.hello(); //或者注掉
}
static Cups cu = new Cups(); //或者注掉
}
class Cup
{
public Cup(int a)
{
System.out.println("Cup"+a);
}
void hello ()
{
System.out.println("hello world");
}
}
class Cups
{
static Cup a ;
static Cup b ;
static
{
a = new Cup(10);
b = new Cup(30);
}
}通过这个代码运行发现,我们不论是new 一下还是调用静态方法都会对Cups 这个类中的a , b进行一次初始化。同样的我们不论new 几次,静态化动作都只执行一次。
我们不可否认 的是:静态方法 和静态变量不论在哪里 用起来都是非常的快,非常的方便。但是一个代码中如果出现大量的static 的话 会另整个代码“垮掉”。用“垮掉”来说并不为过。因此在用静态方法的时候一定要非常的小心。
也就是new 一个对象。“你有对象吗?new 一个啊”。
new 的过程就是在堆中开辟出一个空间。也就是初始化的过程。
非静态成员的初始化这里就不提了,这里说的是静态变量的初始化的过程。
static关键字大家都不陌生,最熟悉的莫过于static main方法了。被static修饰的静态数据,无论创建多少个对象,都分配一块储存区域。同时static不能作用于局部变量,只能作用于域中。
如果一个域是静态的基本类型域,并且没有对他进行初始化,那么就会获得基本类型的标准初始值,int =0 ,Boolean = false 而object类型的则是null 等等。
通过大家的日常不难发现静态对象只在需要的时候初始化,而且只会被初始化一次。而且初始化的顺序是先静态后非静态的。下面通过代码来看一下显示的静态初始化的过程。
public class StaticDemo {
public static void main(String[] args) {
Cups.a.hello(); //或者注掉
}
static Cups cu = new Cups(); //或者注掉
}
class Cup
{
public Cup(int a)
{
System.out.println("Cup"+a);
}
void hello ()
{
System.out.println("hello world");
}
}
class Cups
{
static Cup a ;
static Cup b ;
static
{
a = new Cup(10);
b = new Cup(30);
}
}通过这个代码运行发现,我们不论是new 一下还是调用静态方法都会对Cups 这个类中的a , b进行一次初始化。同样的我们不论new 几次,静态化动作都只执行一次。
我们不可否认 的是:静态方法 和静态变量不论在哪里 用起来都是非常的快,非常的方便。但是一个代码中如果出现大量的static 的话 会另整个代码“垮掉”。用“垮掉”来说并不为过。因此在用静态方法的时候一定要非常的小心。
相关文章推荐
- C++ 静态成员的类内初始化详解及实例代码
- JAVA面向对象知识点总结(3)—静态static、主函数详解、静态代码快、对象初始化过程
- java静态代码快详解和初始化顺序
- 静态代码块(static{})详解
- Angular如何在应用初始化时运行代码详解
- C++ 初始化列表详解及实例代码
- C/C++堆区、栈区、常量区、静态数据区、代码区详解
- java中类的静态代码块、构造代码块、构造方法、静态成员的初始化顺序详解
- struts2配置静态资源代码详解
- java对象初始化代码详解
- 详解静态初始化的相依性问题
- Java中初始化块详解及实例代码
- Spring静态代理和动态代理代码详解
- ORB-SLAM代码详解之SLAM系统初始化
- 详解SpringBoot程序启动时执行初始化代码
- java中的静态变量、静态方法与静态代码块详解与初始化顺序
- VINS理论与代码详解4——初始化
- Understand:高效代码静态分析神器详解(一)
- AngularJS初始化静态模板详解
- java中类的静态代码块、构造代码块、构造方法、静态成员的初始化顺序详解