Java超全面笔记(七)--- 常用类、比较器、注解

String

  1. 使用一对“”引起来表示
  2. 声明为final,不可被继承
  3. 实现了Serializable接口:表示字符串是支持序列化的

实现了Comparable接口:表示String可比较大小

  1. 内部定义了final char[] value用于存储字符串数据
  2. 代表不可变的字符序列→不可变性

体现:①当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的value进行赋值②当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值③调用String.replace(),也需要重新指定内存区域赋值,不能使用原有的value进行赋值

  1. 通过字面量的方式(区别于new)给一个字符串赋值,此时该值声明在字符串常量池中
String s1 = "abc";//字面量方式
  1. 字符串常量池中不会存储相同值的字符串【相同值的对象指向常量池中同一个字符串,地址相同】

常量与常量(用final修饰的变量也是常量)的拼接结果在常量池

只要拼接中有一个是变量,结果存在

如果拼接的结果调用intern()方法,返回值在常量池中】

常用方法:

int length();

char charAt(int index);返回某索引处的字符return value[index]

String toLowerCase();使用默认语言环境,将String中的所有字符转换为小写

String toUpperCase();使用默认语言环境,将String中的所有字符转换为大写

String trim();返回字符串的副本,略去字符串首尾的空格

boolean equals();比较字符串内容是否相同

boolean equalsIgnoreCase(String anotherString);与equals相似,忽略大小写

String concat(String str)

String→char[]:

char[] array = s1.toCharArray();
String s2 = new String(array1);

编码:String→byte[]

解码:byte[]→String

byte[] bytes = s1.getBytes();//使用默认的字符集

StringBuffer和StringBuilder

StringBuffer:可变的字符序列;是线程安全的,效率低(方法都是synchronized的)

StringBuilder:可变的字符序列;线程不安全,效率高

Date

  1. 两个构造器的使用
  • Date():创建一个对应当前时间的Date对象
Date date1 = new Date();
System.out.println(date1.toString());
  • 创建指定毫秒数的Date对象
Date date2 = new Date(152187530039L);
System.out.println(date2);
  1. 两个方法的使用
    1. toString():显示当前的年、月、日、时、分、秒
    2. getTime():获取当前Date对象对应的毫秒时间戳
  2. java.sql.Date 对应着数据库中的日期类型的变量
  • 如何实例化
java.sql.Date data3 = new java.sql.Date(152187530039L);
  • 如何将java.util.Date对象转换为java.sql.Date
//情况1
Date date4 = new java.sql.Date(152187530039L);
java.sql.Date date5 = (java.sql.Date)date4;


//情况2
Date date6 = new Date();
java.sql.Date date7 = new java.sql.Date(date6.getTime());

Math

BigInteger

BigDecimal

jdk8之前日期时间的API测试

  1. System类中currentTimeMillis();
  2. java.util.Date和子类java.sql.Date
  3. SimpleDateFormat

格式化:日期à字符串

解析:字符串à日期

//实例化
SimpleDateFormat sdf = new SimpleDateFormat();

//格式化
Date date = new Date();
String format = sdf.format(date);

//解析
String str = "2021/5/30 下午3:08";【要和格式化输出的格式相同】
Date date1 = sdf.parse(str);

        4. Calendar(抽象类)

                a)    实例化

                        方式一:创建其子类(GregorianCalendar)的对象

                        方式二:调用其静态方法Calendar.getInstance()

                b)    常用方法

                        get():获取日期

                        set():设置日期,改的是对象里的数据,改完再get()就是修改后的结果

                        add():当前天数加n天

                        getTime():日历类→Date

Date date = calendar.getTime();

                        setTime():Date→日历类

calendar.setTime(date);

jdk8中日期时间的API测试

LocalDate()

LocalTime()

LocalDateTime()【常用】

localDateTime.getXxx()

localDateTime.withXxx()

localDateTime.plusXxx()

localDateTime.minusXxx()

Instant

