• 10.17动手动脑


    1.如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?

    程序源代码

    package zihao;
    
    class InitalizeBlockClass 
    {
        {
            field=200;
        }
        public int field =100;
        public InitalizeBlockClass(int value)
        {
            this.field=value;
        }
        public InitalizeBlockClass() {
            
        }
        public static void main(String[] args)
        {
            InitalizeBlockClass obj=new InitalizeBlockClass();
            System.out.println(obj.field);
            obj=new InitalizeBlockClass (300);
            System.out.println(obj.field);
        }
    }

    程序执行结果

    分析:

    在Java编程中,字段的初始化顺序是

    1. 类加载时直接初始化静态字段;

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

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

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

    执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个排在前面

    类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”

    2.

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

    java类的成员变量有俩种:  一种是被static关键字修饰的变量,叫类变量或者静态变量 另一种没有static修饰,为实例变量  类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。  而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。

    源程序代码

    package boke;
    
    public class Jingshili 
    {
        static int i;、
    int b=3;
    public static void main(String args[]) { System.out.println(i); int i=1; System.out.println(i); //创建一个实例 Jingshili a=new Jingshili(); System.out.println(a.b); } }

    程序执行结果截图

    System.out.println(i);创建一个实例之后,可以通过一个实例来访问实例变量
  • 相关阅读:
    SDN第二次上机作业
    全面而清晰的网络流
    source命令详解
    C++ 优先队列存放自定义类型的指针时自定义优先级失效的解决方法
    find命令查找文件和文件夹
    OOAD
    NULL与nullptr
    Segment fault 常见原因
    虚函数的用法
    使用gdb调试段错误
  • 原文地址:https://www.cnblogs.com/xuzhaoyang/p/7699409.html
Copyright © 2020-2023  润新知