Java静态块前向引用的问,希望能耐心的跟小弟讲解下

问题描述

[size=xx-small][/size]static {b = 9;int i = b;// 报错int j = b = 9;System.out.println(b);// 报错}static {b = 9;int i = Test2.b;// 不报错int j = b = 9;System.out.println(Test2.b);// 不报错}static int b=0;这到底是什么原因,谁能给我详细解释下,这个块的前向引用和方法的前向引用有什么区别,重点是:为什么等号左边可以省略类名,等号右边调用的时候不可以省略类名?

解决方案

static int b=0; //放上来static { b = 9; int i = b; int j = b = 9; System.out.println(b);} static { b = 9; int i = T03.b; int j = b = 9; System.out.println(T03.b); } 这样就好了 估计是Sun的规定吧
解决方案二:
你这段代码所在的类名是Test2吧 一个类里面的静态成员变量的值和类本身有关 和对象无关 所以可以由类名直接调用Test2.b所作的事就是加载类 一般一个类加载的时候所作的事是 实例化静态成员变量 执行静态代码块 你可以把static int b=0;放到静态代码块上面去 他们执行时有顺序的这些做完才会有以后的调用构造方法
解决方案三:
静态变量可以使用类名直接访问到,分配给全局变量的内存,一直到程序运行结束时才释放。 所以可以类名直接访问到。

时间: 2024-09-28 10:49:20

Java静态块前向引用的问,希望能耐心的跟小弟讲解下的相关文章

译文:理解Java中的弱引用

不久之前,我面试了一些求职Java高级开发工程师的应聘者.我常常会面试他们说,"你能给我介绍一些Java中得弱引用吗?",如果面试者这样说,"嗯,是不是垃圾回收有关的?",我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述. 然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经验和高学历背景的应聘者中,居然只有两个人知道弱引用的存在,但是在这两个人之中 只有一个人真正了解这方面的知识.在面试过程中,我还尝试提示一些东西,来看看有没有人突然说一声&qu

10分钟带你理解Java中的弱引用_java

前言 本文尝试从What.Why.How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义.基本使用场景和使用方法. 一. What--什么是弱引用? Java中的弱引用具体指的是java.lang.ref.WeakReference<T>类,我们首先来看一下官方文档对它做的说明:      弱引用对象的存在不会阻止它所指向的对象被垃圾回收器回收.弱引用最常见的用途是实现规范映射(canonicalizing mappings,比如哈希表).      假设垃圾收集器在某个

redis-关于Redis数据库的java代码多线程读写性能问题,希望可以帮忙看看、、、

问题描述 关于Redis数据库的java代码多线程读写性能问题,希望可以帮忙看看... 渣渣一枚..由于项目关系,需要用到内存数据库来存key-value所以就开始研究redis这个数据库.现在已经把redis放在了CentOS的测试服务器上,然后通过网上的资料写了链接代码! 测试用了100个线程,每个线程插入10000条数据,结果竟然花了**200s**, 同事用memcached测试同样的数据只要了**20s** 而在linux中用redis自带的redis-benchmark查询性能 结果

java class前如果不加public的话,类名和文件名可以不相同吧?这个程序为什么会出错???

问题描述 java class前如果不加public的话,类名和文件名可以不相同吧?这个程序为什么会出错??? 解决方案 总结:如果使用记事本来写这个程序,是没有问题的,只要javac Saaa.java和java Saaaaa就可以了,但是在eclipse中不能直接运行,而是应该在run configuration中将运行的类修改为Saaaaa,因为eclipse默认运行的类和java文件名是相同的.这个程序本身是一点问题都没有的,只要类前不加public,那么类名和文件名就可以不相同. 解决

java 方法 转化-在学习java时遇到这样一个问题,希望可以解答一下

问题描述 在学习java时遇到这样一个问题,希望可以解答一下 自定义了一个方法 card(int rank,int suit) 建立一个card的数组,排序之后,想输出一个,但是用Arrays.toString(int[])转换时,却不成功,有没有什么办法解决一下.

Java方法参数是引用调用还是值调用?_java

方法调用(call by) 是一个标准的计算机科学术语.方法调用根据参数传递的情况又分为值调用( call by reference ) 和引用调用( call by value ) .江湖上有很多关于这两种调用的定义 ,最通常的说法是传递值的是值调用,传递地址的是引用调用.这其实很不恰当,这种 这些说法很容易让我们联想到Java的对象参数传递是引用调用,实际上,Java的对象参数传递仍然是值调用 . 我们首先用一段代码来证实一下为什么Java的对象参数传递是值调用. public class

Java中的强引用、软引用、弱引用和虚引用

Java中的强引用.软引用.弱引用和虚引用  原文链接:http://aaronfu.net/?p=9995 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用本章前文介绍的引用实际上都是强引用,这是使用最普遍的引用.如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止

arraylist-集合ArrayList 希望各位大神帮帮小弟

问题描述 集合ArrayList 希望各位大神帮帮小弟 在Java中怎么修改: name=input.next(); for(DVDList d:list){ if(d.getName()==null){ System.out.println("无法查找到该DVD"); break; } else if(name.equals(d.getName()) && d.getState()==0){ System.out.println("该DVD未借阅 "

总说ruby开发比java开发效率高很多,能详细讲解下吗?

问题描述 很早之前就总是听到"ruby,ptyon等动态语言开发效率比j2ee高",有谁能详细的讲解下这效率是怎么高出来的?不要拿"5分钟可以建个blog网站",java也可以用代码生成工具一个命令生成一堆东西.希望有理解透彻的人客观的讲解下,谢谢 问题补充:cxh116 写道 解决方案 RUBY语言足够灵活, Rails适合小团队快速开发应用 从Ruby语言来讲,它比JAVA灵活.比如,Java AOP需要用的什么动态代理,CGLIB之类的,在Ruby中,动态的修