1.
public class test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Foo obj1=new Foo(); Foo onj2=new Foo(); System.out.println(obj1==obj2); } } class Foo{ int value=100; }
截图:
总结:
当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等
当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。
引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。
2.以下代码为何无法通过编译?哪儿出错了?
推出结论:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
3.
class InitializeBlockClass { {field=200;} public int field=100; public InitializeBlockClass(int value){this.field=value;} public InitializeBlockClass(){} } public class test { public static void main(String[] args) { // TODO Auto-generated method stub InitializeBlockClass obj=new InitializeBlockClass(); System.out.println(obj.field); obj=new InitializeBlockClass(300); System.out.println(obj.field); } }
截图:
100
300
总结规律:
(1)执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
(2)执行类的构造函数。
(3)类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。
4.
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(); } }
结果:
总结:静态初始化块的执行顺序
静态初始化块只执行一次。
创建子类型的对象时,也会导致父类型的静态初始化块的执行。
5.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
public class ButtonFactory { private static ButtonFactory _instance = null; public static ButtonFactory getInstance() { if(null == _instance) _instance = new ButtonFactory(); return _instance; } }
6使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”
public class Objectnumber { public static void main(String[] args) { @SuppressWarnings("unused") Number n1=new Number(); @SuppressWarnings("unused") Number n2=new Number(); @SuppressWarnings("unused") Number n3=new Number(); System.out.println("目前你已经创建了"+Number.count+"个对象"); } } class Number { static int count; public Number() {count++;} int GetCount(){return count;} }
来源:https://www.cnblogs.com/bailanglang/p/5982886.html