zoukankan      html  css  js  c++  java
  • 动手动脑

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

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

                 在类中的构造方法有一个参数,定义对象时没有参数,所以无法通过编译

    2. 请依据代码的输出结果,自行总结Java字段初始化的规律

    package init;
    public class InitializeBlockDemo {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            
            InitializeBlockClass obj=new InitializeBlockClass();
            System.out.println(obj.field);
            
            obj=new InitializeBlockClass(300);
            System.out.println(obj.field);
        }
    
    }
    class InitializeBlockClass{
        //下面这句在初始化块之前与之后,会影响到field字段的初始值
        //public int field=100;
        
        {
            field=200;
        }
        public int field=100;
        public InitializeBlockClass(int value){
            this.field=value;
        }
        public InitializeBlockClass(){
            
        }
    }

    实验截图:

    package init;
    public class InitializeBlockDemo {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            
            InitializeBlockClass obj=new InitializeBlockClass();
            System.out.println(obj.field);
            
            obj=new InitializeBlockClass(300);
            System.out.println(obj.field);
        }
    
    }
    class InitializeBlockClass{
        //下面这句在初始化块之前与之后,会影响到field字段的初始值
        public int field=100;
        
        {
            field=200;
        }
        //public int field=100;
        public InitializeBlockClass(int value){
            this.field=value;
        }
        public InitializeBlockClass(){
            
        }
    }

    实验截图:

           java会在初始化块和构造方法中进行初始化,当对同一变量进行多次初始化时,会按照顺序进行初始化,并保留最后一次的结果。如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。

    3.观察输出结果,总结出“静态初始化块的执行顺序”

    执行顺序:

           先执行父类的静态初始化块,在执行子类的静态初始化块,在执行父类的实例初始化块、构造方法,子类的实例初始化块、构造函数。先执行静态,在执行实例和构造方法。

    4.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

    package test;
    public class Test {
        public static void main(String[] args)
        {
            Foo.s();
        }
    
    }
    class Foo
    {
        int value1=1;
        static int value2=2;
        public static void s()
        {
            System.out.println("value1="+new Foo().value1);
            System.out.println("value2="+value2);
        }
    }

    实验截图:

             静态方法在访问本类的成员时,只允许访问静态成员,当需要在静态方法中访问本类中的静态成员时,需定义一个该类的对象,然后在方法中通过对象名.静态成员的方法来访问。

    5.两对整数明明完全一样,为何一个输出true,一个输出false?

    public class StrangeIntegerBehavior 
    {
    
        
        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);
        
        }
    
    
    }

    i1和j1调用了integer中的cache方法,所以i1和j1指向的是同一个对象,所以为true。i2和j2创建了新的对象,指向不同,所以结果是false

  • 相关阅读:
    前端 network
    C语言的安装及使用
    c语言
    mongodb
    大型网站--负载均衡架构
    双机热备ROSE HA工作原理
    Linux vmstat命令实战详解
    管理员必备的20个Linux系统监控工具
    linux top命令详解
    linux命令TOP参数load average详解[转]
  • 原文地址:https://www.cnblogs.com/liujinxin123/p/9821215.html
Copyright © 2011-2022 走看看