关于代码块的一些疑问
程序员文章站
2022-07-11 10:41:05
...
1.java 中静态代码块和非静态代码块。
静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。
运行结果:
父类的非静态代码块在执行a=10
!!!!!!!!!!!!!!!!!!!!!
父类的非静态代码块在执行a=2
a在父类带参构造方法中的值:10
2
2
父类无参构造方法在执行a=2
所以:
静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。
且执行 顺序为静态代码块------非静态代码块----构造函数。
静态代码块 与 静态方法:
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 作用:静态代码块可用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.
3. 应用
app端变更服务器地址
结果:
DD@4fb529d6
http://192.168.1.100:8080/Xxxx/Xxx/
DD@4fb529d6
http://112.124.22.213/xxxx/xxx/
说明,一个类的静态代码块在内存中,只有一个区域,改变代码块中的内容,不过是改变其中某项的索引指向,不会重新容间资源
类的内存空间中的地址是一样的
4. java中其他形式的代码块
一、普通代码块
直接在一个方法中出现的{}就称为普通代码块,例子程序如下:
二、构造代码块
直接在类中定义的没有加static关键字的代码块{}称为构造代码块,例子程序如下:
三:同步代码块
同步代码块主要出现在多线程中。
静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。
public class Test { public static int a = 0; static { a = 10; System.out.println("父类的非静态代码块在执行a=" + a); } { a = 2; System.out.println("父类的非静态代码块在执行a=" + a); } public Test () { this("a在父类带参构造方法中的值:" + Test.a); // 调用另外一个构造方法 System.out.println(a); System.out.println("父类无参构造方法在执行a=" + a); } public Test (String n) { System.out.println(n); System.out.println(a); } public static void main(String[] args) { Test tsc = null; System.out.println("!!!!!!!!!!!!!!!!!!!!!"); tsc = new Test (); } }
运行结果:
父类的非静态代码块在执行a=10
!!!!!!!!!!!!!!!!!!!!!
父类的非静态代码块在执行a=2
a在父类带参构造方法中的值:10
2
2
父类无参构造方法在执行a=2
所以:
静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。
且执行 顺序为静态代码块------非静态代码块----构造函数。
静态代码块 与 静态方法:
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 作用:静态代码块可用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.
3. 应用
app端变更服务器地址
public class DD { private static String HOST = ""; public static int IP_TYPE = 0; // 服务器类型 0, 1 static { getIP(); } public static void setType(int i) { IP_TYPE = i; } public static String getIP() { switch (IP_TYPE) { case 0: HOST = "http://192.168.1.100:8080/xxxx/xxx/"; break; case 1: HOST = "http://112.124.22.213/xxxx/xxx/"; break; default: break; } return HOST; } } 测试函数 public class TEST{ public static void main(String[] args) { DD d1 = new DD(); System.out.println(d1.toString()); System.out.println(d1.getIP()); d1.setType(1); System.out.println(d1.toString()); System.out.println(d1.getIP()); } }
结果:
DD@4fb529d6
http://192.168.1.100:8080/Xxxx/Xxx/
DD@4fb529d6
http://112.124.22.213/xxxx/xxx/
说明,一个类的静态代码块在内存中,只有一个区域,改变代码块中的内容,不过是改变其中某项的索引指向,不会重新容间资源
类的内存空间中的地址是一样的
4. java中其他形式的代码块
一、普通代码块
直接在一个方法中出现的{}就称为普通代码块,例子程序如下:
public class CodeDemo01{ public static void main(String[] args){ //普通代码块 { int x = 10; System.out.println("x=" + x); } int x = 100; System.out.println("x=" + x); } }
二、构造代码块
直接在类中定义的没有加static关键字的代码块{}称为构造代码块,例子程序如下:
public class CodeDemo02{ public CodeDemo02(){ System.out.println("========这是构造方法========="); } //这是构造代码块,而且在new对象时,构造代码块优先构造方法执行 { System.out.println("=========这是构造块!========="); } public static void main(String[] args){ new CodeDemo02(); new CodeDemo02(); }
三:同步代码块
同步代码块主要出现在多线程中。
上一篇: seo是什么意思
下一篇: 寻找DevExpress破解经历之旅