在类中创建本类对象(与枚举类似)

本文探讨了Java中类的加载过程及静态变量的初始化顺序。通过具体代码示例展示了在类构造过程中,静态变量与非静态变量初始化的区别,以及它们如何影响类的实例化。
/**
 * 类中实例化本类必须要用static关键词修饰,否则会陷入无限迭代
 * 这个例子也解释了枚举类的构造器中为什么不能引用static变量
 *
 */
class A {
    /**
     * 本句话的解释:
     * 执行到这句话时会跳过本句话后static修饰的域的初始化,
     * 但是普通的域初始化不会跳过,然后再调用本类构造器
     */
    public static  A a = new A("a");
    {
        System.out.println("haha");
    }
    static{
        System.out.println("static");
    }
    private static Object obj = new Object();
    private static int j = haha("j");
    {
        System.out.println("haoba");
    }
    public static  A b = new A("b");
    public A(String s) {
        System.out.println(s + ":" + obj);
    }

    public static int haha(String s){
        System.out.println(s);
        return 3;
    }
}

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
//      System.out.println(A.i);
        new A("c");
    }
}//output:
haha
haoba
a:null
static
j
haha
haoba
b:java.lang.Object@8bfc25c
haha
haoba
c:java.lang.Object@8bfc25c

在此也简单说下类的加载:
任何调用类中static域的行为都会引起该类的加载(我们也可以认为构造器也是static关键词修饰的),加载的顺序是:先加载static成员变量,再加载普通成员变量(如果调用的是构造器),最后调用构造器。

本文章仅限于记录问题

### Java中通过枚举创建实例对象的方法 在Java中,枚举是一种特殊的,主要用于定义一组固定的常量。枚举默认继承自`java.lang.Enum`,并且不能显式地继承其他[^1]。枚举的所有实例必须在枚举的第一行显式列出,这些实例会被系统自动添加`public static final`修饰[^2]。 以下是通过枚举创建实例对象的具体方法: #### 1. 定义枚举 枚举可以通过`enum`关键字定义。例如,定义一个表示季节的枚举`Season`: ```java public enum Season { SPRING("春天"), SUMMER("夏天"), AUTUMN("秋天"), WINTER("冬天"); private final String name; private Season(String name) { this.name = name; } public String getName() { return name; } } ``` 上述代码中,枚举`Season`包含四个实例:`SPRING`、`SUMMER`、`AUTUMN`和`WINTER`。每个实例都有一个`name`属性,并通过构造器赋值[^5]。 #### 2. 创建枚举的实例 枚举的实例是通过直接引用枚举常量创建的,无需使用`new`关键字。例如: ```java Season currentSeason = Season.SPRING; System.out.println(currentSeason.getName()); // 输出: 春天 ``` #### 3. 枚举的特点 - 构造器只能使用`private`权限修饰符,确保外部无法通过`new`关键字创建新的实例[^1]。 - 枚举的所有实例在编译时就已经确定,且是`public static final`型的常量[^2]。 - 枚举可以包含属性、方法以及构造器,类似于普通,但其主要用途是定义一组固定的常量[^3]。 #### 4. 示例代码 以下是一个完整的示例,展示如何通过枚举创建实例并调用其方法: ```java public class EnumExample { public static void main(String[] args) { // 创建枚举实例 Season currentSeason = Season.SUMMER; // 调用枚举实例的方法 System.out.println("当前季节: " + currentSeason.getName()); // 输出: 当前季节: 夏天 } } // 枚举定义 enum Season { SPRING("春天"), SUMMER("夏天"), AUTUMN("秋天"), WINTER("冬天"); private final String name; private Season(String name) { this.name = name; } public String getName() { return name; } } ``` ### 注意事项 - 枚举的所有实例必须在第一行定义,且以逗号分隔,最后一个实例后需要加分号[^4]。 - 枚举可以重写`toString()`方法或提供其他自定义方法,以便更好地满足业务需求[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值