java中的代码块
来源:互联网 发布:jquery.form.js cdn 编辑:程序博客网 时间:2024/05/19 03:27
java中有普通代码块,静态代码块、构造代码块、同步代码块(synchronized)
普通代码块
普通代码块就是位于方法中的被{}包括的代码块,方法名后面的{}也是普通代码块,在普通代码块中还可以嵌套普通代码块,不可以嵌套静态代码块。
普通代码块的执行顺序是代码的出现顺序执行的。就和普通代码相同。
public static void main(String[] args) {
{
System.out.println("这是普通代码块一");
}
System.out.println("这是程序方法代码二");
{
System.out.println("这是普通代码块四");
{
System.out.println("这是普通代码块五");
}
}
}
结果:
这是普通代码块一
这是程序方法代码二
这是普通代码块四
这是普通代码块五
静态代码块
被static 修饰的{}代码
静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
1 静态代码块不能存在于任何方法体内。
2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
3.静态代码块操作的方法和属性通静态方法相同
public class MyTest {static
{
System.out.println("这是静态代码块一");
}
static
{
System.out.println("这是静态代码块二");
}
public static void main(String[] args) {
int i=0;
{
System.out.println("这是普通代码块一"+i++);
}
System.out.println("这是程序方法代码二"+i++);
{
System.out.println("这是普通代码块四"+i++);
{
System.out.println("这是普通代码块五"+i++);
}
// 同步代码块只是将代码块中的数据锁起来,一次只有一个线程可以执行
// MyTest.class代表当前类的对象。表示在同一时刻只有一个线程能够调用该对象的该代码块
synchronized (MyTest.class) {
System.out.println("这是普通代码块六"+i++);
}
}
}
}
结果:
这是静态代码块一这是静态代码块二这是普通代码块一0这是程序方法代码二1这是普通代码块四2这是普通代码块五3这是普通代码块六4
同步代码块
同步代码块是被synchronized修饰的代码块,他的执行顺序同普通代码块相同,只是在同一是时刻只有一个线程可以执行该代码块。
synchronized (MyTest.class) 的参数是锁的范围:分为对象锁和类锁,对象锁是作用于对象的,只有涉及该对象的线程就会起锁的作用,在同一时刻涉及该对象的线程执行只有一个。而若是类锁则只要涉及该类的线程同一时刻只有一个执行。一般使用this代表该类的对象。
参考:http://bbs.csdn.net/topics/390216019 对象锁的解释
http://blog.csdn.net/luoweifu/article/details/46613015 this的使用
构造代码块
直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
public class TwoClass {{
System.out.println("这是构造代码块一");
synchronized (MyTest.class) {
System.out.println("这是构造代码块中的同步代码块一");
}
}
{
System.out.println("这是构造代码块二");
synchronized (MyTest.class) {
System.out.println("这是构造代码块中的同步代码块二");
}
}
static {
System.out.println("这是静态代码块一");
}
static {
System.out.println("这是静态代码块二");
}
public static void showData(){
int i = 0;
{
System.out.println("这是普通代码块一" + i++);
}
System.out.println("这是程序方法代码二" + i++);
{
System.out.println("这是普通代码块四" + i++);
{
System.out.println("这是普通代码块五" + i++);
}
// 同步代码块只是将代码块中的数据锁起来,一次只有一个线程可以执行
// MyTest.class代表当前类的对象。表示在同一时刻只有一个线程能够调用该对象的该代码块
synchronized (MyTest.class) {
System.out.println("这是普通代码块中的同步代码块一" + i++);
}
}
}
}
public class MyTest {
public static void main(String[] args) {
TwoClass twoClass=new TwoClass();
twoClass.showData();
}
}
结果:
这是静态代码块一
这是静态代码块二
这是构造代码块一
这是构造代码块中的同步代码块一
这是构造代码块二
这是构造代码块中的同步代码块二
这是普通代码块一0
这是程序方法代码二1
这是普通代码块四2
这是普通代码块五3
这是普通代码块中的同步代码块一4
- Java中的代码块
- JAVA中的代码块
- Java中的代码块
- Java中的代码块
- java中的代码块
- Java中的代码块
- Java中的代码块
- Java中的代码块
- JAVA中的代码块
- Java中的代码块
- Java中的代码块
- java中的代码块
- java中的代码块
- Java中的代码块
- Java中的代码块
- java中的代码块理解
- java中的代码块理解
- Java 中的静态代码块
- 深度学习论文:RCNN
- 【C#
- PHP实现QQ快速登录的方法
- linuix压缩解压
- C++ 排序函数 sort(),qsort()的用法
- java中的代码块
- 在win7和python3.5下采用pip安装worldcloud这个词语库发现的问题和解决方式
- Java annotation入门(目前最好懂的)
- ImportError: cannot import name 'NUMPY_MKL' (skicit_learn)
- 使用SQLite3开发java应用程序
- Linux常用命令整理
- Javascript Form表单知识点总结
- MFC获取DC的四种方式
- Java Jvm运行机制原理