ENUM及延伸内容

1、类的初始化顺序
    知识参考:http://www.cnblogs.com/jackyrong/archive/2008/08/12/1266161.html
    类的加载循序为:(静态变量、静态初始化块) > (变量、初始化块) > 构造器
    注意:无论是静态还是非静态,变量和块的初始化顺序都受到编码定义顺序的影响,即先定义就先初始化
    当出现继承时,父类的会优先于子类的初始化,但并非所有内容都优先初始化,顺序如下:
        父类(静态变量、静态初始化块) > 子类(静态变量、静态初始化块) > 父类(变量、初始化块) > 父类构造器 > 子类(变量、初始化块) > 子类构造器

2、常量变量的初始化
    a、变量仅被final修饰
        a.i、变量定义时就进行初始化
        a.ii、构造函数中进行初始化
    b、变量同时被final和static修饰
        a.i、变量定义时就进行初始化
        a.ii、静态块中进行初始化

3、enum 的属性定义为final和非final
    标准做法是enum中的变量都要被final修饰,但不使用final修饰也不会报错,但此时enum中的数据是不安全的,也就不符合enum的要求规范

public enum Type {
    A(01);
    
    private final int value;
    private Type(int value) {
        this.value = value;
    }

    public String getValue() {
        return this.value;
    }
}

4、enum 属性化、函数化
    enum 是一种单例模式,通过命名空间的形式来优化传统的int类型常量,同时丰富和完善了使用方式。
    较常量方式他最大的突出点是可属性化、可函数化(支持抽象函数)。

public enum AbstractEnum {
    A("0") {void apply(){
        System.out.println(AbstractEnum.A.value);
    }};

    private final String value;
    private AbstractEnum (String value) {
        this.value = value;
    }
    abstract void apply();
}

5、EnumSet

    EnumSet 可代替位域的使用,使用EnumSet更加简洁和性能优势(EnumSet中使用的批处理均利用位域进行处理),但截止JDK1.6版本为止,还无法创建不可变的EnumSet。

6、EnumMap

    EnumMap 可以代替序数索引的使用,即当Map的Key或数组序数有指定要求时,可使用EnumMap来处理

7、值引用和地址引用区别
    7.1、值引用即数值的拷贝,不同的变量名持有相同变量值。简单粗暴的理解:所有存放于栈空间内的值,它的传递均为值引用

public static int value = 1;
public static void change(int v) {
    v = 2;
}

public static void main(String[] args) {
    change(value);
    // 此种情况下输入结果为:1
    System.out.println(value);
}

    7.2、地址引用即地址的拷贝,不同的变量名持有相同的堆空间地址。简单粗暴的理解:所有存放在堆空间内的值,它的传递均为地址引用。

public class Test {  
    private void test(A a) {
        a.age = 24;
    }  
    public static void main(String[] args) {  
        Test t = new Test();  
        A a = new A();  
        t.test(a);
        // 此种情况下输入结果为:24
        System.out.println(a.age);
    }  
}  
class A{  
    public int age = 0;  
}  

    7.3、地址引用和值引用的差异?
    JAVA中的基础类型(除String外)的值都存放在栈空间内,而对象类型则存放在堆中,由于这种存放的差异导致了所谓的值引用和地址引用。
    变量名所占用的空间是栈空间,那么它对应存放在栈空间中的值来说,引用的即本身数值,没有地址指向的概念;而存放在堆空间中的值来说,它是将堆空间中的内存索引地址赋值给变量名。
    这样我们就不难理解值引用和地址引用的差异了,在对象类型的传递过程中实际就是值传递,只是这个值比较特殊,是内存空间的索引,而非物理值。

    知识参考博客:https://www.cnblogs.com/hanganglin/p/4341854.html

29090215_rVYI.jpg

29090215_LGL9.jpg

8、接口模拟可扩展枚举类型
    通过枚举类型类实现接口的模式,来达到枚举的可扩展性
        public enum MyColor implements Print
    使用场景
        1、通过判断枚举值来做不同逻辑处理时,可简化判断逻辑:switch(myColor) -> myColor.toString();
        2、……

