1.在定义变量时,java要求必须显示初始化变量。
比如以下代码无法通过编译:
public class Twst{ public static void main(String[] wrgs) { int value; System.out.println(value); } }
public class Twst{ public static void main(String[] wrgs) { int value=100; System.out.println(value); } }
这样写才能运行。
下面这个 也是不能运行,因为对象变量如果不引用一个真实的对象,则必须声明为null;
public class Test{ public static void main(String[] args) { MyClass obj ; System.out.println(obj.toString()); } }
下面这个才能运行:
public class Test{ public static void main(String[] args) { MyClass obj =null ; System.out.println(obj.toString()); } }
public class ert { public static void main(String[] args ) { Foo obj1=new Foo(); } } class Foo{ int value; public Foo(int initvalue) { value =initvalue; } }
上面这些代码出什么问题?哪出错了?
因为是如果类提供了一个自定义的构造方法,将导致系统不在提供默认的构造方法。
package wer; public class ert { public static void main(String[] args ) { int a=0; Foo obj1=new Foo (a); } } class Foo{ int value; public Foo( int initvalue) { value =initvalue; } }
这样写就对了。
public class ert { public static void main(String[] args ) { InitiazeBlockClass obj=new InitiazeBlockClass(); System.out.println(obj.field); obj=new InitiazeBlockClass(300); System.out.println(obj.field); } } class InitiazeBlockClass{ { field=200; } public int field=100; public InitiazeBlockClass( int value) { value=this.field; } public InitiazeBlockClass() { } }
如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?
就像上面的代码中。
执行 类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
执行类的构造函数。
标签:java,对象,value,class,int,obj,Foo,public From: https://www.cnblogs.com/nanbei666/p/16817551.html