5.3

JAVA

枚举

概述:一个类的实例是有限且固定的,这个类称为枚举类

可以用枚举类给域或者方法创建一系列的有效值。枚举类型可以单独存在,也可以是某个类的一部分。

如果在应用程序中有多处引用,那就让它单独存在。如果只在某个类中使用,枚举最好作为类的一部分

手动实现一个枚举类

通过private将构造器隐藏起来

把这个类的所有可能实例都使用private static final修饰的类变量来保存

如果有必要,可以提供一些静态方法

public class Season {
    private final String name;
    private final String desc;
    private Season(String name, String desc){
        this.name = name;
        this.desc = desc;
    }
    public static final Season SPRING = new Season("春天","踏青");
    public static final Season SUMMER = new Season("夏天","夏日炎炎");
    public static final Season FAIL = new Season("秋天","秋高气爽");
    public static final Season WINTER = new Season("冬天","白雪皑皑");
   
    public String getName(){
        return this.name;
    }
    public String getDesc(){
        return this.desc;
    }
}

Season类是一个不可变类。Season类中包含了4个static final常量的Field,这4个常量Field就代表了该类所能创建的对象

当程序需要调用Season对象时,就可以通过Season.SPRING的方式来取得Season对象

public class SeasonTest {
    public SeasonTest(Season s){
        System.out.println(s.getName() + "," + s.getDesc());
    }
    public static void main(String[] args) {
        new SeasonTest(Season.FAIL);
    }
}

编译运行结果为:

F:\gz\JAVA\mj>java SeasonTest
秋天,秋高气爽


不可变类:创建该类的实例后,该实例的Field是不可变的

不可变类的创建:

①使用private和final修饰符来修饰该类的Field

②提供带参数的构造函数,用于根据传入参数来初始化类里的Field

③仅为该类的Field提供getter方法,不要为该类的Field提供setter方法

④如果有必要,重写Object类的hashCode和equals方法


枚举类:

①使用enum关键字定义枚举类。枚举类一样可以有自己的Field、方法,可以实现一个或多个接口,也可以有自己的构造器

②使用eunm定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类

③使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派送子类

④枚举类所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远不能产生实例

⑤所有枚举类都提供一个values方法,该方法可以方便地遍历所有枚举值


public enum SeasonEnum {
    SPRING,SUMMER,FALL,WINTER;
}

接着

public class EnumTest {
   
    public void judge(SeasonEnum s){

        switch(s){
            case SPRING:
                System.out.println("春天");
                break;
            case SUMMER:
                System.out.println("夏天");
                break;
            case FALL:
                System.out.println("秋天");
                break;
            case WINTER:
                System.out.println("冬天");
                break;
        }
    }
    public static void main(String[] args) {
        //列出所有枚举类的实例
        for(SeasonEnum s : SeasonEnum.values()){
            System.out.println(s);
        }
       
        new EnumTest().judge(SeasonEnum.FALL);
    }
}

编译运行后得到:

F:\gz\JAVA\mj>java EnumTest
SPRING
SUMMER
FALL
WINTER
秋天





Linux

系统性能监控

挂接——mount命令

在Linux中,如果要使用存储设备(Mo,硬盘,光驱等)就得先将它挂载(Mount),而当存储设备挂上了之后,就可以把它当成一个目录来进行访问

挂载一个设备使用Mount

显示所有挂载的文件系统并对齐输出

mount | colum -t

显示所有挂载的文件系统,显示出了每个挂载文件挂载的地址,并且按要求对齐输出,


显示PCI信息(PIC 是 Peripheral Component Interconnect(外设部件互连标准)的缩写,目前个人计算机中使用最为广泛的接口之一)

lspci -tv

显示USB信息

lsusb -tv


strace命令和ltrace命令

跟踪程序执行时的系统调用和所接收的信号——strace命令

该命令可以显示所有由用户空间程序发出的系统调用

strace -c ls >/dv/null  总结/剖析命令进行的系统调用

可以看到命令的进程号,所触及到的系统调用的列表,对每个系统调用的次数,出错的次数

从上述信息,可以分析到某个命令执行时很多有用的信息,进一步加深对各个命令的了解


跟踪进程的库函数调用——ltrace命令

常用的三个参数:

-f:除了跟踪当前进程外,还跟踪其子进程

-o file:将输出信息写到文件file中,而不是显示到标准错误输出(stderr)。

-p pid: 绑定到一个由pid对应的正在运行的进程。此参数常用来测试后台进程


ltrace基于ptrace,首先ltrace打开elf文件,对其进行分析。在elf文件中,出于动态连接的需要,需要在elf文件中保存函数的符号,供连接器使用。

这样ltrace就能够获得该文件中所有系统调用的符号以及对应的执行命令,然后ltrace讲该命令所对应的4个字节替换成断点


跟踪ls -al 的运行,将输出信息写到文件ls.truss中

首先要创建文件ls.truss,把ls -al输出的信息写在这个文件里

ltrace -o ls.truss ls -al

从执行结果可以看出,不光将输出信息写到文件ls.truss中,还在屏幕上显示出了ls -al命令执行的结果,即显示出了当前目录下所有的文件和目录,包括当前目录"。" 和父目录".."

执行完命令后,打开之前创建的文件ls.truss查看输出的信息




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值