static 之 静态初始化块
来源:互联网 发布:a星算法的缺点 编辑:程序博客网 时间:2024/05/29 21:18
- 初始化块
- 初始化块用法
- 初始化块被调用的条件
- 初始化块被调用次数
- 初始化块作用
- 总结
- 静态初始化块
- 静态初始化块用法
- 静态初始化块被调用的条件
- 静态初始化块作用
- 总结
- 初始化块
初始化块
在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。
1.初始化块用法:
Java 中可以通过初始化块进行数据赋值。如:
public class Test { public static void main(String[] args) { String name;//定义成员变量 { name = "test";//通过初始化块为变量赋值 } }}
2.初始化块被调用的条件
只有在创建类的实例时才会调用初始化块,当没有实例化类时,不会执行初始化块。如:
1. 没有创建类的实例,运行main函数,不会触发初始化块
代码块
package com.yubai.javatest.test;public class Test { public static String str; { System.out.println("初始化1"); } { System.out.println("初始化2"); } public static void main(String[] args) { System.out.println(",...."); }}
运行结果
2. 创建类的实例,运行main函数,会按着顺序依次触发初始化块
代码块
package com.yubai.javatest.test;public class Test { public static String str; { System.out.println("初始化1"); } { System.out.println("初始化2"); } public static void main(String[] args) { Test t = new Test(); System.out.println(",...."); }}
运行结果
3. 创建类的实例,运行main函数,会按着顺序依次触发初始化块,构造函数
代码块
package com.yubai.javatest.test;public class Test { public static String str; { System.out.println("初始化1"); } { System.out.println("初始化2"); } public Test() { System.out.println("构造函数"); } public static void main(String[] args) { Test t = new Test(); System.out.println(",...."); }}
运行结果
4. 运行main函数,调用方法,没有创建类的实例,不会触发构造函数和初始化块
代码块
package com.yubai.javatest.test;public class Test { public static String str; { System.out.println("初始化1"); } { System.out.println("初始化2"); } static{ str = "aaa"; System.out.println("静态初始化2"); } public Test() { System.out.println("构造函数"); } public static void test1(){ System.out.println("测试初始化块被调用的次数,和静态初始化块被调用的次数 --- 调用test1"); } public static void test2(){ System.out.println("测试初始化块被调用的次数,和静态初始化块被调用的次数 ------ 调用test2"); } public static void main(String[] args) { //Test t = new Test(); test1(); test2(); }}
运行结果
3. 初始化块被调用次数
随着创建类的对象的而被调用。就是说,创建几次对象,初始化块和构造函数就被调用几次
代码块1
package com.yubai.javatest.test;public class Test { public static String str; { System.out.println("初始化1"); } { System.out.println("初始化2"); } static { str = "aaa"; System.out.println("静态初始化2"); } public Test() { System.out.println("构造函数"); } public static void test1() { System.out.println("测试初始化块被调用的次数,和静态初始化块被调用的次数 --- 调用test1"); } public static void test2() { System.out.println("测试初始化块被调用的次数,和静态初始化块被调用的次数 ------ 调用test2"); } public static void main(String[] args) { Test t1 = new Test(); t1.test1(); Test t2 = new Test(); t2.test1(); }}
运行结果
代码块2
package com.yubai.javatest.test;public class Test { public static String str; { System.out.println("初始化1"); } { System.out.println("初始化2"); } static { str = "aaa"; System.out.println("静态初始化2"); } public Test() { System.out.println("构造函数"); } public static void test1() { System.out.println("测试初始化块被调用的次数,和静态初始化块被调用的次数 --- 调用test1"); } public static void test2() { System.out.println("测试初始化块被调用的次数,和静态初始化块被调用的次数 ------ 调用test2"); } public static void main(String[] args) { Test t1 = new Test(); t1.test1(); t1.test1(); }}
运行结果
4. 初始化块作用:
当需要初始化成员变量的值是一个很复杂的逻辑时,通常选用初始化块
一般很少使用初始化块
总结:
- 只要没有创建类的实例,则不会触发初始化块和构造函数
- 构造函数和初始化块的顺序:按代码的顺序执行初始化块,再执行构造函数
- 初始化块和构造函数调用次数和创建对象的次数一致
静态初始化块
如果使用 static 修饰初始化块,就称为静态初始化块。
1.静态初始化块用法:
static{
代码块
}
2.静态初始化块被调用的条件
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
1. 静态初始化块被执行条件示例
代码块:
package com.yubai.javatest.test;public class Test { public static String str; { System.out.println("初始化1"); } { System.out.println("初始化2"); } static{ str = "aaa"; System.out.println("静态初始化2"); } public static void main(String[] args) { }}
运行结果:
运行结果解释:
当运行此类时,运行结果只会输出静态初始化2,因为静态初始化块只在类加载时执行。
即使main函数中没有写任何代码也不会因此不执行静态初始化块,因为静态初始化块的执行只与类是否加载有关。
当类被加载时,就会立马执行静态初始化块,然后开始执行main函数中的代码。所以当我再main函数中添加打印代码时,输出结果先输出静态初始化2,然后输出打印信息。如图:
2.静态初始化只会执行一次
代码块
package com.yubai.javatest.test;public class Test { public static String str; { System.out.println("初始化1"); } { System.out.println("初始化2"); } static { str = "aaa"; System.out.println("静态初始化2"); } public Test() { System.out.println("构造函数"); } public static void test1() { System.out.println("测试初始化块被调用的次数,和静态初始化块被调用的次数 --- 调用test1"); } public static void test2() { System.out.println("测试初始化块被调用的次数,和静态初始化块被调用的次数 ------ 调用test2"); } public static void main(String[] args) { test1(); test2(); }}
运行结果
3. 静态初始化块作用:
当我们需要某个对象只能执行一次时,就会用到静态初始化块的概念。
比如:向数据库添加对象,删除对象,修改对象,查询对象。每个操作不需要每次都要连接数据库。
我们可以在静态初始化块中连接好数据库,之后的每个操作就不需要再连接,直接可以用连接好的数据库操作对象
举例:当我们用电脑查询网页,还是打游戏,下载软件,还是敲代码等等每个操作,都需要开机。如果每次操作都要执行开机这个步骤,就显得很麻烦。所以我们的解决办法是使电脑一直处于开机状态,直到晚上睡觉前再关闭电脑。
应用在实例中,静态初始化块负责开机,只需要开一次,之后的每个操作就不需要再开机。睡觉前关闭电脑。
应用实例:连接数据库
代码块
public class MongoDBTest { public static final String HOST = "127.0.0.1"; private static final int PORT = 27017; private static final String DB_NAME = "testDB"; private static Mongo mongo; private static DB db; static{ //连接数据库仓库 mongo = new Mongo(HOST,PORT); //通过数据库仓库连接数据库仓库中的数据库:testDB db = mongo.getDB(DB_NAME); } ...
4.总结
1.静态初始化块只有在类加载时执行,与main函数中的代码逻辑无关。
2.静态初始化只会执行一次。
- static 之 静态初始化块
- static静态初始化块
- static静态块初始化
- static变量初始化 静态块
- Java 中的 static 使用之静态初始化块
- Java 中的 static 使用之静态初始化块
- Java 中的 static 使用之静态初始化块
- Java 中的static 使用之静态初始化块
- Java 中的 static 使用之静态初始化块
- Java 中的 static 使用之静态初始化块
- Java 中的 static 使用之静态初始化块
- Java 中的 static 使用之静态初始化块
- Java 中的 static 使用之静态变量,静态方法和静态初始化块
- Java 中的 static 使用之静态变量·静态方法·静态初始化块
- Java中的static使用之静态变量、静态方法和静态初始化块
- java中的静态属性初始化--static块
- Java 中的 static 使用之静态变量以及静态初始化块
- JAVA中的static -静态变量-静态方法-静态初始化块
- 腾讯云 centos7 命令行中文乱码
- 你可能还不知道的Linux 系统七件事
- DedeCMS中channelartlist自增参数global.itemindex
- java 获取某年某月星期几有哪几天
- 数据结构探险------队列篇
- static 之 静态初始化块
- springboot系列文章(三)-创建第一个controller
- 免费拿走我的代码可以,但请对使用我的时间付费
- java用制作小计算器
- BRVAH点击某一点实现单选
- 3208: 花神的秒题计划Ⅰ
- eclipse中获得程序执行的所用时间
- Unit3d开发 (二十一) 更改Apk的smali 排查Java层问题
- H.264与H.265的主要差异