{}
" 括起来的一段代码{}
括起来的代码块叫做构造函代码块。static
声明的代码块package com.study.Java面向对象; import java.security.CodeSource; /** * 代码块 * @Author:qzk * @Date: 2021/11/15 7:33 下午 */ public class CodeBlockDemo { public void test(){ System.out.println("test"); { System.out.println("我应该是什么分类"); } } public static void main(String[] args) { CodeBlockDemo codeBlockDemo = new CodeBlockDemo(); codeBlockDemo.test(); { System.out.println("main"); } } } // test // 我应该是什么分类 // main
/**反编译的结果*/ package com.study.Java; public class CodeBlockDemo { public void test() { System.out.println("test"); System.out.println("); } public static void main(String[] args) { CodeBlockDemo codeBlockDemo = new CodeBlockDemo(); codeBlockDemo.test(); System.out.println("main"); } }
package com.study.Java面向对象; import java.security.CodeSource; /** * 代码块 * @Author:qzk * @Date: 2021/11/15 7:33 下午 */ public class CodeBlockDemo { { System.out.println("构造代码块"); } public void test(){ System.out.println("test"); { System.out.println("我应该是什么分类"); } } public static void main(String[] args) { CodeBlockDemo codeBlockDemo = new CodeBlockDemo(); codeBlockDemo.test(); { System.out.println("main"); } } }
反编译的代码如下:
package com.study.Java面向对象; import java.security.CodeSource; /** * 代码块 : * 构造代码块---> 定义在类中的使用{} 括起来的代码叫做构造代码块 * ---> 注意: 每次代码运行的时候都会将构造代码中的代码添加到构造方法的前面。 * @Author:qzk * @Date: 2021/11/15 7:33 下午 */ public class CodeBlockDemo { { System.out.println("构造代码块"); } /**无参构造*/ public CodeBlockDemo(){ System.out.println("构造方法"); } public void test(){ System.out.println("test"); { System.out.println("我应该是什么分类"); } } public static void main(String[] args) { CodeBlockDemo codeBlockDemo = new CodeBlockDemo(); codeBlockDemo.test(); { System.out.println("main"); } } } // 构造代码块 // 构造方法 // test // 我应该是什么分类 // main
package com.study.Java面向对象; import java.security.CodeSource; /** * 代码块 * @Author:qzk * @Date: 2021/11/15 7:33 下午 */ public class CodeBlockDemo { int a; char b; { System.out.println("构造代码块"); } /**无参构造*/ public CodeBlockDemo(){ System.out.println(a); System.out.println(b); System.out.println("构造方法"); } /**有参构造*/ public CodeBlockDemo(int a) { this.a = a; System.out.println(this.a); } /**无参构造*/ public CodeBlockDemo(int a,char b){ this(a); this.b = b; } public void test(){ System.out.println("test"); { System.out.println("我应该是什么分类"); } } public static void main(String[] args) { CodeBlockDemo codeBlockDemo = new CodeBlockDemo(); codeBlockDemo.test(); { System.out.println("main"); } } }
反编译结果
package com.study.Java面向对象; import java.security.CodeSource; /** * 代码块 * @Author:qzk * @Date: 2021/11/15 7:33 下午 */ public class CodeBlockDemo { int a; char b; { System.out.println("构造代码块"); } /**无参构造*/ public CodeBlockDemo(){ System.out.println(a); System.out.println(b); System.out.println("构造方法"); } /**有参构造*/ public CodeBlockDemo(int a) { this.a = a; System.out.println(this.a); } public CodeBlockDemo(int a,char b){ this.a = a; this.b = b; } public void test(){ System.out.println("test"); { System.out.println("我应该是什么分类"); } } public static void main(String[] args) { CodeBlockDemo codeBlockDemo = new CodeBlockDemo(); codeBlockDemo.test(); { System.out.println("main"); } } }
反编译结果
总结:构造代码块中的代码会添加到每一个构造方法中, 当使用this()
调用的时候, 不会添加
使用static
声明的, 即 static{}
括起来的代码叫做静态代码块,在程序载入的时候先执行。
tips:
package com.study.Java面向对象; import java.security.CodeSource; /** * 代码块 * @Author:qzk * @Date: 2021/11/15 7:33 下午 */ public class CodeBlockDemo { int a; char b; { System.out.println("构造代码块"); } static { System.out.println("静态代码块"); } /**无参构造*/ public CodeBlockDemo(){ System.out.println(a); System.out.println(b); System.out.println("构造方法"); } /**有参构造*/ public CodeBlockDemo(int a) { this.a = a; System.out.println(this.a); } public CodeBlockDemo(int a,char b){ this.b = b; this.a = a; } public void test(){ System.out.println("test"); { System.out.println("我应该是什么分类"); } } public static void main(String[] args) { CodeBlockDemo codeBlockDemo = new CodeBlockDemo(); codeBlockDemo.test(); { System.out.println("main"); } } }
反编译结果
在多线程的时候使用, 用来给共享空间加锁的操作。
静态代码块 --> 构造代码块(创建对象的时候使用) --> 普通代码块
Package
封包package
会定义在第一行
package com.jsxniu.entity
com.qzk
和 com.qzk.car
这两个包没有包含关系,是两个完全独立的包。
java.lang
-- 核心类包
Java
语言的核心类,如 String
、Math
、Integer
、·System
和 Thread
,提供常用功能。lang
包不需要手动导入, 自动加载, 其他包都需要手动导入java.awt
abstract window toolkits
)的多个类,这些类被用来构建和管理应用程序的图java.net
-- 网络包
java.io
-- 输入输出流包
java.util
-- 工具类包
Import
-- 导包操作import
?如果不使用 import
, 我们如果用到其他包的类时,只能这么写 java.util.Date date = new java.util.Date()
这样的话,代码量非常大,不利于编写和维护。
通过 import
可以导入其他包下面的类, 从而可以再本类中直接通过类名来调用。
当需要引入 非 lang
import
import java.util.Date; import java.util.*; // 导入该包下面的所有类, 会降低编译速度, 但不会降低运行速度。
java
会默认导入 java.lang
包下的所有的类,因此这些类我们可以直接使用。报名+类名
来显示调用相关类
java.util.Date date = new java.util.Date()
java.sql.Date dateSql = new java.sql.Date()
package com.study.qzk.study; import java.util.Date; // 这里使用了静态导包 import static java.lang.Math.*; /** * @Author:qzk * @Date: 2021/11/23 8:17 下午 */ public class ImportDemo { public static void main(String[] args) { Date date = new Date(); System.out.println(Math.sqrt(2)); System.out.println(Math.abs(-1)); // 因为使用了静态导包, 所以可以直接使用导入的该包下的类的所有方法。 System.out.println(sqrt(2)); System.out.println(abs(-1)); } } // 注意: 使用 静态导包的时候, 如果调用的方法在当前类中有同名的方法,会优先加载当前类的方法。