[Java]变量及其初始化 与 类对象的初始化

1 变量的初始化

1.1 变量的【定义】

1.2 变量的【作用域】

1.3 变量的【初始值】

1.4 补充:缓存变量

1.5 变量的【分类】与【未初始化情况】

2 类对象

2.1 类对象的初始化/构造过程

  • 1 【对象】的初始化流程

  • 2 实验
class Base{
    static {  System.out.println("[Base:static area]"); }//step1
    { System.out.println("Base:instance area"); }//step3
    Base(){ System.out.println("<Base:constructor>"); }//step4
}
public class Create extends Base{
    static {  System.out.println("[Create:static area]"); }//step2
    {  System.out.println("Create:instance area");  }//step5
    Create(){//step6
//        super();//默认:首先调用super()
        System.out.println("<Create:constructor>");
    }
    public static void main(String args[]){ Create create = new Create(); }
}
//Output
[Base:static area]
[Create:static area]
Base:instance area
<Base:constructor>
Create:instance area
<Create:constructor>
  • 3 360公司2020春招技术C卷试题

    (题目小有改动)

class Clazz {
    public static int x;
    public boolean z;
    public static String printX(Clazz clazz) { return "x:" + clazz.x; }
    public static String printZ(Clazz clazz){ return "z:" + clazz.z; }
}

public class Singleton {
    private static Singleton singleton = new Singleton();
    public int counter0;//[值域/类的属性 →基本类型变量] 默认 初始化为0
    public static int counter1;//[值域/类的属性] 默认 初始化为0
    public static int counter2 = 0;//[值域/类的属性]
    public Clazz clazz;//[值域/类的属性 → 引用类型变量]
    private Singleton() {
        int x;//[局部变量]
//        System.out.println(x);//局部变量未初始化 ∴编译时报错 [局部变量]
        System.out.println(Clazz.printX(clazz));//x:0 /[值域/类的属性 → 引用类型变量 de 静态属性]
        System.out.println(Clazz.printZ(clazz));//运行时报错 (ExceptionInInitializerError) [值域/类的属性 → 引用类型变量 de 非静态属性]
        counter0++;
        counter1++;
        counter2++;
    }
    public static Singleton getInstance(){ return singleton; }
    public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();
        System.out.println(singleton.counter0);//1
        System.out.println(Singleton.counter1);//1
        System.out.println(Singleton.counter2);//0
    }
}
1
1
0

原文地址:https://www.cnblogs.com/johnnyzen/p/12586027.html

时间: 2024-10-09 16:13:21

[Java]变量及其初始化 与 类对象的初始化的相关文章

c++——继承类中的子对象和基类对象的初始化

先给结论: (1)派生类中的基类子对象和子对象必须初始化,初始化在派生类的构造函数的初始化列表中,如果初始化列表中没有进行初始化,则调用缺省的构造函数进行初始化. (2)派生类构造函数的调用顺序: 基类的构造函数 子对象类的构造函数 派生类的构造函数 例子 class point1 { public: point1(); point1(int i); virtual ~point1(); private: int x; }; point1::point1() { x=1; cout<<&quo

C++ 类对象的初始化顺序 ZZ

C++构造函数调用顺序 1.     创建派生类的对象,基类的构造函数优先被调用(也优先于派生类里的成员类): 2.    如果类里面有成员类,成员类的构造函数优先被调用:(也优先于该类本身的构造函数) 3.     基类构造函数如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序: 4.     成员类对象构造函数如果有多个成员类对象,则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序: 5.     派生类构造函数,作

java socket之传输实体类对象

一.TCP编程     TCP协议是面向连接的.可靠地.有序的,以字节流的方式发送数据.java实现TCP通信依靠2个类:客户端的Socket类和服务器端的ServerSocket类. 基于TCP通信的Socket模型如下: Socket通信的实现步骤如下: 1.    创建服务器端Socket:ServerSocket和客户端Socket:Socket: 2.    打开连接到Socket的InputStream/OutputStream; 3.    按照协议对Socket进行读写操作: 4

JAVA中 Map转换实体类对象简单实现 JSON

原文链接:https://blog.csdn.net/qq_23140197/article/details/86503875   (侵删) 开发的过程中往往依赖的表过多直接按Map来传递数值,某些场景需要把Map转换为实体类,这里贴一个最简洁的方法,依赖阿里的FastJSon. maven引入 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId>

【解惑】类与对象的初始化问题

★ 类常量 Java类常量(final修饰) 的值在编译阶段就已经写入了class文件的常量池中(可见<Class文件内容及常量池 >).该类在JVM中运行的任何阶段都不可能改变这个常量值.这也就形成了Java常量定义的两个语法规定:(1) Java类常量必须在类中声明的时候就赋给特定的值.(2) Java类常量绝对不允许赋第二次值. 下面是Java类常量的初始化代码: Java代码 //代码1: 类常量的初始化 public class Init{ //定义类常量ITEM,声明的同时必须赋值

java 静态变量生命周期(类生命周期)

Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 销毁:类被卸载时,静态变量被销毁,并释放内存空间.static变量的生命周期取决于类的生命周期 类初始化顺序: 静态变量.静态代码块初始化 构造函数 自定义构造函数 结论:想要用static存一个变量,使得下次程序运行时还能使用上次的值是不可行的.因为静态变量生命周期虽然长(就是类的生命周期),但是当程序执行完,也就是该类的所有对象都已经

Java类、实例初始化的顺序

求如下 java 代码的输出?? class T implements Cloneable{ public static int k = 0; public static T t1 = new T("t1"); public static T t2 = new T("t2"); public static int i = print("i"); public static int n = 99; public int j = print(&quo

Objective-C对象之类对象和元类对象

作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/8592492 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢! 作为C语言的超集,面向对象成为Objective-C与C语言的最大区别,因此,对象是Objective-C中最重要的部分之一.目前面向对象的语言有很多,Objective-C中的对象又和其他语言中的对象有什么区别呢?下面来简单介绍Objectiv

黑马程序员_类对象创建代码的执行顺序测试总结

class StaticCode { // 类的非静态成员变量(实例变量)定义语句: // 作用:用来存储对象的特有数据的成员变量. // 运行:当类对象被创建时就执行,按照顺序自上而下执行,和构造代码块平级.(即当有多个构造函数 // 代码块和多个非静态成员变量时,JVM按照自上而下的顺序来执行所有语句,包括构造代码块里的代码 // 和非静态成员的声明.) // 存储位置:非静态变量位于堆内存中的对象实体中. int num = 3; // 构造代码块 { System.out.println