//now() 获取本初子午线对应的标准时间
Instant instant = Instant.now();
System.out.println(instant);

//添加时间偏移量
OffsetDateTime offsetDateTime= instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);

Java中的比较器

Comparable接口的使用(自然排序)

  1. String、包装类等实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象大小的方法
  2. String、包装类重写compareTo()后,进行了从小到大的排列
  3. 重写compareTo(obj)的规则:

如果当前对象this大于形参对象obj,返回正整数

如果当前对象this小于形参对象obj,返回负整数

如果当前对象this等于形参对象obj,返回零

  1. 对于自定义类来说,如果需要排序,可以让自定义类实现Comparable接口, 在compareTo(obj)中指明如何排序

Comparator(定制排序)

重写Compare(Object o1,Object o2)

如果o1大于o2,返回正整数

如果o1小于o2,返回负整数

如果o1等于o2,返回零

Comparable和Comparator区别

Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小

Comparator接口属于临时性的比较

枚举类

类的对象只有有限个,确定的

如果枚举类中只有一个对象,则可以作为单例模式的实现方式

方式一:新建一个类

定义private的变量、构造器,将对象声明为常量

public static final Season Spring = new Season("Spring","warm");

方式二:enum关键字

enum  Season1{
//    1.提供当前枚举类的对象,多个对象之间用逗号隔开,末尾对象以分号结束
    Spring("Spring","warm"),
    Summer("Summer","hot"),
    Autumn("Autumn","cool"),
    Winter("Winter","cold");
//    2.声明对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;
   
//    3.私有化构造器
    private Season1(String seasonName,String seasonDesc){
        this.seasonDesc = seasonDesc;
        this.seasonName = seasonName;
    }
}

【提供枚举类的对象必须放在类中的开头位置】

Enum类中的方法

toString

values():返回枚举类中设置的所有对象

valueOf(String objName):返回枚举类中对象名为objName的对象,如果没有该对象,抛异常

使用enum关键字定义的枚举类实现接口的情况

  1. 实现接口,在enum类中实现抽象方法
    @Override
    public void show() {
       
    }
  2. 让枚举类的对象分别实现接口中的抽象方法
    Spring("Spring","warm"){
        @Override
        public void show() {
    
        }
    },

注解(Annotation)

  1. 生成文档相关的注解
  2. 在编译时进行各市检查(JDK内置的三个基本注解)
    @Override:限定重写父类方法,加上该注解在编译时会检查是否是重写

@Deprecated:用于表示所修饰的元素(类、方法)已经过时。

@SuppressWarning:抑制编译器警告

  1. 跟踪代码依赖性,实现替代配置文件功能
  2. jdk提供的四种元注解(对先有注解进行解释说明的注解)
    @Retention:指定所修饰的注解的生命周期:SOURCE\CLASS(默认)\RUNTIME
    只有生命周期为RUNTIME的注解才能通过反射获取
    @Target:用于指定被修饰的注解能用于修饰哪些程序元素
    @Documented:表示所修饰的注解在被javadoc解析时,保留下来
    @Inherited:其修饰的注解将有继承性
     

jdk 5.0新增,是代码里的特殊标记

自定义注解:

参照SuppressWarning:

  1. 注解使用声明为:@interface
  2. 内部定义成员,通常使用value表示
  3. 可以指定成员的默认值,使用default定义
  4. 如果自定义注解没有成员,表明是一个标识

如果注解有成员,在使用注解时,需要指明成员的值

自定义注解必须配上注解的信息处理流程(使用反射)才有意义

  1. jdk 8 中注解的新特性:可重复注解、类型注解
    1. 可重复注解:
      1. 在MyAnnotation上声明@Repeatable,成员值为MyAnnotation.class
      2. MyAnnotation的Target和Retention和MyAnnotations相同
    2. 类型注解:
      1. ElementType.TYPE_PARAMETER     表示该注解能写在类型变量的声明语句中(如:泛型声明)
      2. ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值