424讲枚举、注解、作业
内容纲要

424讲枚举、注解、作业

file

file

file

自定义枚举

file

file

file

步骤:

1.讲构造器私有化,目的防止 直接 new

2.去掉 setXxx 方法,防止属性被修改

3.在Season 内部,直接创建固定的对象

4.优化,可以加入final 修饰符

enum 关键字实现枚举

file

file

语法:

  1. 使用关键字 enum 替代 class
  2. public static final Season Spring = new Season("春天","温暖") 直接使用

​ Spring("春天","温暖") 解读:常量名( 实参列表 )

  1. 如果有多个常量 ( 对象 ),使用 , 号间隔即可
  2. 如果使用enum 类来实现枚举,要求将定义常量对象写在(属性)前面

枚举类细节

file

file

file

  • 如果我们使用的无参构造器创建枚举对象,则实参列表和小括号都可以省略

file

file

file

  • Gender2 boy = Gender2.BOY; 中Gender2.BOY 是枚举类中的BOY方法。。。。。

file

  • 使用关键字enum 时,会隐式继承Enum 类。

file

Enum 枚举类 常用的方法

file

compareTo 方法是前面的编号-后面比较的编号的值。。

  • 注意 values( ) 方法在Enum类中是看不到的,只有反编译能看到(如前面的javap的图)

file

package com.Liao_.enumeration;

public class EnumExercise {
    public static void main(String[] args) {
        Week[] weekArr = Week.values();
        for(Week arr : weekArr){
            System.out.println(arr.toString());
        }
    }
}
enum Week {
    Monday("星期一"),Tuesday("星期二"),Wednesday("星期三"),
    Thursday("星期四"),Friday("星期五"),Saturday("星期六"),Sunday("星期天");

    private String week;

    private Week(String week){
        this.week = week;
    }
    @Override
    public String toString(){
        return week;
    }
}
  • 使用了enum 关键字后,他就不能再继承其它类了,因为enum 会隐式继承 Enum,而Java 是单继承机制。
  • 枚举类和普通类一样,可以实现接口,如: enum 类名 implements 接口1,接口2 { }

file

注解

file

file

@Override 注解

file

file

file

  • @Override 使用

file

@Deprecated 注解

    1. @Deprecated 修饰某个元素,表示该元素已经过时了
    1. 即不推荐使用,但是仍然可以使用

file

file

  • @Deprecated 注解原码

file

@Deprecated 的作用可以做到版本升级的兼容过渡使用

@SuppressWarnings 注解

file

  • 使用前

file

  • 使用后。。。当然@SuppressWarnings({"ALL"}) 能抑制全部警告信息。

file

  • 关于@SuppressWarnings 作用范围是和放置的位置相关。

file

通常我们可以放在方法或者语句上,,放在类上更省事

file

file

JDK的元 Annotation(元注解, 了解)

file

@Retention 注解

file

file

  • 例如

file

file

@Target 注解

  • 用于修饰 注解能修饰哪些元素

file

@Documented 注解

可以在生成文档的时候保留其注解

file

file

@Inherited 注解

file


作业

file

  • 注意一下。静态成员变量只随着类的加载而执行1次。静态变量属于类,JAVA8以 后认为静态成员变量存放在堆中

file

package com.Liao_.Homework02;
public class Frock {
    private static int currentNum = 100000;//作为衣服出厂的序列号起始值
    private int serialNumber;
    public int getSerialNumber(){
        return serialNumber;
    }
    public Frock(){
        serialNumber = getNextNum();
    }
    public static int getNextNum(){ //获取唯一序列号  //我调你的静态方法不会惊动构造器
        currentNum += 100;
        return currentNum;
    }
}
package com.Liao_.Homework02;
public class TestFrock {
    public static void main(String[] args) {
        System.out.println(Frock.getNextNum());
        System.out.println(Frock.getNextNum());

        Frock frock1 = new Frock();
        System.out.println(frock1.getSerialNumber());
        Frock frock2 = new Frock();
        System.out.println(frock2.getSerialNumber());
        Frock frock3 = new Frock();
        System.out.println(frock3.getSerialNumber());
    }
}

file

package com.Liao_.Homework03;

public abstract class Animal {
    public abstract void shout();
}
class Cat extends Animal{
    @Override
    public void shout(){
        System.out.println("猫会喵喵");
    }
}
class Dog extends Animal{
    @Override
    public void shout() {
        System.out.println("狗会汪汪");
    }
}
class test {
    public static void main(String[] args) {
        Animal cat = new Cat();
        cat.shout();
        Animal dog = new Dog();
        cat.shout();
    }
}

file

package com.Liao_.Homework04;
interface Calculate {
//    1.计算器接口有work方法,功能是运算,
    double work(double n1,double n2);
}
package com.Liao_.Homework04;
public class CCellphone {
/*
* 1.计算器接口有work方法,功能是运算,有一个手机类Cellphone,
*   定义方法testWork测试计算功能,调用计算接口的work方法,
* 2.要求调用CellPhone对象 的testWork方法,使用上匿名内部类
* */
    public  double testWork(Calculate calculate,double n1,double n2){
        //这里不关心work方法如何实现,其将在匿名内部类中重写。
        return calculate.work(n1,n2);
    }
}
class Test{
    public static void main(String[] args) {
        CCellphone cellphone = new CCellphone();
        //通过匿名内部类重写接口的方法,直接调用testWork方法实现n1 + n2;
        System.out.println(cellphone.testWork(new Calculate(){
            @Override
                public double work(double n1,double n2){
                    return n1 + n2;
            }
        },100,200));
        //通过匿名内部类重写接口的方法,直接调用testWork方法实现n1 * n2;
        System.out.println(cellphone.testWork(new Calculate() {
            @Override
            public double work(double n1, double n2) {
                return n1 * n2;
            }
        },10,30));
    }
}

