第三次学JAVA再学不好就吃翔(part29)--代码块
学习笔记,仅供参考
面向对象
代码块
- 代码块概述
- 在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)--代码块相关推荐
- 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...
- 第三次学JAVA再学不好就吃翔(part69)--System类
学习笔记,仅供参考,有错必纠 文章目录 System类 字段 方法 gc方法 exit方法 currentTimeMillis方法 arraycopy方法 举个例子 System类 System类是在 ...
- 第三次学JAVA再学不好就吃翔(part16)--方法及方法重载
学习笔记,仅供参考 文章目录 JAVA基础语法 方法概述 方法重载 JAVA基础语法 方法概述 为什么要有方法 为了提高代码的复用性 什么是方法 完成特定功能的代码块. 方法的格式 修饰符 返回值类型 ...
- 第三次学JAVA再学不好就吃翔(part106)--字符流
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...
- 第三次学JAVA再学不好就吃翔(part46)--Scanner类
学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...
- 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...
- 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类
学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...
- 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流
学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...
- 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符
学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...
最新文章
- Express中使用ejs新建项目以及ejs中实现传参、局部视图include、循环列表数据的使用
- Sql日期时间格式转换
- 并发容器之CopyOnWriteArrayList
- Android 水波纹点击效果(Ripple Effect)
- sharepoint 2013基于AD的Form表单登录(三)——选择用户时,屏蔽掉AD。
- quartz2d 实现太极图
- AI人脸识别真的成熟了吗?读完这篇你就懂了
- openjudge用c语言答案,OpenJudge - NOI - 1.4编程基础之逻辑表达式与条件分支(C语言 全部题解)...
- Web后端学习笔记Flask(3)模板 实例
- 1.material组件的安装及其使用
- UITableView的cell重用优化
- 文字转语音开源软件-espeak
- 百度,阿里,搜狐公司社招面试题及总结
- 解决删除谷歌浏览器chrome注册表残留问题
- cozmo vector的起源最详细的说明
- 论文阅读:《A Neural Conversational Model》
- C语言中对结构体赋初值
- 如何租房才不会被坑——复盘我租房之路
- Azure Kinect 使用记录 (一)
- 推荐 GitHub 上很火的录屏工具,秒杀 33 种同行工具