转载于:https://my.oschina.net/clyy/blog/1575943

C:\Users\Admin> pnputil /rollback-driver "USB\VID_XXXX&PID_XXXX" /force PNPUTIL [/add-driver <...> | /delete-driver <...> | /export-driver <...> | /enum-drivers [<...>] | /enum-devices [<...>] | /enum-devicetree [<...>] | /disable-device <...> | /enable-device <...> | /restart-device <...> | /remove-device <...> | /scan-devices [<...>] | /enum-classes [<...>] | /enum-interfaces [<...>] | /enum-containers [<...>] | /?] 命令: /add-driver <filename.inf | *.inf> [/subdirs] [/install] [/reboot] 将驱动程序包添加到驱动程序存储中。 /subdirs - 遍历驱动程序包的子目录。 /install - 在任何匹配的设备上安装/更新驱动程序。 /reboot - 根据需要重新启动系统以完成此操作。 示例: 添加驱动程序包: pnputil /add-driver x:\driver.inf 添加多个驱动程序包: pnputil /add-driver c:\oem\*.inf 添加安装驱动程序包: pnputil /add-driver device.inf /install /delete-driver <oem#.inf> [/uninstall] [/force] [/reboot] 从驱动程序存储中删除驱动程序包。 /uninstall - 从任何使用驱动程序包的设备中卸载驱动程序包。 /force - 删除驱动程序包,即使有设备正在使用它。 /reboot - 根据需要重新启动系统以完成此操作。 示例: 删除驱动程序包: pnputil /delete-driver oem0.inf 强制删除驱动程序包: pnputil /delete-driver oem1.inf /force /export-driver <oem#.inf | *> <目标目录> 从驱动程序存储中将驱动程序包导出到目标目录中。 示例: 导出驱动程序包: pnputil /export-driver oem6.inf . 导出所有驱动程序包: pnputil /export-driver * c:\backup /enum-drivers [/class <name | GUID>] [/files] [/ids] [/devices] [/format <txt | xml | csv>] [/output-file [<filename>]] 枚举驱动程序存储中的所有第三方驱动程序包。 /class <name | GUID> - 按驱动程序类名称或 GUID 筛选。 /files - 枚举所有驱动程序包文件。 /ids - 显示驱动程序包系列 ID。 /devices - 显示安装了驱动程序包的设备。 /format - 将输出格式设置为 text、XML 或 CSV。 /output-file [<filename>] - 将输出写入可选文件名。 示例: 枚举所有 OEM 驱动程序包: pnputil /enum-drivers 枚举特定类的所有 OEM 驱动程序包: pnputil /enum-drivers /class "System" 枚举所有 OEM 驱动程序包并显示驱动程序文件: pnputil /enum-drivers /files /disable-device [<实例 ID> | /deviceid <设备 ID>] [/class <名称 | GUID>] [/bus <name | GUID>] [/reboot] [/force] 禁用系统上的设备。 /deviceid <device ID> - 禁用带匹配设备 ID 的所有设备。 /class <名称 | GUID> - 按设备类名称或 GUID 筛选。 /bus <name | GUID> - 按总线枚举器名称或总线类型 GUID 进行筛选。 /reboot - 根据需要重新启动系统以完成此操作。 /force - 即使设备提供关键系统功能,也禁用。 示例: 禁用设备: pnputil /disable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1" 禁用所有具有特定硬件/兼容 ID 的设备: pnputil /disable-device /deviceid "USB\Class_03" 在特定总线上禁用特定类的所有设备: pnputil /disable-device /class "USB" /bus "PCI" /enable-device [<instance ID> | /deviceid <device ID>] [/class <name | GUID>] [/bus <name | GUID>] [/reboot] 启用系统上的设备。 /deviceid <device ID> - 启用带匹配设备 ID 的所有设备。 /class <名称 | GUID> - 按设备类名称或 GUID 筛选。 /bus <name | GUID> - 通过总线枚举器名称或总线类型 GUID 进行筛选。 /reboot - 根据需要重新启动系统以完成此操作。 示例: 启用设备: pnputil /enable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1" 启用具有特定硬件/兼容 ID 的所有设备: pnputil /enable-device /deviceid "USB\Class_03" 在特定总线上启用特定类的所有设备: pnputil /enable-device /class "USB" /bus "PCI" /restart-device [<instance ID> | /deviceid <device ID>] [/class <name | GUID>] [/bus <name | GUID>] [/reboot] 重启系统上的设备。 /deviceid <device ID> - 重启带匹配设备 ID 的所有设备。 /class <名称 | GUID> - 按设备类名称或 GUID 筛选。 /bus <name | GUID> - 通过总线枚举器名称或总线类型 GUID 进行筛选。 /reboot - 根据需要重新启动系统以完成此操作。 示例: 重启设备: pnputil /restart-device "USB\VID_045E&PID_00DB\6&870CE29&0&1" 重新启动具有特定硬件/兼容 ID 的所有设备: pnputil /restart-device /deviceid "USB\Class_03" 在特定总线上重启特定类的所有设备: pnputil /restart-device /class "USB" /bus "PCI" /remove-device [<instance ID> | /deviceid <device ID>] [/class <name | GUID>] [/bus <name | GUID>] [/subtree] [/reboot] [/force] 尝试从系统中删除设备。 /deviceid <device ID> - 删除所有设备 ID 匹配的设备。 /class <名称 | GUID> - 按设备类名称或 GUID 筛选。 /bus <name | GUID> - 通过总线枚举器名称或总线类型 GUID 进行筛选。 /subtree - 删除整个设备子树,包括任何子设备。 /reboot - 根据需要重新启动系统以完成此操作。 /force - 即使设备提供关键系统功能,也删除。 示例: 删除设备: pnputil /remove-device "USB\VID_045E&PID_00DB\6&870CE29&0&1" 删除具有特定硬件/兼容 ID 的所有设备: pnputil /remove-device /deviceid "USB\Class_03" 在特定总线上删除特定类的所有设备: pnputil /remove-device /class "USB" /bus "PCI" /scan-devices [/instanceid <实例 ID>] [/async] 扫描系统以查找任何设备硬件更改。 /instanceid <实例 ID> - 在设备子树中扫描更改。 /async - 异步扫描更改。 示例: 扫描设备: pnputil /scan-devices /enum-devices [/connected | /disconnected] [/class <name |GUID>] [/instanceid <instance ID> | /deviceid <device ID>] [/problem [<code>]] [/bus [<name | GUID>]] [/deviceids] [/relations] [/services] [/stack] [/location] [/drivers] [/interfaces] [/properties] [/resources] [/format <txt | xml | csv>] [/output-file [<filename>]] 枚举系统上的所有设备。 /connected | /disconnected - 按连接的设备筛选或 按断开连接的设备筛选。 /class <名称 | GUID> - 按设备类名称或 GUID 筛选。 /instanceid <实例 ID> - 按设备实例 ID 筛选。 /deviceid <divice ID> - 按设备硬件/兼容 ID 筛选。 /problem [<代码>] - 按出现问题的设备筛选或 按特定问题代码筛选。 /bus [<name | GUID>]-显示总线枚举器名称总线类型 GUID 或 按总线枚举器名称或总线类型 GUID 筛选。 /deviceids-显示硬件/兼容 ID。 /relations - 显示父级子级设备关系。 /services - 显示设备服务。 /stack - 显示有效设备堆栈信息。 /location - 显示位置信息路径。 /drivers - 显示匹配的驱动程序已安装的驱动程序。 /interfaces - 显示设备接口。 /properties - 显示所有设备属性。 /resources - 显示设备资源。 /format - 将输出格式设置为 text、XML 或 CSV。 /output-file [<filename>] - 将输出写入可选文件名。 示例: 仅枚举系统上已连接的设备: pnputil /enum-devices /connected 枚举具有特定实例 ID 的设备: pnputil /enum-devices /instanceid "ACPI\PNP0A08\1" 枚举具有特定硬件/兼容 ID 的所有设备: pnputil /enum-devices /deviceid "USB\Class_03" 枚举具有特定类的所有设备: pnputil /enum-devices /class Display pnputil /enum-devices /class {4d36e97d-e325-11ce-bfc1-08002be10318} 枚举具有特定问题代码的所有设备: pnputil /enum-devices /problem 28 pnputil /enum-devices /problem 0xA 枚举具有特定总线的所有设备: pnputil /enum-devices /bus PCI pnputil /enum-devices /bus {c8ebdfb0-b510-11d0-80e5-00a0c92542e3} 枚举具有问题的所有设备并显示硬件/兼容 ID: pnputil /enum-devices /problem /deviceids /enum-interfaces [/enabled | /disabled] [/class <GUID>] [/instanceid <instance ID>] [/properties] [/format <txt | xml | csv>] [/output-file [<filename>]] 枚举系统上的所有设备接口。 /enabled | /disabled - 按启用的接口筛选或 按禁用的接口筛选。 /class <GUID> - 按接口类 GUID 筛选。 /instanceid <实例 ID> - 按设备实例 ID 筛选。 /properties - 显示所有接口属性。 /format - 将输出格式设置为 text、XML 或 CSV。 /output-file [<filename>] - 将输出写入可选文件名。 示例: 仅枚举系统上的已启用接口: pnputil /enum-interfaces /enabled 枚举具有特定接口类 GUID 的所有接口: pnputil /enum-interfaces /class {884b96c3-56ef-11d1-bc8c-00a0c91405dd} /enum-classes [/class <name | GUID>] [/services] [/format <txt | xml | csv>] [/output-file [<filename>]] 枚举系统上的所有设备设置类。 /class <名称 | GUID> - 按设备类名称或 GUID 筛选。 /services - 显示设备类服务。 /format - 将输出格式设置为 text、XML 或 CSV。 /output-file [<filename>] - 将输出写入可选文件名。 示例: 枚举系统上的所有设备设置类: pnputil /enum-classes 枚举特定设备设置类的信息: pnputil /enum-classes /class 显示 pnputil /enum-classes /class {4d36e968-e325-11ce-bfc1-08002be10318} /enum-devicetree [根设备实例 ID] [/connected] [/services] [/stack] [/drivers] [/interfaces] 枚举设备树。 /connected - 按连接的设备筛选。 /services - 显示设备服务。 /stack - 显示有效设备堆栈信息。 /drivers - 显示匹配的驱动程序已安装的驱动程序。 /interfaces - 显示设备接口。 示例: 枚举设备树: pnputil /enum-devicetree 使用 “ACPI\PNP0A03\0” 作为根枚举设备树: pnputil /enum-devicetree "ACPI\PNP0A03\0" 枚举已连接设备的树并显示设备接口: pnputil /enum-devicetree /connected /interfaces /enum-containers [/containerid <container id>] [/connected | /disconnected] [/problem] [/devices] [/format <txt | xml | csv>] [/output-file [<filename>]] 枚举系统上的所有设备容器: /containerid <container id> - 按容器 ID 筛选。 /connected |/disconnected - 按连接的设备容器或 筛选 按断开连接的设备容器筛选。 /problem - 按存在问题的设备容器进行筛选。 /devices - 显示容器设备。 /format - 将输出格式设置为 text、XML 或 CSV。 /output-file [<filename>] - 将输出写入可选文件名。 示例: 枚举系统上的所有设备容器: pnputil /enum-containers 枚举特定设备容器: pnputil /enum-containers /containerid "{00000000-0000-0000-ffff-ffffffffffff}" 枚举所有连接的设备容器关联的设备: pnputil /enum-containers /connected /devices /? 显示使用情况屏幕。 PS C:\Users\Admin>
07-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值