标签:方式 缺点 [] 实例化 对象 成员 执行 ack 静态块
1、初始化块:
{
num2 = 74;
}
2、静态初始化块:
static {
num3 = 85;
}
程序运行时,当一个类被加载时,其静态初始化块最先被执行,其次是普通初始化块,最后是构造方法;
仍需注意的是,静态块只在类加载时执行一次,二普通初始化块和构造方法均会在对象创建时执行一次;
静态初始化块只能给静态变量赋值,而普通静态块也能够给静态变量赋值;
静态方法和非静态方法的区别总结如下:
1、静态方法属于类所有,类实例化前即可使用,用类名.方法名;
2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员;
3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存;
4、static内部只能出现static变量和其他static方法!而且static方法中还不能使用this等关键字,因为它是属于整个类;
5、静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁;
6、静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。
主要区别:静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。
package test; public class JC20180724 { static int num1; int num2; int num3; static{ num1 = 1; System.out.println("我是静态初始化块"); //静态块中不能初始化非静态变量 //num2 = 2; } { num2 = 2; System.out.println("我是普通初始化块"); //非静态块中能够初始化静态变量 //num1 = 1; } public JC20180724(){ num3 = 3; System.out.println("我是构造方法"); } public static void test1(){ num1 = 1; //不能给非静态变量赋值 //num2 = 2; } public void test2(){ num1 = 1; num2 = 2; } public static void main(String[] args){ //1、不加任何代码,不创建对象的话只执行静态初始化块 /** 输出 我是静态初始化块 */ //2、创建对象,依次执行静态初始化块、普通初始化块、构造方法 JC20180724 test1 = new JC20180724(); /** 输出 我是静态初始化块 我是普通初始化块 我是构造方法 */ //3、再创建一个对象 JC20180724 test2 = new JC20180724(); /** * 输出 我是静态初始化块 我是普通初始化块 我是构造方法 我是普通初始化块 我是构造方法
(创建了两个对象,只在第一次创建时输出了静态初始化块) */ } }
标签:方式 缺点 [] 实例化 对象 成员 执行 ack 静态块
原文地址:https://www.cnblogs.com/sangong/p/9385381.html