第五周动手动脑
package text; public class text { public static void main(String[] args) { Foo obj1=new Foo(); } } class Foo { int value; public Foo(int initValue) { value =initValue; } }
该代码会报错,因为JAVA系统中如果自己定义了一个构造函数,那么系统就不会再提供一个无参的空构造函数
package text; public class text1 { { field=200; } public int field=100; public text1(int value) { this.field=value; } public text1() { } public static void main(String[] args) { text1 obj=new text1(); System.out.println(obj.field); obj=new text1(300); System.out.println(obj.field); } }
该代码可以看出构造函数在初始化上优先级比代码块高
package shangke.diwuzhou; class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static{ System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("Java初始化顺序演示"); System.out.println("执行Leaf的构造器"); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } }
该代码可以看出执行优先级是静态代码块>普通代码块>构造函数
还有就是父类函数比子类函数的构造函数执行优先级高
package text; public class text2 { int num=100; static public int fangfa(text2 str) { str.num=666; System.out.println(str.num); return str.num; } public static void main(String[] args) { text2 sta=new text2(); text2.fangfa(sta); } }
我们知道静态函数只能访问静态成员,但是如果我们想通过静态函数访问普通成员可以在静态函数中设置参数将对象传进去,从而访问普通成员。
package text; public class text3 { public static void main(String[] args) { Integer i1=127; Integer j1=127; System.out.println(i1==j1); Integer i2=128; Integer j2=128; System.out.println(i2==j2); } }
该代码的结果是true 和false
出现该结果的原因是int类型的范围是-128到127,Integer在-128到127的范围内用的是int可以所是引用类型,超过127的Integer需要new一个新地址所以地址不一样,所以“==”比较的是地址所以是false。