zoukankan      html  css  js  c++  java
  • 类变量与实例变量

    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开始)执行初始化,最后

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

  • 相关阅读:
    day43——celery简介、celery小例子
    day42——queue模块
    day41——多进程的消息队列、消息队列pipe
    在风口浪尖后,如何有效控制权限?
    微服务架构下代码管理规范
    微服务架构下介质管理规范
    微服务架构下组件管理规范
    微服务架构下文档管理规范
    微服务与DevOps关系
    Springboot集成SpringData JPA
  • 原文地址:https://www.cnblogs.com/yansum/p/6194556.html
Copyright © 2011-2022 走看看