• java-04类和对象课堂练习


    1.请运行并输入以下代码,得到什么结果

    public class Test {
    
        public static void main(String[] args){
            Foo obj1=new Foo();
            Foo obj2=new Foo();
            System.out.println(obj1==obj2);
            
        }
    }
    
    class Foo{
        int value=100;
    }

    结果:

    分析:两个并不属于同一个对象

    2.以下代码为何无法通过编译?哪儿出错了?

    public class Test {
    
        public static void main(String[] args){
            Foo obj1=new Foo();
            
            }
    }
    
    class Foo{
        int value;
        public Foo(int initValue){
            value=initValue;
        }
    }

    原因:构造函数Foo未被创建。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

    3.java字段初始化的规律

    说要看先定义的和其构造函数的赋值。

    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.如何在静态方法中访问类的实例成员

    参考了百度给出的代码

    public class Try {
       private static Try _instance = null;
       public static  Try getInstance()
       {
          if(null == _instance)
          _instance = new Try();
          return _instance;
       }
       public static void main(String[] args)
       {
           System.out.println(_instance);
       }
    }

    在静态方法中访问类的实例变量需首先进行类的实例化,除了加static修饰,还可以先new创建一个对象,通过对象去调用成员方法和变量

    6.Integer类的装箱和拆箱到底是怎样实现的?

          装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Integer的intValue方法。其他的也类似,比如Double、Character。因此可以用一句话总结装箱和拆箱的实现过程:装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。

    7.你已经创建了多少对象?

    public class ObjectNumber {
    
       public static void main(String[] args) {  
      
           Num obj1,obj2,obj3;   
           obj1 = new Num();
           obj2  = new Num();  
           obj3=new Num();
           obj1.getNum();
       }  
    }
    
    class Num
    {   
         public static int a=0;   
    {   
         a++;  
    }  
    
     public void getNum()   
    {   
          System.out.println("已经创建了"+a+"个对象");  
    }  
    
    }

  • 相关阅读:
    pycharm过期后,修改hosts文件?
    三种格式化方式
    virtualenv安装及使用
    二分查找以及单例模式
    目录总览
    SQLAlchemy
    Redis
    linux 安装虚拟机
    shell基本命令
    Linux 命令大全
  • 原文地址:https://www.cnblogs.com/lzxw/p/5984764.html
Copyright © 2020-2023  润新知