• 类变量与实例变量


    public class Cat {
    String name;
    int age;
    static void test(){
    System.out.println("test static");
    }
    public Cat(String name,int age){
    System.out.println("执行构造器");
    this.name = name;
    this.age = age;
    
    }
    {//这里一定要用花括号
    System.out.println("执行非静态初始化块");
    weight =2.0;
    
    }
    double weight =2.3;
    /**
    * 分两步执行:
    * double weight;
    * weight = 2.3;(这条语句将会被提取到java类的构造器中执行,与非静态初始化代码块合并并且地位平等)
    */
    /**
    * 初始化块中指定初始值和定义weight时指定初始值都属于对该实例变量执行的初始化操作,它们的
    * 执行顺序与它们在源程序中的排列顺序相同
    */
    public String toString(){
    return "name:"+name+","+"age:"+age+","+"weight:"+weight;
    }
    public static void main(String[] args) {
    Cat cat = new Cat("kitty",2);
    System.out.println(cat);
    Cat cat2 = new Cat("tom",3);
    System.out.println(cat2);
    }
    /**
    * console:
    * 执行非静态初始化块
    * 执行构造器
    * name:kitty,age:2,weight:2.3
    * 执行非静态初始化块
    * 执行构造器
    *name:tom,age:3,weight:2.3
    *总结:
    *1、同一个jvm中,每个类只对应一个Class对象但每个类可以创建多个java对象
    *2、用static修饰的成员变量是类变量,属于类本身,通过类访问
    *3、没有使用static的成员变量是实例变量,属于该类的实例
    *4、实例变量的初始化时机如上例所示
    *
    */
    }
    

      用jdk提供的javap工具了解java编译器的机制。

    1、javac Cat.java

    2、javap -c Cat.class

      

     3、当创建任何java对象时,程序总会先一次调用每个父类非静态初始化块、父类构造器(总是从Object开始)执行初始化,最后

    才会调用本类的非静态初始化块、构造器执行初始化。

  • 相关阅读:
    Java 中Timer和TimerTask 定时器和定时任务使用的例子详解
    CentOS7下安装Scrapy步骤详解
    使用C++实现求最大公约数和最小公倍数算法详解
    windows ruby on rails搭建搭建
    php爬虫选择器-来自phpspider
    markdown增强显示插件
    PHP7以上的异常处理变化
    open-php开源项目:php-code-generator PHP流行框架的curd的代码生成器
    laravel withoutOverlapping导致执行脚本延迟或者失效问题
    vcpkg国内镜像设置
  • 原文地址:https://www.cnblogs.com/yansum/p/6194556.html
Copyright © 2020-2023  润新知