java static关键字和代码块
static关键字
为什么需要学习static关键字?
针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑使用static关键字
static概述: 多个对象共享同一份数据
static的特点:
- static修饰变量又称为共享变量,类变量,静态变量
- 静态成员属于某一类的,而不属于某一个具体的对象
3.访问静态成员的方式:
a.通过对象访问 不建议
b.通过类名访问
c.通过读写方法访问
4.静态static关键字可以修饰变量,还能够修饰方法,同时还可以修饰代码块(后面讲)
5.static修饰的方法称为类方法,方法体内部称为静态环境/静态上下文
a.非静态环境可以访问静态变量
b.静态环境下只能够访问静态变量
c.静态环境下不能够出现this,super
6.静态修饰方法的意义? -- 简化代码
a.静态方法用来访问静态成员
b.编写工具类
1.构造方法私有
2.成员方法添加static关键字修饰
例子:
Arrays 工具类 Math 工具类
7.static还可以修饰类,但是必须是内部类(后面讲解)
8.static的内存图
static是共享的,不变的,放在方法区,静态代码块在类加载的时候就会执行,并且只执行一次
代码块
1.局部代码块: 定义在局部位置,限定局部变量的作用域
2.构造代码块: 定义在成员位置,抽取多个构造代码块的重复代码,从而简化代码,在每次构造方法之前执行,并且可以执行多次
3.静态代码块: 定义在成员位置
a.在类加载的时候执行,只能够执行一次
b.目前理解为在类第一次出现的时候加载或者类的成员被访问的时候加载
静态代码块作用:
a.初始化静态成员
b.资源文件的读写,以及配置文件的读写,以及连接资源的载入等等
例子:
数据库连接
读取配置文件
4.同步代码块: 定义在局部位置 (在讲解多线程的时候讲解)
面试题: 静态变量和非静态变量的区别?
构造方法、构造代码块、静态代码块的执行顺序?
静态代码块 > 构造代码块 > 构造方法
静态代码块在类加载的时候执行只执行一次
构造代码块在每次访问构造方法之前执行,可以执行多次
构造方法每次创建对象的时候执行,可以执行多次
public class StaticDemo02 {
public static void main(String[] args) {
CodeBlock2.z = 100;
CodeBlock2 cb = new CodeBlock2();
CodeBlock2 cb2 = new CodeBlock2(1, 2);
}
}
class CodeBlock2 {
int x;
int y;
static int z;
{
// System.out.println("CodeBlock 构造代码块");
print();
}
public CodeBlock2() {
// print();
System.out.println("我是无参构造方法");
}
static {
System.out.println("我是静态代码块");
z = 100;
}
public CodeBlock2(int x, int y) {
// print();
this.x = x;
this.y = y;
System.out.println("我是带参构造方法");
}
public void print() {
System.out.format("(%d,%d)%n", x, y);
}
public void method() {
int num = 10;
// 局部代码块
{
int a = 20;
System.out.println(num);
System.out.println(a);
}
int a = 30;
// 同步代码块
synchronized(new Object()){
}
}
}
我是静态代码块
(0,0)
我是无参构造方法
(0,0)
我是带参构造方法
java static关键字和代码块的更多相关文章
- 03_java基础(八)之static关键字与代码块
20\21.static关键字 /** * static关键字 * 1.用static修饰后的方法,称为静态方法. * 2.静态的方法特点,可以使用 类名.方法名称 调用方法 * 3.静态方法只能调用 ...
- 零基础学习java------day8------javabean编写规范,继承,static关键字,代码块,单例设计模式
0. 今日内容提要 1. javabean书写规范 javabean:一个普通的类,用来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据. 比如:Teacher,Student,Mobile. ...
- static关键字和代码块
static关键字 static修饰的变量称为静态变量/共享变量/类变量 用于修饰类的成员,如成员变量.成员方法以及代码块等,内static修饰的成员具备一些特殊性 1.静态变量 在java类中使用s ...
- java的4种代码块
一.普通代码块 直接在一个方法中出现的{}就称为普通代码块,例子程序如下: public class CodeDemo01{ public static void main(String[] args ...
- 【转】Java的四种代码块
原贴地址:http://www.cnblogs.com/end/archive/2012/12/21/2827554.html 一.普通代码块 直接在一个方法中出现的{}就称为普通代码块,例子程序如下 ...
- Java 基础 面向对象之关键字内部类代码块修饰符
final final概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后 ...
- java中的静态代码块、构造代码块、构造方法
运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...
- Java面试题 静态代码块 构造代码块 构造方法 的执行顺序
JAVA中的静态代码块 构造代码块 构造方法执行顺序: 静态代码块(类加载时执行)>>构造代码块>>构造方法 下面展示一个简单的例子,推荐大家动手运行一遍: public cl ...
- Java基础6:代码块与代码加载顺序
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
随机推荐
- [LeetCode] Sliding Puzzle 滑动拼图
On a 2x3 board, there are 5 tiles represented by the integers 1 through 5, and an empty square repre ...
- Ubuntu 安装 Redis和phpredis扩展
服务器Ubuntu16.04 环境php7.0+Apache /****************************开始安装Redis****************************/ 1 ...
- python selenium ——— 动态id、class定位
什么样的是动态id呢? 动态id就是第一次点击显示的id与二次点击显示的不一样,一般是元素属性中包含一段数字的这种情况. 类似这种: 1 <input type="button&quo ...
- kafka创建topics 错误: 找不到或无法加载主类 Files\Java\jdk1.7.0_80\lib;C:\Program
解决方案如下: 在kafka安装目录中找到bin\windows目录中的kafka-run-class.bat找到%CLASSPATH%为其加上双引号
- apache-2.4.6 mod_bw-0.92 实现限速上传或下载
下载 mod_bw wget http://ivn.cl/files/source/mod_bw-0.92.tgz 解压到mod_bw tar -zxvf mod_bw-0.92.tgz -C mo ...
- 选择性计量学(Altmetric)介绍
不论是对科研人员还是对机构知识库管理者来说,对文章或期刊使用定量数据来评价都是很有意义的.比如,科研人员或论文的作者可以通过这些数据来了解该学科的基本情况,也可以为其个人总结或个人简历补充更为精细.更 ...
- LeetCode 70 - 爬楼梯 - [递推+滚动优化]
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ...
- PowerDesigner软件建立新模型。
打开PowerDesigner软件,选择菜单文件->建立新模型,或者敲击键盘ctrl+N 弹出建立新模型窗口,模型类型选择Object-Oriented Model,图选择Class D ...
- Django ORM存储datetime 时间误差8小时问题
今天使用django ORM 将获取到的时间入库,并未出现问题,但是后来发现时间晚了8小时,经查询Django官方文档发现获取本地时间和UTC时间有差别. 首先科普下:UTC是协调世界时 UTC相当于 ...
- 优秀的云计算工程师需要学什么?云计算Docker学习路线
云计算工程师要学什么?随着互联网的快速发展,云计算这个词大家并不陌生,但是云计算究竟是做什么的,想要从事云计算要学习什么,很多都不知道,那么今天就给大家讲一下云计算. 云计算是基于互联网的相关服务的增 ...