Java学习笔记(九)

IDEA 断点调试

设置断点,一步步的查看代码的执行过程是 debug 的重要途径。
这里介绍 IDEA 对 java 进行断点调试的一些基本操作。

快捷键:

  • F7 跳入,即跳入方法体内
  • F8 跳过,即逐行执行
  • shift + F8 跳出,即跳出方法体
  • F9 执行到下一个断点

设置断点只需单击代码左边的数字编号和代码之间的空白处即可。

通常,点击 F7 并不能进入源码查看方法,而是需要强制跳入,快捷键 alt + shift + F7。或者是更新一下 IDEA 的设置。

  1. 点击左上角的 File,选择 Setting
  2. 选择 Build,Exception,Deployment
  3. 选择 Debugger,再选择 Stepping
  4. 将 Do not step into the classes 取消勾选,或者是将其下方框内的部分源码类取消勾选。一般选择 java, javax 就够了

IDEA 快捷键

IDEA 有很多方便日常开发的快捷键,可以通过 settings -> Keymap -> Editor Actions 查看所有的快捷键,也可对已有的进行增改
在这里插入图片描述
而且,在开发时可以通过 ctrl + j 快捷键显示所有的快捷键

IDEA 运行时加命令行参数

  1. 在 IDEA 右上角的执行标志(绿色三角)左侧的下拉框中选择 Edit Configurations
    在这里插入图片描述
  2. 在出现的设置页面中,找对应的 Program Arguments选项,在里面填入参数即可。注意,字符串由空格隔开;不同版本 IDEA 选项位置可能不一样,但是都在这个设置里
  3. 在这里插入图片描述
    添加参数后效果:
    在这里插入图片描述
    代码:
public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }

执行情况:

jerry
is
a
dog

枚举类

自定义枚举

  1. 构造器私有化,去掉属性的 Set 方法,防止属性被修改
  2. 在枚举类的内部创建固定的对象,使用 static + final 修饰
  3. 枚举对象名通常全部大写,这是常量的命名规范
  4. 枚举对象也可以有多个属性

例子:

public class EnumerationTest01 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
        System.out.println(Season.SUMMER);
    }
}

class Season {
    private String name;
    private String desc;

