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 无参带返回值方法 本文知识点:无参带返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...
随机推荐
- D3---01基础的柱状图制作(转)
---文章转自 http://d3.decembercafe.org/index.html ,Created by 十二月咖啡馆. 一个完整的柱形图包含三部分:矩形.文字.坐标轴. 首先要布置一个大 ...
- 【转】Mac 删除文件夹里所有的.svn文件
转自: mac 删除文件夹里所有的.svn文件 想要把SVN專案作轉移或複製時 舊的「.svn」真的是很煩人的東西 最快的方式是用終端機輸入 sudo find /Users/justfly/Do ...
- jquery只获取自身文本节点,不获取子元素的
jQuery.text()方法时候,会把子元素的文本也获取到,以下方法可获取自身文本节点,不包括子元素 <div id="demo">只获取我<a href=&q ...
- 读《31天学会CRM项目开发》记录4 - WEB服务配置
好几天没有更新记录了,因为最近都在看本书的基础内容,然后跟着练习.等看到数据库部分,就晕菜了,只能草草浏览一遍,想在后面的实战中再加强. 下面是对IIS 和ASP.NET的配置! 一.什么是IIS? ...
- [转]Unity-移动设备可用的压缩解压缩源码
原文:http://www.manew.com/thread-103250-1-1.html 最近在做客户端数据的分离,不希望对项目有什么影响,也不太想用AssetBundle,太麻烦,就在网上找了找 ...
- Windows下Flume的安装
flume(日志收集系统) Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flum ...
- java代码的编译、执行过程
Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码 ...
- 20175324 《Java程序设计》第七周学习总结
教材学习内容总结 常用实用类 String类 - 程序可以直接使用String类,但不能进行扩展,即String类不可以有子类 - 常用构造方法 - String(char a[])用一个字符数组a创 ...
- c# 通过MailHelper发送QQ邮件
发送的方法 appsetting内容 第一个是发送邮件qq账号,第二个是QQ邮箱的POP3/SMTP服务码(下面会说怎么获取),第三个是服务器,第四个是端口 获取QQ邮箱的POP3/SMTP服务码 1 ...
- 大数相加 Big Num
代码: #include<stdio.h>#include<algorithm>#include<iostream>#include<string.h> ...