动手动脑
Posted 1502762920-com
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动手动脑相关的知识,希望对你有一定的参考价值。
一:看代码找错误
二:java字段初始化规律
package 代码测试; public class InitializeBlockClass { {field=200;} public int field=100; public InitializeBlockClass(int value) { this.field=value; } public InitializeBlockClass() { } } public class obj { public static void main(String[] args) { InitializeBlockClass obj=new InitializeBlockClass(); System.out.println(obj.field); obj=new InitializeBlockClass(300); System.out.println(obj.field); } }
输出结果为:100 300
分析
1 {field=200;} 该部分为类的初始化模块,在类中直接将语句包围起来,直接作为类成员,像这种成员多用与初始化类的字段。
2 在 public int field=100; 定义时初始化,所以obj.field值为100
3 obj=new InitializeBlockClass(300);
System.out.println(obj.field);
利用构造方法初始化,将field的值初始化为300,输出为300;
4 Java字段初始化的规律:
静态初始化生成实例(new之后)变成你赋给他的值,先执行静态初始化,如果没有实例化,按照初始化和构造方法在程序中出现的顺序执行。
当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。
三:类字段的初始化顺序
1执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
2 执行类的构造函数
类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码
四:静态初始化的执行顺序
五:如何在静态方法中访问类的实例成员(即没有附加static)
package Test; public class emm { public static void display() { System.out.println("吴林祥"); } public void display1() { System.out.println("吴林祥666"); } public static void main(String[] args) { emm e=new emm(); e.display1(); emm.display(); } }
静态方法中不能直接访问同一类中的非静态成员,而必须先创建对象,再通过对象访问成员
package 代码测试; public class ceshi { public static void main(String[] args) { Integer i1=100; Integer j1=100; System.out.println(i1==j1); Integer i2=129; Integer j2=129; System.out.println(i2==j2); } }
结果
输出结果不一样主要是因为与IntegerCache类有关 为了避免重复创建对象,对INteger值做了缓存,如果这个值在缓存的范围内直接返回缓存对象,否则new一个新的对象返回。
以上是关于动手动脑的主要内容,如果未能解决你的问题,请参考以下文章