zoukankan      html  css  js  c++  java
  • 2020.10.10收获(动手动脑三)

    1、这两种方式定义的变量是一样的吗?

    早期经常这样定义变量
            int value=100;
    前面的示例中这样定义变量
            MyClass obj = new MyClass();

    这两种变量是不一样的。

    前者是原始数据类型,例如int,float之类的变量,当声明一个原始数据类型的变量时,实际上并没有创建一个对象,此变量=null。

    后者是引用类型变量,“引用”一个对象的变量称为“引用类型”的变量,定义一个原始类型的变量时,会马上给其分配内存,而对象变量的初始化中,该变量若不引用一个真实的对象,则必须声明为null。而且引用对象后的对象变量,且如果不再使用此变量,将会回收类定义的对象所占用的内存。

     

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

     

     注:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

    3、如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?请依据代码的输出结果,自行总结Java字段初始化的规律。

    复制代码
    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编程中,字段的初始化顺序是
    1. 类加载时直接初始化静态字段;

    2. 类加载时调用静态方法初始化静态字段;

    3. 实例化对象时,在调用构造函数之前代码块中初始化字段;

    4. 实例化对象时,在调用构造函数之时初始化字段;

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

    复制代码
    public class stat {
        int a = 3;
        static int b = 4;
    
        public static void ceshiyi() {
            System.out.println("非静态变量a=" + new stat().a);
            System.out.println("静态变量b=" + b);
        }
    
        public static void main(String[] args) {
            stat.ceshiyi();
            stat i = new stat();
            System.out.println("a=" + i.a);
    
        }
    }
    复制代码

     

     

  • 相关阅读:
    Azkaban的使用
    Azkaban安装
    Kafka 启动失败,报错Corrupt index found以及org.apache.kafka.common.protocol.types.SchemaException: Error reading field 'version': java.nio.BufferUnderflowException
    Kafka 消费者设置分区策略及原理
    Kafka利用Java API自定义生产者,消费者,拦截器,分区器等组件
    zookeeper群起总是有那么几个节点起不来的问题解决
    flume 启动agent报No appenders could be found for logger的解决
    Flume 的监控方式
    Flume 自定义 组件
    Source r1 has been removed due to an error during configuration java.lang.IllegalArgumentException: Required parameter bind must exist and may not be null & 端口无法连接
  • 原文地址:https://www.cnblogs.com/ltw222/p/13797300.html
Copyright © 2011-2022 走看看