    // 定义了四个对象,固定下来不能修改
    // 加入 final 优化
    public static final Season SPRING = new Season("春天", "温暖");
    public static final Season SUMMER = new Season("夏天", "炎热");
    public static final Season AUTUMN = new Season("秋天", "凉爽");
    public static final Season WINTER = new Season("冬天", "寒冷");
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return this.name;
    }
    public String getDesc() {
        return this.desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

使用 enum 关键字实现

  1. 使用关键字 enum 替代 class
  2. public static final Season SPRING = new Season(“春天”, “温暖”) 改为 SPRING(“春天”, “温暖”) , 即 常量名(实参列表)
  3. 如果有多个常量,使用 , 号间隔,最后一个要有分号
  4. 如果使用 enum ,需要将定义的常量对象写在最前面

例子:

enum Season2 {

    // 使用了 enum 实现枚举类
    // 1. 使用关键字 enum 替代 class
    // 2. public static final Season SPRING = new Season("春天", "温暖")
    //  改为 SPRING("春天", "温暖") , 即 常量名(实参列表)
    // 3. 如果有多个常量,使用 , 号间隔
    // 4. 如果使用 enum ,需要将定义的常量对象写在最前面

    SPRING("春天", "温暖"),
    SUMMER("夏天", "炎热"),
    AUTUMN("秋天", "凉爽"),
    WINNER("冬天", "寒冷");
    private String name;
    private String desc;

    private Season2(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return this.name;
    }
    public String getDesc() {
        return this.desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

注意:

  • 当使用 enum 构建枚举类时,在底层会默认继承 Enum 类,而且是一个 final 类
  • 传统的 public static final Season SPRING = new Season(“春天”, “温暖”) 改为 SPRING(“春天”, “温暖”)
  • 而若使用无参构造器创建枚举对象,则实参列表和小括号都可以省略,即可以只写常量名
  • 如果有多个常量,使用 , 号间隔,最后一个要有分号
  • 如果使用 enum ,需要将定义的常量对象写在最前面
  • enum 关键字修饰的枚举类不能继承其他类
  • 枚举类也可以实现接口

Enum 类方法

方法名功能
name返回当前的枚举常量名称
ordinal输出当前枚举常量的顺序(编号,从0开始)
values返回一个枚举对象数组,包含所有已经定义的枚举常量,数组中元素顺序与定义顺序相同
valueOf将一个字符串转换为枚举常量,但是要求字符串对应的枚举常量应该存在
compareTo比较两个枚举常量的编号大小( A.compareTo(B),底层是 A的编号 - B的编号

注解(Annotation)

  • 注解也被称为元数据,用于修饰解释代码的数据信息(包、类、方法、属性等)
  • 和注释一样,注解不影响程序逻辑,但是注解可以被编译运行,相当于嵌入进代码的补充信息
  • 在 JavaSE 中,主要用来标记过时的功能和忽略警告

使用 Annotation 时要在其前面加上 @ 符号,并把该 Annotation 当成一个修饰符使用,用于修饰它支持的程序元素

三个基本的 Annotation:

  • @Override:限定某个方法,表示该方法是重写父类的方法,该注解只能用于该方法
  • @Deprecated:用于表示某个程序元素(类、方法)已经过时
  • @SuppressWarning:抑制编译器警告

@Override

  • 一般放在子类重写的父类方法的上一行,只能修饰方法
  • 即使不加,也不影响子类重写父类的方法
  • 但是,如果加了,子类就一定要重写父类的方法(不能只是声明,但是方法体内为空,编译器会检查),否则就会报编译错误

@interface

它不是 interface 接口类,而是代表注解类。
@Override 就是一个注解类,如 @Override 的定义:

// 修饰注解的注释,元注解
@Target(ElementType.METHOD)	
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

@Deprecated

用于表示某个程序元素(类、方法)已经过时

过时仍然能用,表示不再推荐使用,

  • 可以用作新旧版本的兼容和过渡
  • 可以修饰 类、包、构造器、参数、方法等

@SuppressWarning

忽略程序中的警告⚠

若不想看到警告,可以使用该注解抑制警告信息

  • 使用 @SuppressWarning({""}),在 {“”} 中写入特定的需要抑制的警告,常用参数:
参数名功能
unchecked忽略没有检查的警告
unused忽略没有使用某个程序元素的警告
rawtypes忽略没有指定泛型的警告
  • 作用范围与放置位置相关,比如放在方法体上,那么只会忽略该方法内的警告信息

源码:

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})	// 可用类型
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    /**
     * The set of warnings that are to be suppressed by the compiler in the
     * annotated element.  Duplicate names are permitted.  The second and
     * successive occurrences of a name are ignored.  The presence of
     * unrecognized warning names is <i>not</i> an error: Compilers must
     * ignore any warning names they do not recognize.  They are, however,
     * free to emit a warning if an annotation contains an unrecognized
     * warning name.
     *
     * <p> The string {@code "unchecked"} is used to suppress
     * unchecked warnings. Compiler vendors should document the
     * additional warning names they support in conjunction with this
     * annotation type. They are encouraged to cooperate to ensure
     * that the same names work across multiple compilers.
     * @return the set of warnings to be suppressed
     */
    String[] value();	// 存放忽略的类型数组
}

元注解

就是修饰注解的注解,本身作用不大,主要用于理解底层源码

种类:

  • Retention: 指定注解的作用范围
  • Target: 指定注解的适用对象
  • Documented: 指定该注解是否会在 Javadoc 中体现
  • Inherited : 子类会继承父类的注解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三更鬼

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值