java基础总结(二)之枚举类、常用类、注解

1.枚举类

1.1 什么是枚举类?

  • 类的对象只有有限个,确定的。我们称此类为枚举类;
  • 当需要定义一组常量时,强烈建议使用枚举类;
  • 如果枚举类中只有一个对象,则可以作为单例模式的实现方式;
  • 不能再继承其他的类(因为已经继承了java.lang.Enum类);
  • switch参数可以使用Enum;
  • enum 允许为eunm 实例编写方法。所以可以为每个enum 实例赋予各自不同的行为

1.2 枚举类的定义

//1.最简单的枚举类
public enum Season {
    //1.下面这几个就是枚举类的所有对象,多个对象之间用","隔开,末尾对象";"结束
    spring,
    SUMMER,
    AUTUMN,
    WINTER;
}

//可以通过 类名+. 的方式获取其实例化对象的引用
public static void main(String[] args) {
    //获取枚举类的对象
    Season season = Season.spring;
    //输出结果是: spring
    System.out.println(season);
    //此时的 Season.spring可以当做一个常量
}

//2. enum类也可以定义构造器、属性、方法。
//其中,构造器只能是私有的(默认是private)
public enum Season {
    spring("春天","绿色"),
    SUMMER("夏天","橙色"),
    AUTUMN("秋天","黄色"),
    WINTER("冬天","白色");

    private final String name;
	private final String color;
    
    Season(String name,String color) {
        this.name = name;
        this.color = color;
    }
    
    public String getName() {
        return name;
    }

    public String getColor() {
        return color;
    }
}
//可以通过 类名+. 的方式获取其实例化对象的引用
public static void main(String[] args) {
    Season season = Season.spring;
    //输出结果是:绿色
    System.out.println(season.getColor());
    System.out.println(Season.spring.getColor());
}


复制代码

1.3枚举类常用方法

  • 这些方法继承于java.lang.Enum
//1. toString() :返回枚举类对象的名称
System.out.println(season.toString());
//结果:spring

//2. values():返回所的枚举类对象构成的数组
//注意:是 enum类名.values()
 System.out.println(Season.values());
//结果:[LenumTest.Season;@2a098129

for (Season season1 : Season.values()){
	System.out.println(season1);
}
//循环输出内容;
/*spring
  SUMMER
  AUTUMN
  WINTER*/


//3. valueOf(String objName):返回枚举类中对象名是objName的对象。
//如果没objName的枚举类对象,则抛异常:IllegalArgumentException
Season winter = Season.valueOf("WINTER");
System.out.println(winter);
//结果:WINTER
复制代码

1.4 枚举类对象怎么实现接口?

interface Info{
    void show();
}

//使用enum关键字枚举类
enum Season1 implements Info{
    SPRING("春天","春暖花开"){
        @Override
        public void show() {
            System.out.println("春天在哪里?");
        }
    },
    SUMMER("夏天","夏日炎炎"){
        @Override
        public void show() {
            System.out.println("宁夏");
        }
    },
    AUTUMN("秋天","秋高气爽"){
        @Override
        public void show() {
            System.out.println("秋天不回来");
        }
    },
    WINTER("冬天","冰天雪地"){
        @Override
        public void show() {
            System.out.println("大约在冬季");
        }
    };
}

复制代码

2.java常用类

2.1 String类

2.1.1 介绍

  • String:字符串,使用一对""引起来表示;
  • String**声明为final**的,不可被继承
  • String实现了Serializable接口:表示字符串是支持序列化的。
    实现了Comparable接口:表示String可以比较大小
  • String内部定义了final char[] value用于存储字符串数据

