参考链接:https://www.oschina.net/question/2986939_2283331
java为了提高代码安全性,规定:
- 在类中定义的成员变量如果你没有初始化java会自动帮你初始化,如果变量是数字会自动初始化成 0,变量是字符会初始化成 'a', 变量是对象引用会初始化成 null, 变量是布尔型,则自动初始化成 false.
- 如果你定义的是以后要用到的(要从那里提取数值的)局部变量,那就必须在声明的时候就初始化,否则编译会报错。
- 不过,你的案例是以后就先给它(newImg)赋值(创建新对象,newImg 成了这个对象的引用),而不是从它那里取值,所以声明它(newImg)的时候,不必初始化,即声明它(newImg)的时候的初始化是多余的。
-
import java.awt.image.BufferedImage; class Person{ int age;// 无须初始化 String name;// 无须初始化 char c; boolean mariage; public String toString(){ String s=""; s += "姓名:"+ name; s += ",, 年龄:" + age; s += ", 字母: " + c; s += ", 婚否: " + mariage; return s; } } public class initTest { static void cal(){ int a=5; //必须初始化,因为以后要用到 int b; //无需初始化,因为以后没用 System.out.println(a); } public static void main(String[] args) { BufferedImage bf = null;//必须初始化, 因为以后要用到 if (bf == null) System.out.println("缓冲影像无效。 "); Person p = new Person(); System.out.println(p.toString()); cal(); } }
Java中所有变量在使用前都初始化吗
-
对 你就得这么记“所有对变量在使用前都得初始化”
-
1.尤其是在方法中声明的局部变量,必须得由手动进行显示的初始化
2.而声明在类体中的成员变量,虚拟机会自动帮你初始化 为各种 0 值(数值类型为0 字符则为编码为0的那个 boolean 为false(编码还是0)引用型初始化为null)
比较特殊的一种变量final(这里叫常量了 一旦赋值初始化之后就不能更改 )这种变量想想也知道必须手动赋值初始化了,(虚拟机给你赋值个0有啥用呢?你又不能改它的值),于是再按照上述1、2的原则,1.局部的final型变量还是只要在使用前进行手动初始化即可 2,final成员变量要么你在声明的时候就赋值了,要么你在声明的时候没赋值的话,就必须在所在的类实例化的时候就赋值了(即必须在所有的构造方法中初始化了)。 -
在谈static成员何时初始化
- 参考链接:
- https://blog.csdn.net/jisuanji198509/article/details/81260487
- static成员是所有类对象公共的
- static成员可以直接用类名调用,无需创建对象
- static方法中不能使用this关键字
-
我们在试想,当我们直接用类名去调用一个静态成员的时候,这个静态成员肯定必须要在我们调用之前就要被初始化好,那么也就是说在类被加载的时候就会被初始化好,因为在类被装载到jvm虚拟机后,如果不初始化static修饰的成员,那么就不能正确的使用类名去调用静态成员了{类(class)什么时候被加载?}
总结
一句话:类中的静态成员会随着类的加载而加载。 -
静态变量在类被装载到jvm虚拟机后,就进行初始化。