Java编程中的4种代码块详解
作者:编程之路 时间:2022-01-04 03:10:20
在Java编程中,代码块就是指用“{}”括起来的代码。下面看一下这四种代码块。
1、普通代码块
就是指类中方法的方法体。
public void xxx(){
//code
}
2、构造块
下面用“{}”括起来的代码片段,构造块在创建对象时会被调用,每次创建对象时都会被调用,并且优先于类构造函数(包括有参和无参的)执行。 构造块中定义的变量是局部变量。
public class Client {
{//构造代码块
System.out.println("执行构造代码块");
}
publicClient() {
System.out.println("执行无参构造函数");
}
publicClient(String string) {
System.out.println("执行有参构造函数");
}
}
3、静态块
下面用static"{}"括起来的代码片段,只会在第一次加载此类时,仅执行一次,并且静态块优先于构造块执行。
public class Demo
{
public Demo()
{
System.out.print("默认构造方法!-->");
}
//构造代码块
{
System.out.print("构造代码块!-->");
}
//静态代码块
static
{
System.out.print("静态代码块!-->");
}
public static void test()
{
{
System.out.println("普通方法中的代码块!");
}
}
}
public static void main(String[]args)
{
Demo d = new Demo();
d.test();
}
/*
运行输出结果是:
静态代码块!-->构造代码块!-->默认构造方法!-->普通方法中的代码块!
*/
4、同步代码块
下面使用synchronized(obj){}括起来的代码块,在多线程环境下,对共享数据进行读写操作是需要互斥进行的,否则会导致数据的不一致。常见的是synchronized用来修饰方法,其语义是任何线程进入synchronized需要先取得对象锁如果被占用了,则阻塞,实现了互斥访问共享资源。而synchronized也是有代价的。一个常见的场景是,一个冗长的方法中,其实只有一小段代码需要访问共享资源,这时使用同步块,就只将这小段代码写在synchronized block,既能够实现同步访问,也能够减少同步引入的开销。 同步代码块须写在方法中。
class Ticket implements Runnable //extends Thread
{
object obj=new object();//共享对象,用来记录是否有其它进程在访问
private static int tick=100;
public void run() /*不能在这写同步函数,否则其它线程用不了,需要单独写一个同步函数*/
{
while(true)
{ synchronized(obj)
{
if(tick>0)
{
try
{
Thread.sleep(10); /*每次运行就沉睡一下*/
}
catch(Exception e)
{
}
System.out.println(Thread.currentThread().getName()+"sale:--"+tick--);
}
}
}
}
}
来源:https://www.cjavapy.com/article/4/
标签:Java编程,代码块
0
投稿
猜你喜欢
java处理图片背景颜色的方法
2023-11-27 04:38:20
Mybatis通过数据库表自动生成实体类和xml映射文件
2022-01-11 07:05:46
Java中的interrupted()和isInterrupted()
2023-06-17 22:16:31
C语言中求字符串长度的函数的几种实现方法
2023-07-04 23:29:05
java图形界面编程之模拟血压计
2023-10-01 07:16:05
flutter实现倒计时加载页面
2023-08-18 23:30:09
Hadoop源码分析六启动文件namenode原理详解
2021-08-20 01:03:55
Spring AOP实现接口请求记录到数据库的示例代码
2023-08-15 19:14:05
Spring源码解析 Bean属性填充
2021-06-28 19:17:16
java isInterrupted()判断线程的实例讲解
2023-07-21 01:45:53
Java语法中Lambda表达式无法抛出异常的解决
2022-10-13 01:04:43
关于java 图形验证码的解决方法
2023-08-09 15:21:19
Java解码H264格式视频流中的图片
2023-11-24 23:58:24
SpringCloud如何创建一个服务提供者provider
2023-08-01 01:56:33
springboot如何使用AOP做访问请求日志
2023-11-11 10:12:19
android调试工具DDMS的使用详解
2023-06-21 09:06:22
JSON各种转换问题(json转List,json转对象等)
2021-09-28 08:53:45
Java语言读取配置文件config.properties的方法讲解
2023-09-29 14:45:51
java实现手写一个简单版的线程池
2022-09-29 04:59:32
vs2019永久配置opencv开发环境的方法步骤
2023-11-02 19:38:58