Java基础知识学习——常用类及方法的使用

知识点汇总一

一:String是一个final类代表不可变的字符序列
String实现了Serializable接口:表示字符串是支持序列化的s,实现了Comparable接口:表示String可以比较大小。
通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。字符串常量池中是不会存放相同内容的字符串的。
String的实例化方式:
方式一:通过字面量的方式
方式二:通过new+构造器的方式
String s=new String(“hello”)的方式创建对象在内存中创建了两个对象:
一个是堆空间中的new结构另一个是char[]对应的常量池中的数据"hello"。
结论:1常量与常量的拼接结果在常量池中,且常量池中不会存放相同内容的常量。2只有其中有一个是变量,结果就在堆中。
如果拼接的结果调用intern()方法,结果就在常量池中。
代码示例:

 public void test1(){
    String s1="abc";
    String s2="hello";
    String s3=s2.replace('h','a');
    String s4=new String("hello");
    String s55="abcdef";
    String s5=s1+"def";
    String s6=s5.intern();//返回得到的是常量池中已经存在的
    System.out.println(s6==s55);
    //String->char[]
        String str1="1234354asdfasd";
        char[] chars=str1.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }
        //char[]->String 调用String的构造器
        char[] chars1=new char[]{'q','w','e','r','t','y'};
        System.out.println(new String(chars1));
        /*
        * String 与字节数组byte[]之间的转换
        * */
        //String->byte[]调用getBytes()方法
        String str3="qwe123";
        byte[] bytes=str3.getBytes();
        System.out.println(Arrays.toString(bytes));
        //byte[]->String:调用String的构造器
        String str4=new String(bytes);
        System.out.println(str4);    
    }

知识点汇总二

1.StringBuffer:可变的字符序列,线程安全加了synchronized,效率偏低
分析StringBuffer:空参构造器public StringBuffer(){ super(capacity:16); }(空参的具有16个容量),底层创建了一个长度为16的数组。
有参构造器public StringBuffer(String str){ super(capacity:str.length+16);append(str) }
2.StringBuilder:可变的字符序列,jdk5.0新增线程不安全,效率高点
扩容问题:若添加数据盛不下则默认将原有底层数组扩容为原来2倍+2。
代码示例:

public static void main(String[] args) {
        //StringBuffer中的常用方法
        StringBuffer stringBuffer=new StringBuffer("qwertt");
        System.out.println(stringBuffer.append("123"));
        stringBuffer.delete(4,6);
        stringBuffer.replace(2,4,"ll");
        stringBuffer.insert(2,"happy");
        stringBuffer.reverse();
        stringBuffer.setCharAt(1,'R');
        StringBuilder stringBuilder=new StringBuilder("zfg");
        stringBuilder.append("uiop");
    }

时间API测试代码示例:

public class DateTest {
    public static void main(String[] args) throws ParseException {
        //jdk8之前的日期时间API
        long startTime=System.currentTimeMillis();
        //构造器一
        Date date=new Date();
        System.out.println(date.toString());//显示当前的年月日分秒
        date.getTime();//获取当前对象的毫秒数
        //构造器二
        Date date1=new Date(135435236534L);
        //创建java.sql.Date对象
        java.sql.Date date2=new java.sql.Date(5623546235L);
        //util.Date->sql.Date之间的转换
        Date date3=new Date();
        java.sql.Date date4=new java.sql.Date(date3.getTime());
        /*
        * jdk8以前的日期时间的API测试
        * java.text.SimpleDateFormat对日期Date类的格式化和解析
        *两个操作:格式化:日期-》字符串;解析:格式化的逆过程,字符串-》日期
         *  */
        //实例化SimpleDateFormat
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat();
        //格式化:日期-》字符串
        Date date8=new Date();
        System.out.println(date8);

        String sdf=simpleDateFormat.format(date);
        System.out.println(sdf);
        //解析:字符串-》日期
        String date7="19-12-18 上午10:34";
        Date date6=simpleDateFormat.parse(date7);
        System.out.println(date2);
        //字符串-》转换为java.sql.Date
        String birth="2020-2-18";
        SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("yyyy-MM-dd");
        Date date9=simpleDateFormat1.parse(birth);
        System.out.println(date9);//java.util.Date
        java.sql.Date birthDate=new java.sql.Date(date9.getTime());
        /*
        * Calendar日历类的使用
        * */
        //实例化
        //方式一:创建其子类对象;方式二:调用其静态方法
       Calendar calendar=Calendar.getInstance();
       //常用方法
        calendar.get(Calendar.DAY_OF_MONTH);
        calendar.set(Calendar.DAY_OF_MONTH,22);
        calendar.add(Calendar.DAY_OF_MONTH,3);
        Date date11=calendar.getTime();
        Date date5=new Date();
        calendar.setTime(date5);
        /*
        * jdk8中的时间日期API
        * LocalDate ,LocalTime,LocalDateTime
        * */
        //now():获取当前时间
        LocalDate localDate=LocalDate.now();
        System.out.println(localDate);
        LocalTime localTime=LocalTime.now();
        System.out.println(localTime);
        LocalDateTime localDateTime=LocalDateTime.now();
        System.out.println(localDateTime);
        //of()
        LocalDateTime localDateTime1=LocalDateTime.of(2020,10,3,12,34);
        System.out.println(localDateTime1);
        //get()获取相关的属性
        System.out.println(localDateTime.getDayOfMonth());
        //with体现了不可变性:设置相关的属性
        System.out.println(localDate.withDayOfMonth(13));
        //plus加上指定的时间
        localDateTime.plusDays(3);
        //minus减去指定的时间
        localDateTime.minusDays(4);
        //instant瞬时时间点
        //获取本初子午线的时间
        Instant instant=Instant.now();
        System.out.println(instant);
        instant.atOffset(ZoneOffset.ofHours(8));//偏移量
        System.out.println(instant.toEpochMilli());//获取对应的毫秒数
    }
}

知识点汇总三:

对多个对象进行排序使用两个接口中的任何一个Comparable和Comparator
Comparable接口的使用:
像String,包装类等实现了Comparable接口重写了compareTo()给出了比较两个对象大小,重写compareTo()了之后进行了从小到大的排列。
Comparator接口的使用定制排序。
代码示例:

public class CompareTest {
    public static void main(String[] args) {
        String[] arr=new String[]{"aa","qq","bb","dd","mm"};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        Arrays.sort(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                //按照从大到小的排列
                if(o1 instanceof String && o2 instanceof String ){
                    String s1=(String )o1;
                    String s2=(String)o2;
                    return -s1.compareTo(s2);
                }
                throw new RuntimeException("输入的数据类型不一致");
            }
        });
    }
}
//实现Comparable接口
class Fruit implements  Comparable{
    private String name;
    private double price;
    public Fruit() {
    }
    public Fruit(String name, double price) {
        this.name = name;
        this.price = price;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
//指明按照什么比较大小
    @Override
    public int compareTo(Object o) {
        if(o instanceof Fruit){
            Fruit fruit=(Fruit)o;
            if(this.price>fruit.price){
                return 1;
            }
            else if (this.price<fruit.price){
                return 0;
            }else {
                return 0;
            }
        }
        throw new RuntimeException("传入的数据类型不是Fruit");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值