Javaの基本的な列挙型クラス – 詳細な説明
記事ディレクトリ
1. カスタム列挙クラス
概念を紹介します。
列挙型クラスを使い始めたのはいつですか?
小さなケースを紹介します。
私たちの人生には春、夏、秋、冬があります
次に、これらの属性が固定され、名前の変更が許可されなくなり、操作用のクラスを自分で定義できるようになります。
外部からのアクセスや改変は禁止されており、自分たちで作成したものです。
以下はコードのデモです
class Seasons{
private String name;
private String desc;
///这样一写的话 就可以使我们的这个数据变得不可以被外部修改了
private Seasons(String name, String desc) {
this.name = name;
this.desc = desc;
}
public static final Seasons spring=new Seasons("春天","温暖");//我们在内部去使用,不会被修改 优化一下可以加入final修饰符
//以此类推的书写下去 实现自定义枚举类的操作处理 枚举类型的名字使用大写 不要提供get/set方法 因为枚举对象通常只是可读的
//1.构造器私有化 2.本类内部创建一组对象 3.对外暴漏对象 4.可以提供get方法,但是不要提供set,就是为了我们的代码不被外界修改。
}
2.列挙型
これは実際には簡素化に役立つクラスです。このクラスは、ユーザーのエクスペリエンスを向上させるために独自に作成したカスタマイズに基づいて最適化されています。クラス名を enum に変更するだけで済みます。
コードデモ
enum Seasons02{
SPRING("春天","温暖的"),//这句话等同于 public static final Seasons spring=new Seasons("春天","温暖");
WINTER("冬天","寒冷"),
private String name;
private String desc;
private Seasons02(String name,String desc){
this.name=name;
this.desc=desc;
}
3. 列挙時の注意事項
1. 文章を書くときは、自分の主張を先頭に置く必要があります
2. 大文字を使用し、当社の基準に準拠することが最善です。
3. public static Final キーワードは非表示になります
4. デフォルトで Enum クラスを継承します。このクラスのメソッドについては後で説明します。
5. パラメータがない場合は、次の括弧を省略できます (例: SUMMER を直接記述することもできます)。
逆コンパイルには javap を使用します。非表示のコンテンツを表示できます。public static Final を非表示にしたことがはっきりとわかります。ここでは逆コンパイルを使用します。
通常のプロセスでは、ソース ファイルからバイトコード ファイルに直接移動できますが、この逆コンパイルを使用すると、クラス ファイルからソース ファイルに変更できるため、ファイルをより明確に見ることができます。
4. Enum のいくつかのメソッド
簡単な概要
簡単に概要を説明すると、これは enum クラスによって継承され、親クラスの存在形式に相当します。
内部のメソッドを直接使用することもできますので、以下のメソッドを見てみましょう。
1.名前();
Seasons02 spring = Seasons02.SPRING;//这边就代表一个对象
System.out.println(spring.name());//这个就会打印枚举的名字出来
これにより、その時点で定義した列挙定数の名前が出力されます。たとえば、現在の名前は SPRING です。
2.序数();
この関数は、現在の列挙オブジェクトが何番目にあるかを出力するのに役立ちます。
まず定義の順序を示します
次に、定義した順序に従って、システムは 0 から始まる値を割り当てます。
System.out.println(spring.ordinal());//输出的是该枚举对象的次序 是第几个的意思 其实就是编号的意思 我们的编号从0开始
3.値();
このメソッドはさらに興味深いもので、すべての列挙オブジェクトを返すことができます。
この関数の使い方を見てみましょう
Seasons02[] values = Seasons02.values();//也即是说这个方法会返回我们的value值 会帮助我们返回数值出来
戻り値を受け取るために配列を使用しますが、実際にはこのクラスで定義されたすべてのデータが返されます。
次に、このメソッドは拡張された for ループと組み合わせて使用されます。
for ループの強化
まずはこの書き込みを見てみましょう
int[]arr={
1,2,3,4};
for(int i:arr){
//这个代码比较简洁 先说一下这个代码作用是把数组里面的每一个元素输出出来 第一个代表的意思是我们数组里面每一个元素都是int类型 我们给他们取名为i,这个i从arr里面取出来 依次去取直到没有
//输出
}
それでは、列挙型クラスを横断するこの for ループを見てみましょう。実際には、型が変更されるだけで、残りは基本的に整数配列とは何の関係もありません。
Seasons02[] values = Seasons02.values();//也即是说这个方法会返回我们的value值 会帮助我们返回数值出来
for(Seasons02 seasons02:values){
//这个就是增强版for循环//这个会将一下
System.out.println(seasons02);//这里是默认调用我们的tostring方法(我们父类的tosting方法)
}
4.valueOf();
これは別の創作物です
//valueOf: 将字符串转化为枚举对象,要求字符串必须为我们定义的才行
Seasons02 seasons02 = Seasons02.valueOf("SPRING");//这样直接创建一个对象,只要你的字符串是我们的枚举类就行
System.out.println(seasons02.name());
5.比較();
この関数は前に説明した ordinal() と連携します; 関数の使用法、これは違いを生む関数です
まずはこれがどのように機能するかを見てみましょう
System.out.println(Seasons02.SPRING.compareTo(Seasons02.WINTER));//0-3=-3 这个就是我们的输出结果 -3
まずオブジェクトを作成してcompareTo関数を呼び出し、次に比較する他のオブジェクトをパラメータとして作成します。
結果は最初の値から 2 番目の値を引いたものになります
ちょっとした運動
説明する:
/声明week枚举类,其中包含的是星期一至星期日的定义,Monday 。。。。。 //要求大家使用values返回所有的枚举数组,遍历
コードデモ
Tosting の親クラスが使いにくいというリマインダーを書いて、それを自分で書き直すことができるかどうかを確認してください。その時が来たら、自分で書き換えを呼び出します。
public class EnumExerisice02 {
public static void main(String[] args) {
Week[] values = Week.values();
for(Week week:values){
System.out.println(week.toString());
}
}
}
enum Week{
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三"),
THURSDAY("星期四"),
FRIDAY("星期五");
Week(String name) {
this.name = name;
}
private String name;
@Override
public String toString() {
//就是如果达不到预期的输出效果我们可以考虑一下重写的操作处理
return "Week{" +
"name='" + name + '\'' +
'}';
}
}
列挙型ノート
このクラスは、デフォルトで Enum からすべてを継承します。このクラスは他のクラスを継承できません。Java では多重継承が許可されていないことに注意してください。ただし、複数のインターフェイスを実装できるため、インターフェイスを実装することはできます。
結論
現在、列挙クラスに関する知識ポイントは比較的少ないですが、それでも比較的基本的なものであるため、将来的に使用する必要があります。
列挙型クラスは変更が許可されていないと思います。そのため、public static 最終操作が用意されています。
これは定数であり、このように考えることができ、name(); は自分で書いた名前を出力するため、出力時に tostring を書き換えることができ、それでも tostring を書き換える必要があります。
みんなで一緒に働きましょう!!!良いと思ったら高評価して応援してください。