2.1.2 常用方法

  • 眼界问题,我感觉常用的就前面几个。

  • String str = "Hello World !"
        
    //1.判断是否是空字符串
    boolean isEmpty();
    //2.比较字符串的内容是否相同: "hello".equals(str);
    boolean equals(Object obj);
    //3.返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
    String substring(int beginIndex);
    //4.返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
    String substring(int beginIndex, int endIndex);
    //5.测试此字符串是否以指定的前缀开始
    boolean startsWith(String prefix);
    //6.当且仅当此字符串包含指定的 char 值序列时,返回 true
    boolean contains(CharSequence s);
    //7.返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
    String replace(char oldChar, char newChar);
    //8.使用给定的 replacement 替换此字符串所 匹配给定的正则表达式 的子字符串。
    String replaceAll(String regex, String replacement);
    //9.根据给定正则表达式的匹配拆分此字符串。
    String[] split(String regex);
    //String[] numberArr = "1,2,3,4,".split(",");
    
    //返回字符串的长度
    int length();
    //返回某索引处的字符
    char charAt(int index);
    //将 String 中的所字符转换为小写
    String toLowerCase();
    //将 String 中的所字符转换为大写
    String toUpperCase();
    //返回字符串的副本,忽略字符串首字母前边的空白和尾部空白
    String trim();
    //与equals方法类似,忽略大小写
    boolean equalsIgnoreCase(String anotherString);
    //将指定字符串连接到此字符串的结尾。 等价于用“+”
    String concat(String str);
    //比较两个字符串的大小,"hello".compareTo(str);
    int compareTo(String anotherString);
    //测试此字符串是否以指定的后缀结束
    boolean endsWith(String suffix);
    //测试此字符串从指定索引开始的子字符串是否以指定前缀开始,索引从0开始
    boolean startsWith(String prefix, int toffset);
    /*	String str = "Hello World !";
    	System.out.println(str.startsWith("Wo",6));//true
     */
    //返回指定子字符串在此字符串中第一次出现处的索引
    int indexOf(String str);
    //返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
    int indexOf(String str, int fromIndex);
    //返回指定子字符串在此字符串中最右边出现处的索引
    int lastIndexOf(String str);
    //返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
    int lastIndexOf(String str, int fromIndex);
    //注:indexOf和lastIndexOf方法如果未找到都是返回-1
    
    //替换:
    //使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
    String replaceFirst(String regex, String replacement);
    
    //匹配:
    //告知此字符串是否匹配给定的正则表达式。
    boolean matches(String regex);
    
    //切片:
    //根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。
    String[] split(String regex, int limit);
    复制代码

2.2 StringBuffer、StringBuilder类

2.2.1 比较

  • StringStringBufferStringBuilder的比较

    • String:不可变的字符序列;底层使用char[]存储
    • StringBuffer:可变的字符序列线程安全的,效率低;底层使用char[]存储
  • StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储

2.2.2 扩容问题

  • 如果要添加的数据底层数组放不下了,那就需要扩容底层的数组。默认情况下,扩容为原来容量的2倍 + 2,同时将原数组中的元素复制到新的数组中。

2.2.3 执行效率

  • 三者的执行效率:

    • 高到低排列:StringBuilder > StringBuffer > String;
    • 但是我一般都用StringBuffer ?

2.2.4 常用方法

  • StringBuffer sb = new StringBuffer();
    //增:sb.append(xxx);
    append(xxx);
    //删:
    delete(int start,int end);
    deleteCharAt(int index);
    //删除最后一个字符:sb.deleteCharAt(sb.length-1);
    //改:
    setCharAt(int n ,char ch) / replace(int start, int end, String str)
    //查:
    charAt(int n )
    //插:
    insert(int offset, xxx)
    //长度:
    length();
    复制代码

2.3有关时间的API

2.3.1获取系统当前时间

  • System类中的currentTimeMillis()

    long time = System.currentTimeMillis();
    //返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
    //称为时间戳
    复制代码

2.3.2 java.util.Date类

  • //构造器一:Date():创建一个对应当前时间的Date对象
    Date date = new Date();
    //构造器二:创建指定毫秒数的Date对象
    Date date = new Date(35235325345L);
    //System.out.println(date.toString()); 
    //输出:Sat Feb 13 03:35:25 CST 1971
    复制代码

2.3.3 java.text.SimpleDataFormat类

  • 格式化:format();

  • 解析:parse();

    //1.格式化:日期 --->字符串
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    String format1 = sdf1.format(date);//格式化
    System.out.println(format1);//2019-02-18 11:48:27
    
    //2.解析:格式化的逆过程,字符串 ---> 日期
    //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),
    //否则,抛异常
    Date date2 = sdf1.parse("2020-02-18 11:48:27");
    System.out.println(date2);
    复制代码

2.3.4 Calendar类:日历类

在很多日期工具类里面见过。

没用过。等用过了在写吧…

2.4 System类

  • System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。

  • 由于**该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static**的,所以也可以很方便的进行调用。

  • 方法:

    native long currentTimeMillis();
    void exit(int status);
    void gc();
    String getProperty(String key);
    
    ....我只用过System.out.println()和currentTimeMillis();
    gc()是垃圾回收里面的,待我用过了在写吧...
    复制代码

2.5 Math类

  • java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型。

3. 注解

  • 注解:其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理

  • 通过使用 Annotation,可以在不改变原逻辑的情况下, 在源文件中嵌入一些补充信息。

  • 注解在框架里面有大量的使用,在JavaEE里面很少。

  • 学习Spring时会有大量的注解。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享