学习笔记,仅供参考


面向对象

代码块

  • 代码块概述

    • 在Java中,使用{}括起来的代码被称为代码块。
  • 代码块分类
    • 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程)。
  • 常见代码块的应用
    • 局部代码块

      • 在方法中出现;限定变量生命周期,及早释放内存
    • 构造代码块 (初始化块)
      • 在类中方法外出现;多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
    • 静态代码块
      • 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
      • 一般用于加载驱动
  • 举个例子(局部代码块)

我们看看使用局部代码块和不使用局部代码块的区别:。

使用局部代码块:

class Test0601A {public static void main(String[] args) {{int x = 10;System.out.println(x);}}
}

输出:

10

不使用局部代码块:

class Test0601A {public static void main(String[] args) {int x = 10;System.out.println(x);}
}

输出:

10

从结果来看,使用局部代码块和不使用局部代码块好像没啥区别啊!这是咋回事?

别急,我们看下面这段代码:

class Test0601A {public static void main(String[] args) {{int x = 10;}System.out.println(x);}
}

报错:

---------- javac ----------
Test0601A.java:7: 错误: 找不到符号System.out.println(x);^符号:   变量 x位置: 类 Test0601A
1 个错误Output completed (2 sec consumed) - Normal Termination

我们在编译时报错了,JAVA找不到符号x,这是因为我们定义的变量x在局部代码块内,当出了这个局部代码块,代码块内的变量x就被释放掉了,所以JAVA就找不到变量x了。

  • 举个例子(构造代码块)
class Test0601A {public static void main(String[] args) {Bunny b1 = new Bunny();System.out.println("----------");Bunny b2 = new Bunny("Huang", 9);}
}class Bunny {private String name;private int age;public Bunny() {System.out.println("空参构造");}public Bunny(String name, int age) {System.out.println("有参构造");}{System.out.println("构造代码块");}
}

输出:

构造代码块
空参构造
----------
构造代码块
有参构造

我们发现,每创建一次对象,构造代码块就会被执行一次,且构造代码块是随着构造函数的调用而执行的,且构造代码块在构造函数之前执行。

  • 举个例子(静态代码块)
class Test0601A {public static void main(String[] args) {Bunny b1 = new Bunny();System.out.println("----------");Bunny b2 = new Bunny("Huang", 9);}static {System.out.println("我是主方法类中的静态代码块");}}class Bunny {private String name;private int age;public Bunny() {System.out.println("空参构造");}public Bunny(String name, int age) {System.out.println("有参构造");}{System.out.println("构造代码块");}static {System.out.println("我是Bunny类的静态代码块");}
}

输出:

我是主方法类中的静态代码块
我是Bunny类的静态代码块
构造代码块
空参构造
----------
构造代码块
有参构造

静态代码块随着类的加载而加载,它只执行一次,用来给类进行初始化。如果主方法类中有静态代码块,则它会优先于主方法main执行。

第三次学JAVA再学不好就吃翔(part29)--代码块相关推荐

  1. 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...

  2. 第三次学JAVA再学不好就吃翔(part69)--System类

    学习笔记,仅供参考,有错必纠 文章目录 System类 字段 方法 gc方法 exit方法 currentTimeMillis方法 arraycopy方法 举个例子 System类 System类是在 ...

  3. 第三次学JAVA再学不好就吃翔(part16)--方法及方法重载

    学习笔记,仅供参考 文章目录 JAVA基础语法 方法概述 方法重载 JAVA基础语法 方法概述 为什么要有方法 为了提高代码的复用性 什么是方法 完成特定功能的代码块. 方法的格式 修饰符 返回值类型 ...

  4. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  5. 第三次学JAVA再学不好就吃翔(part46)--Scanner类

    学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...

  6. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  7. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类

    学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...

  8. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...

  9. 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符

    学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...

最新文章

  1. Express中使用ejs新建项目以及ejs中实现传参、局部视图include、循环列表数据的使用
  2. Sql日期时间格式转换
  3. 并发容器之CopyOnWriteArrayList
  4. Android 水波纹点击效果(Ripple Effect)
  5. sharepoint 2013基于AD的Form表单登录(三)——选择用户时,屏蔽掉AD。
  6. quartz2d 实现太极图
  7. AI人脸识别真的成熟了吗?读完这篇你就懂了
  8. openjudge用c语言答案,OpenJudge - NOI - 1.4编程基础之逻辑表达式与条件分支(C语言 全部题解)...
  9. Web后端学习笔记Flask(3)模板 实例
  10. 1.material组件的安装及其使用
  11. UITableView的cell重用优化
  12. 文字转语音开源软件-espeak
  13. 百度,阿里,搜狐公司社招面试题及总结
  14. 解决删除谷歌浏览器chrome注册表残留问题
  15. cozmo vector的起源最详细的说明
  16. 论文阅读:《A Neural Conversational Model》
  17. C语言中对结构体赋初值
  18. 如何租房才不会被坑——复盘我租房之路
  19. Azure Kinect 使用记录 (一)
  20. 推荐 GitHub 上很火的录屏工具,秒杀 33 种同行工具

热门文章

  1. 图像工程CH4 频域图像增强
  2. C++自定义自适应中值滤波
  3. 2.11 矩阵和实数运算不同之处
  4. python字符串包含关系_Python实现判断一个字符串是否包含子串的方法总结
  5. Zurmo - - 全局配置
  6. nodejs和ionic小助手
  7. iOS端JSON转Model链式编程框架SuperKVC使用方法与原理
  8. 网络安全泡沫是否即将破灭?
  9. [python]pythonic的字典常用操作
  10. GalleryView