Java基础7:关于Java类和包的那些事
更多内容请关注微信公众号【Java技术江湖】
这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”资料“即可领取 3T 免费技术学习资源以及我我原创的程序员校招指南、Java学习指南等资源)
**
本文主要介绍了三种代码块的特性和使用方法。
具体代码在我的GitHub中可以找到
https://github.com/h2pl/MyTech
文章首发于我的个人博客:
https://h2pl.github.io/2018/04/24/javase6
代码块:用{}包围的代码
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);//此时会打印1
int 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 构造代码块 {
@Test
public 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("静态代码块调用");
}
}
执行顺序 静态代码块 -----> 构造代码块 -------> 构造方法
关于抽象类和接口的内容可以在上一节查看:
https://blog.csdn.net/a724888/article/details/80061047
关于Java类和包的内容可以在下一节查看:
https://blog.csdn.net/a724888/article/details/80069504
Java基础7:关于Java类和包的那些事的更多相关文章
- 【Java基础】关于枚举类你可能不知道的事
目录 谈谈枚举 1. 枚举类的定义 2. 枚举类的底层实现 3. 枚举类的序列化实现 4. 用枚举实现单列 5. 枚举实例的创建过程是线程安全的 谈谈枚举 如果一个类的对象个数是有限的而且是不变的,我 ...
- JAVA基础第三章-类与对象、抽象类、接口
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- Java基础-日期格式化DateFormat类简介
Java基础-日期格式化DateFormat类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.DateFormat类概述 DateFormat 是日期/时间格式化子类的抽象 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序
006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序 Eclipse下创建程序 创建程序分为以下几个步骤: 1.首先是创建一个 ...
- Java基础16:Java多线程基础最全总结
Java基础16:Java多线程基础最全总结 Java中的线程 Java之父对线程的定义是: 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进 ...
- java基础学习总结——java环境变量配置(转)
只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...
- Java基础教程:Java内存区域
Java基础教程:Java内存区域 运行时数据区域 Java虚拟机在执行Java程序的过程种会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟 ...
- 068 01 Android 零基础入门 01 Java基础语法 08 Java方法 06 参数传递问题——基本数据类型传值
068 01 Android 零基础入门 01 Java基础语法 08 Java方法 06 参数传递问题--基本数据类型传值 本文知识点:参数传递问题--基本数据类型传值 说明:因为时间紧张,本人写博 ...
- 064 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 无参带返回值方法
064 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 无参带返回值方法 本文知识点:无参带返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...
随机推荐
- 利用kibana插件对Elasticsearch查询
利用kibana插件对Elasticsearch查询 Elasticsearch是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据. 查询分类: 基本查询:使用Elasticsear ...
- 谈谈代码中的this
js中我们常常会遇到this,this的具体指向问题对于很多同学来说是很懵懂的:就想lz刚开始接触时候就是一脸的懵逼,经常被一些题目转的眼花缭乱.那么今天lz就跟大家一起交流一下这个this的指向问题 ...
- 使用SQL-Front启动MySQL8.0报错
这学期学习数据库,电脑上分别装有phpStudy(自带的MySQL版本为5.5)和MySQL8.0.11,于是想用phpStudy中的SQL Front连接到8.0的数据库.手动开启8.0的MySQL ...
- HTTP 报文格式
(a)GET,POST,PUT(更新)DELETE(删除) 首行中,请求报文只需包含路由,因为在发送请求前,tcp连接已经创建,协议版本 Header: 接收类型 (b)版本 + 状态码 Header ...
- jqurey.running.min.js运动的字体效果
参考网址: http://yanshi.sucaihuo.com/jquery/22/2226/demo/ 里面有详细的解释 下面是案例效果demo,其中jquery.running.css与jque ...
- ionic3+angular4开发混合app 之自定义组件
这里主要是记录ionic3+angular4开发混合app时自定义组件,我想自定义组件的方法和angular4应该类似,具体在纯angular4中自定义组件,暂时没有实践,个人觉得差别不大,之后实践了 ...
- python 基本认证
# import requests # # response = requests.get('http://127.0.0.1:8080/manager/html', auth=('tomcat', ...
- zipkin
转:https://blog.csdn.net/liaokailin/article/details/52077620 zipkin为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监 ...
- 过滤html标签
public static String delHTMLTag(String htmlStr){ String regEx_script="<script[^>]*?>[\ ...
- 【react】---手动封装一个简易版的redux
export let createStore = (reducer)=>{ //定义默认的state let state; //定义默认的action let actionTypes = &qu ...