file

file

file

file

file

package com.Liao_.Homework05;
public class Homework05 {
    public static void main(String[] args) {
        A a = new A();
        a.test();
    }
}
class A {
    private String name = "aaa";
    public void test(){
        class B {
            private final String name = "BBB";
            public void show(){
                System.out.println("局部内部类B中的show()方法" + name);
            }
        }
        B b = new B();
        b.show();
    }
}

file

package com.Liao_.Homework06;
import java.util.Scanner;
interface Vehicle {
    void work();
}
//实现work接口
class Horse implements Vehicle{

    @Override
    public void work() {
        System.out.println("交通工具骑马被调用");
    }
}
//实现work接口
class Boat implements Vehicle{
    @Override
    public void work(){
        System.out.println("交通工具坐船被调用");
    }
}
//分别获取交通工具Horse和Boat
class Industry {
    public void getHorse(){
        new Horse().work();
    }
    public void getBoat(){
        new Boat().work();
    }
}
//有name和Vehicles属性,在构造器中为两个属性赋值
//实例化Person对象 "唐僧" ,要求一般情况下用Horse作为交通工具,
//遇到大河时用Boat作为交通工具
class Person {
    private String name;
    private String vehicles;
    public static void main(String[] args) {
        Scanner myScanner = new Scanner(System.in);
        String str = myScanner.next();
        Industry industry = new Industry();
        if(str.equals("river")){
            industry.getBoat();
            return;
        }
        industry.getHorse();
    }
}

//上面代码没分析好

//下面听老韩讲了之后改进的

package com.Liao_.Homework06;
public class Homework06 {
    public static void main(String[] args) {
        Person tang = new Person("唐僧", Industry.getHorse());
        tang.passRiver();
        tang.common();
        tang.fireMountain();
    }
}

interface Vehicle {
    void work();
}
//实现work接口
class Plane implements Vehicle{
    @Override
    public void work(){
        System.out.println("过火焰山太热,用飞机");
    }
}

//实现work接口
class Horse implements Vehicle {

    @Override
    public void work() {
        System.out.println("交通工具骑马被调用");
    }
}

//实现work接口
class Boat implements Vehicle {
    @Override
    public void work() {
        System.out.println("交通工具坐船被调用");
    }
}

//分别获取交通工具Horse和Boat
class Industry {
    //保证马一直不换。可以使用单例模式饿汉模式。
    private Industry(){}//构造器私有化
    //私有化创建Horse对象(static修饰加载类的时候就创建)
    private static Horse horse = new Horse();
    public static Horse getHorse() { //返回创建了的对象
        return horse;
    }

    public static Boat getBoat() {
        return new Boat();
    }

    public static Plane getPlane(){
        return new Plane();
    }
}

//有name和Vehicles属性,在构造器中为两个属性赋值
//实例化Person对象 "唐僧" ,要求一般情况下用Horse作为交通工具,
//遇到大河时用Boat作为交通工具
class Person {
    private String name;
    public Vehicle vehicles;

    public void setName(String name) {
        this.name = name;
    }

    public Person(String name, Vehicle vehicles) {
        setName(name);
        this.vehicles = vehicles;
    }

    public void passRiver() {
        //判断构造器传入的是否为Boat(),如果是就不再创建
        if (!(vehicles instanceof Boat)) {
            vehicles = Industry.getBoat();
        }
        vehicles.work();
    }

    public void common() {
        if (!(vehicles instanceof Horse)) {
            vehicles = Industry.getHorse();
        }
        vehicles.work();
    }

    public void fireMountain() {
        if(!(vehicles instanceof Plane)){
            vehicles = Industry.getPlane();
        }
        vehicles.work();
    }
}

file

package com.Liao_.Homework07;
class test99 {
    public static void main(String[] args) {
        Car car = new Car(44);
        car.f1();
    }
}

public class Car {
    double temperature;
    public Car(double temperature) {
        this.temperature = temperature;
    }
    public void f1() {
        class Air {
            //吹风功能的方法
            public void flow() {
                //如果车内温度高于40°就吹冷空气,
                //如果车内温度低于0°吹暖风。
                //否则关掉空调。
                if(temperature > 40){
                    System.out.println("冷空气");
                } else if (temperature < 0) {
                    System.out.println("热风");
                }else
                System.out.println(" 关掉空调");
            }
        }
        new Air().flow();
    }
}

//上面我写的。。写成局部内部类了。。虽然也能用。

//下面老韩写的成员内部类,成员内部类,通过 getAir( ) 方法得到一个返回对象值。

file

file

package com.Liao_.Homework08;
class Test88 {
    public static void main(String[] args) {
        Color green = Color.GREEN;
        Color.RED.show();
    }
}

enum Color implements inter1{
    RED(255,0,0),BLUE(0,0,255),BLACK(0,0,0),YELLOW(255,255,0),GREEN(0,255,0);

    private int redValue;
    private int greenValue;
    private int blueValue;

    Color(int redValue, int greenValue, int blueValue) {
        this.redValue = redValue;
        this.greenValue = greenValue;
        this.blueValue = blueValue;
    }

    @Override
    public void show() {
        System.out.println("属性值为" + redValue + "," + greenValue + "," + blueValue);
    }
}
interface inter1 {
    void show();
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