Java基础6:代码块与代码加载顺序
更多内容请关注微信公众号【Java技术江湖】
这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”资料“即可领取 3T 免费技术学习资源以及我我原创的程序员校招指南、Java学习指南等资源)
**
本文主要介绍了三种代码块的特性和使用方法。
具体代码在我的GitHub中可以找到
github.com/h2pl/MyTech
文章首发于我的个人博客:
h2pl.github.io/2018/04/24/…
代码块:用{}包围的代码
java中的代码块按其位置划分为四种:
局部代码块
位置:局部位置(方法内部)
作用:限定变量的生命周期,尽早释放,节约内存
调用:调用其所在的方法时执行
public class 局部代码块 {
@Test
public void test (){B b = new B();b.go();
}
}
class B {B(){}public void go() {//方法中的局部代码块,一般进行一次性地调用,调用完立刻释放空间,避免在接下来的调用过程中占用栈空间//因为栈空间内存是有限的,方法调用可能会会生成很多局部变量导致栈内存不足。//使用局部代码块可以避免这样的情况发生。{int i = 1;ArrayList<Integer> list = new ArrayList<>();while (i < 1000) {list.add(i ++);}for (Integer j : list) {System.out.println(j);}System.out.println("gogogo");}System.out.println("hello");}
}
复制代码
构造代码块
位置:类成员的位置,就是类中方法之外的位置
作用:把多个构造方法共同的部分提取出来,共用构造代码块
调用:每次调用构造方法时,都会优先于构造方法执行,也就是每次new一个对象时自动调用,对 对象的初始化
class A{int i = 1;int initValue;//成员变量的初始化交给代码块来完成{//代码块的作用体现于此:在调用构造方法之前,用某段代码对成员变量进行初始化。//而不是在构造方法调用时再进行。一般用于将构造方法的相同部分提取出来。//for (int i = 0;i < 100;i ++) {initValue += i;}}{System.out.println(initValue);System.out.println(i);//此时会打印1int i = 2;//代码块里的变量和成员变量不冲突,但会优先使用代码块的变量System.out.println(i);//此时打印2//System.out.println(j);//提示非法向后引用,因为此时j的的初始化还没开始。//}{System.out.println("代码块运行");}int j = 2;{System.out.println(j);System.out.println(i);//代码块中的变量运行后自动释放,不会影响代码块之外的代码}A(){System.out.println("构造方法运行");}
}
public class 构造代码块 {@Testpublic void test() {A a = new A();}
}
复制代码
静态代码块
位置:类成员位置,用static修饰的代码块作用:对类进行一些初始化 只加载一次,当new多个对象时,只有第一次会调用静态代码块,因为,静态代码块 是属于类的,所有对象共享一份调用: new 一个对象时自动调用public class 静态代码块 {@Test
public void test() {C c1 = new C();C c2 = new C();//结果,静态代码块只会调用一次,类的所有对象共享该代码块//一般用于类的全局信息初始化//静态代码块调用//代码块调用//构造方法调用//代码块调用//构造方法调用
}}
class C{C(){System.out.println("构造方法调用");}{System.out.println("代码块调用");}static {System.out.println("静态代码块调用");}
}
复制代码
执行顺序 静态代码块 -----> 构造代码块 -------> 构造方法
关于抽象类和接口的内容可以在上一节查看:
blog.csdn.net/a724888/art…
关于Java类和包的内容可以在下一节查看:
blog.csdn.net/a724888/art…
Java基础6:代码块与代码加载顺序相关推荐
- java静态变量,静态代码块,普通代码块,构造函数加载顺序
https://blog.csdn.net/houkun_dobest/article/details/85227118
- Java基础篇:四种代码块详解
所谓代码块,就是用大括号{}将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法.一般来说,代码块是不能单独运行的,它必须有运行主体.在Java中代码块主要分为四种:普通代码块.静态代码块. ...
- java中静态变量,静态代码块,静态方法,实例变量,匿名代码块的加载顺序
1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java中,使用{}括起来的代码称为代码块,代码块可以分为以下四种: (1)普通代码块:就是类中方法的方法体 public vo ...
- Java内部类以及类的加载顺序(一)
java内部类以及类的加载顺序(一) Java 类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类.根据定义的方式不同,内部类分为四大类静态内部类,成员内部类,局部内部类,匿 ...
- Java-Day11 面向对象遍程的入门 (类属性的默认值、构造方法、类的成员、static关键字、类的成员加载顺序、Java(权限)访问修饰符)
目录 1. 类的属性的默认值问题 2. 构造方法(Constructor) 3. 类的成员 3.1 类的成员之一:属性 3.2 UML类图 4. static关键字 5. 类的成员加载(运行)顺序 6 ...
- 类的加载顺序(例题)
1.很重要!!! 例子: package Servlet.day0811.am; public class StaticTest {static StaticTest st=new StaticTes ...
- Java--类的加载顺序
来源:https://www.cnblogs.com/sxkgeek/p/9647992.html 1.有继承关系的加载顺序 关于关键字static,大家 都知道它是静态的,相当于一个全局变量,也就是 ...
- Java基础:Java代码加载顺序
Java代码加载顺序 代码块 类加载和初始化相关案例一 案例二 深度加载知识 静态变量 内部类中不能定义静态变量 代码块 项目 Value 作用 局部代码块 在main方法里面 给变量限定声明周期,局 ...
- Java面试题之类的静态代码块和静态属性等的加载顺序
如以下面试题: /** * @author hjs * @date 2019/3/62:41 * @Dec */public class B { public static B t1 = new B( ...
- java代码从编译到加载执行的过程
代码编译 在刚接触java时,我们都知道通过javac命令将java源码文件编译成.class字节码文件,这是由编译器来完成的. 包括泛型擦除属于编译时期的语法糖. .class字节码文件是跨平台的, ...
最新文章
- NET问答: 如何按属性进行 Distinct() ?
- 深度区分LoRa和LoRaWAN的区别
- bs cs架构区别_软件架构设计分层模型和构图思考
- JSONObject与JSONArray的使用
- jsp学习之路之Myeclipse部署tomcat服务器并实现Hello World一个小网页
- 【洛谷】普及练习场 深度优先搜索【易】
- Java int基本类型和Integer之间引发的问题思考
- openSUSE12.1安装及基本设置
- 【信息系统项目管理师】第7章-项目成本管理 知识点详细整理
- redis数据类型之sorted set
- spinlock变量没有初始化
- python3-pwntools教程_CTF PWN工具篇1
- pcap文件linux怎么打开,pcap文件用什么打开
- 软件项目管理流程总结
- 【问题记录】pip 安装报错 Failed to establish a new connection
- 远程访问openwrt路由器+配置动态DNS
- Gocv图片合成视频(无音频)
- mysql中dist_在SQL语句中dist是什么意思
- 【软件测试】盘一盘工作中遇到的 MQ 异常测试
- 继承(下)----虚继承
热门文章
- FFA 2021 专场解读 - 实时数据湖
- 鱼哥,我怕蛇,可以搞Python么?
- 电脑怎么找到tomcat端口_更换内存条的时候我怎么找到自己电脑配置的详细信息...
- buck变换器设计matlab_电力电子变换器控制设计(1)
- python用三种方式定义字符串、并依次输出_Python中字符串拼接的三种方式
- switch里面变量吗c语言,讨教一下关于switch语句中变量定义的相关问题
- 帧同步分离逻辑层和渲染层_帧同步如何分离逻辑和渲染?
- linux lsiutil raid创建,使用MegaCli工具查看状态
- 连接linux常用的工具
- linux系统常用命令-1--lsblk