如何理解Java代码块,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
静态代码块
静态方法只可以调用静态成员不可以调用非静态成员
没有this对象
非静态方法既可以调用非静态成员也可以调用静态成员
静态代码块作用域:在类的内部方法外,使用static修饰
public class CodeBlock { static{ System.out.println("这是静态代码块"); }}
什么时候执行: 静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类中有多个静态代码块,会按照书写顺序依次执行
静态代码块是否可以访问方法?这个问题需要从上面的静态方法来解答,静态代码块是可以调用静态方法,但是无法调用非静态方法
静态代码块是否可以放在方法体?这个是不可以的,即使是静态方法也是不可以放静态代码块的,且静态代码块是只能放在类内部,无法放在静态方法内部,因为静态块是加载类的时候就执行,而静态方法是需要调用才执行,这里是有冲突的。
作用域:存在方法中
public static void main (String[] args){ { int number = 1; } System.out.println(number);//异常}
局部代码块执行顺序是和普通语句一样,只不过区分的是在代码块中的变量无法在代码块外部调用,如上所示,输出number时异常,这样有效的控制变量的生命周期,及早释放提高内存使用率。
public class CodeBlock { { System.out.println("这是构造代码块"); }}
同步代码块作用域:在方法内部,用synchronized修饰的代码块
public class CodeBlock {
public void syncMethod(Object obj){
synchronized (obj){
}
}
}
synchronized实质上是一个锁,为什么需要用锁?当有多条线程同时访问共享数据时,会发生资源抢占,如果不进行处理那么有可能会出现每个线程获取到的数据都是不正确的,这里我们可以使用同步方法或者同步代码块,当一个线程进来时,我们需要把其他线程挡在外面,直到这个线程使用完后才让其他线程使用该资源。
public class CodeBlock {
static{
System.out.println("静态代码块");
}
{
System.out.println("构造代码块");
}
public CodeBlock(){
System.out.println("无参构造函数");
}
public void sayHello(){
{
System.out.println("局部代码块");
}
}
public static void main(String[] args) {
System.out.println("执行了main方法");
new CodeBlock().sayHello();;
}
}
静态代码块执行了main方法构造代码块无参构造函数局部代码块
关于如何理解Java代码块问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。