Java第六周课堂示例总结

1、若是一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?ide

 1 public class InitializeBlockDemo {  2 
 3     /**
 4  * @param args  5      */
 6     public static void main(String[] args) {  7         
 8         InitializeBlockClass obj=new InitializeBlockClass();  9  System.out.println(obj.field); 10         
11         obj=new InitializeBlockClass(300); 12  System.out.println(obj.field); 13  } 14 
15 } 16 
17 class InitializeBlockClass{ 18     //下面这句在初始化块以前与以后,会影响到field字段的初始值 19     //public int field=100;
20     
21  { 22         field=200; 23  } 24     public int field=100; 25     public InitializeBlockClass(int value){ 26         this.field=value; 27  } 28     public InitializeBlockClass(){ 29         
30  } 31 }

运行结果:函数

 

若field定义在代码块以前:                                       this

 若在代码块后面:spa

能够得出结果:构造函数的优先级最高,最后必定执行构造函数。设定了字段的初始值与代码块的优先级相同,在没有构造函数的状况下,按照顺序依次执行,获得后面的结果。3d

 

2、静态方法中只容许访问静态数据,那么,如何在静态方法中访问类的实例成员?code

package TestDemo; public class E { int x=3; public static void f(){ E a=new E(); System.out.println(a.x); } public static void main(String[] args) { E x=new E(); x.f(); } }

能够经过在静态方法中将一个对象的引用传入到静态方法中,即可以调用该对象的非静态方法。对象

 

3、使用类的静态字段和构造函数,能够跟踪某个类所建立对象的个数。请写一个类,在任什么时候候均可以向它查询“你已经建立了多少个对象?”。blog

 1 package TestDemo;  2 
 3 public class E {  4     static int x=0;  5  E(){  6         x++;  7  }  8 
 9     void f() { 10         System.out.println("你共建立了"+x+"个"); 11  } 12     public static void main(String[] args) { 13         E a=new E(); 14  a.f(); 15         E b=new E(); 16         E c=new E(); 17         E d=new E(); 18  d.f(); 19  } 20 }

运行结果:it

 

4、 对象判等:编译

 

运行结果为false

当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等 当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。

两个对象的“内容”,实际上是指它们在某一时刻的全部字段的值,“内容相等”,实际上是就“对应字段值”一致。 在Java中要比对两个对象的字段值,能够 “重写(override)”基类的equals()方法。

5、装箱与拆箱问题:

public static void main(String[] args) { int value=100; Integer obj=value;  //装箱

        int result=obj*2;     //拆箱
 }

简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。

反编译结果:

能够看到分别调用了 Integer.valueOf();和 Integer.intValue();方法

看以下代码:

 

两对整数明明彻底同样,为什么一个输出true,一个输出false?

解答:

 

 反编译

方法 Integer.valueOf();源代码:

public static Integer valueOf(int i) { return  i >= 128 || i < -128 ? new Integer(i) : SMALL_VALUES[i + 128]; }

能够看到,当i不符合范围时为建立一个Integer的对象,故不相等。

相关文章
相关标签/搜索