f1没有赋值
f2赋值了
当程序主动使用某个类时,如果这个类还未被加载到内存中,则系统会通过三个步骤对类进行初始化:
1、类的加载:将类的Class文件加载到内存中,并为其生成Java.lang.class对象(此过程由类加载器完成)
2、类的链接:将Java类的二进制数据合并到jvm运行状态中(jre)
2.1、验证:确保类符合JVM规范,保证安全性
2.2、准备:为类变量分配内存和初始化值
2.3、解析:JVM常量池中的符号引用(常量名)直接替换成直接引用(地址)
3、类的初始化:JVM对类进行初始化
执行类构造器方法(这个方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的(类构造器是构造类信息的,不是构造该类对象的构造器))
当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。
JVM会保证一个类的()方法在多线程环境中被正确加锁和同步。
f1没有赋值操作,f2有,所以f1没有被初始化,f2被初始化
没问题啊,如果f1也要初始化为8.0,那需要写成 float f1=8.0F,f2=8.0F才行
目前这代码相当于float f1; float f2=8.0F;
初始化即定义变量之后给赋值
此处的float f1, f2 = 8.0F; 含义是:定义float类型的变量 f1和f2,并给f2赋值为8.0F,所以此处的f1只是定义并没有初始化,而f2是定义并初始化。
你提到的int x(int a,b){return a+b;}答案是该方法错误因为b没有初始化。这里的(int a,b)并不是定义变量和初始化。这里是(int a,b)是方法x的形参a和b,其中a为int类型,b没有定义类型,所以这个错误是b缺少类型。
方法的形参有多个需要使用逗号隔开,且每个参数需指定类型,相同类型的也需要单独指定类型。