https://blog.youkuaiyun.com/qq_43607992/article/details/141303459?ops_request_misc=&request_id=&biz_id=102&utm_term=%E4%BB%A3%E7%A0%81%E5%9D%97&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-141303459.142v102pc_search_result_base6&spm=1018.2226.3001.4187
https://blog.youkuaiyun.com/yayayalaila/article/details/122654430?ops_request_misc=%257B%2522request%255Fid%2522%253A%25224b201cb8a51ad7a6444dbb4de876f156%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=4b201cb8a51ad7a6444dbb4de876f156&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-122654430-null-null.142v102pc_search_result_base6&utm_term=%E4%BB%A3%E7%A0%81%E5%9D%97&spm=1018.2226.3001.4187
代码块分类

局部代码块

构造代码块

public class Student{
private String name;
private int age;
/*
public Student() {
System.out.println("创建了有一个对象");
}
public Student(String name, int age) {
System.out.println("创建了一个对象");
this.name = name;
this.age = age;
}
*/
//可以看出构造方法中有重复的语句,这种重复的就可以从构造方法中抽象出来,称为一个构造代码块。(所以,构造代码块就是写在成员位置的代码块)
//执行时机:我们在创建本类对象的时候会先执行构造代码块,再执行构造方法
//但是这种写法不够灵活,渐渐地被淘汰了
{
System.out.println("创建了一个对象");
}
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}

静态代码块

public class Student1{
private String name;
private int age;
//静态代码块
//用处:可以用来做一些对象数据的初始化
static {
System.out.println("代码块执行了");
}
public Student1() {
System.out.println("空参构造");
}
public Student1(String name, int age) {
System.out.println("带参构造");
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

同步代码块

package com.zOOP.day7_polymorphism.tongbu;
public class Counter {
private int count = 0;
private final Object lock = new Object(); // 锁对象
// 同步方法,增加计数器的值
public void increment() {
synchronized (lock) { // 使用lock对象作为锁来保护同步代码块
count++;
System.out.println(Thread.currentThread().getName() + " 增加cout值为: " + count); //打印值count正确增加
}
}
// 获取计数器的当前值
public int getCount() {
return count;
}
}
测试类:
package com.zOOP.day7_polymorphism.tongbu;
public class Test {
public static void main(String[] args) {
Counter counter = new Counter();
// 创建并启动5个线程来增加计数器
for (int i = 0; i < 5; i++) {
new Thread(() -> {
for (int j = 0; j < 10; j++) {
counter.increment();
}
}, "Thread-" + i).start();
}
// 等待所有线程执行完毕(这里的处理方式仅供演示)
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("最终的count: " + counter.getCount());//最终结果为50
}
}

1470

被折叠的 条评论
为什么被折叠?



