三个案例,解读静态代码块和构造代码块
一、对静态代码块和非静态代码块进行简单的总结
1.静态代码块:
静态代码块是在当类被载入(内存)时最先被调用的,且之被执行一次,静态块常用来执行类属性的初始化。执行类的载入之前就会调用。
2.非静态代码块:
非静态代码块是在当类的对象被创建载入(内存)时最先被调用的,每创建一个对象,即每载入一个对象,非静态代码块都执行一次。执行类对象的载入之前就会调用。
3.静态方法、非静态方法:都是调用时,才执行的。静态方法属于类的,加载完类就可以调用静态方法;非静态方法是属于对象的,加载完对象就可以调用非静态方法。
二、相关示例演示
1 public class Cc { 2 public static void main(String[] args) { 3 test p=new test(); 4 } 5 } 6 7 class test { 8 test() { //在类对象创建的时候就开始执行。简称创建即执行。 9 System.out.println("这是构造函数"); 10 } 11 12 { //构造代码块,执行在构造函数之前,每当在创建类对象的时候都执行。 13 System.out.println("这是构造代码块"); 14 } 15 16 static { //静态代码块,最早执行,且值执行一次。 17 System.out.println("这是静态代码块"); 18 } 19 }
打印结果:
演示当被调用两次的时候,会发生什么打印结果。加深对静态代码块的理解。
1 public class Ccc { 2 public static void main(String[]args) 3 { 4 MyTest p=new MyTest(); 5 MyTest p2=new MyTest();//两次调用 6 } 7 } 8 class MyTest{ 9 10 MyTest(){ 11 System.out.println("这是构造函数"); 12 } 13 14 { 15 System.out.println("这是构造代码块"); 16 } 17 18 static{ 19 System.out.println("这是静态代码块"); 20 21 } 22 }
打印结果如下:
介绍一个含参的例子:
1 class Cccc { 2 public static void main(String[] args) { 3 new Person(77); 4 new Person(); 5 } 6 } 7 8 class Person { 9 10 Person() { 11 System.out.println("a"); 12 } 13 14 15 Person(int x) { //注意带参数了!! 16 System.out.println(x); 17 } 18 19 static { 20 System.out.println("b"); 21 } 22 23 { 24 System.out.println("c"); 25 } 26 }
打印结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程