zoukankan      html  css  js  c++  java
  • Java 常用类

    Java 常用类

    1、String类用法

    1.1、特点

    • 此类是不可被继承,因为它是final类

    • 此类实现序化接口,支持序列化处理

    • String实现Comparable比较器,支持自然排序

    • String的字符串内容,底层也是使用char[]数组存储, 并且此数组是一个final数组

      • 因为char是final,所以String是不可变的类

    1.2、如何使用

    • 直接赋值

    String s1="hello";
    • 创建对象赋值

    String s2=new String("hello");
    /*
    *面试题:上面代码创建了几个对象
    *答:两个,一个String对象,一个char数组对象
    */
    • 从内存分析String如何存储

      字符串常量池的字符串内容,只会添加,不会修改,但字符串内容可以复用

    • 面试题

     public static void main(String[] args) {
           String s1="helloworld";
           String s2="hello"+"world";
           String s3="hello";
           String s4="world";
           String s5="hello"+s4;
           String s6="hello"+s4;
           String s7=s3+s4;
       //==比较的是内存地址
           System.out.println(s1==s2);//true
           System.out.println(s1==s5);//false
           System.out.println(s5==s6);//false
           System.out.println(s6==s7);//false
      //equals比较的是字符串内容
           System.out.println(s1.equals(s2));//true
           System.out.println(s1.equals(s5));//true
           System.out.println(s5.equals(s6));//true
           System.out.println(s6.equals(s7));//true
          //intern方法:强制要求直接从字符串常量池获取数据
           String s8=s6.intern();
           System.out.println(s8==s1);//true
       
          String s9=new String("helloworld");
          String s10=new String("helloworld");
          System.out.println(s9==s10);//fasle
          System.out.println(s9.intern()==s10); //fasle
          System.out.println(s9.intern()=="helloworld");//true
      }
    /*
    *分析:只要String与变量进行连接,则此对象肯定在堆空间分配(即地址不一样)
    */

    2、StringBuffer和StringBuilder

    2.1、StringBuffer的特点

    • 它还是依赖char数组存储字符串数据

    • 它是可变的字符数组

    • 它默认分配16个字符长度的字符数组

    • 其实它就是一个字符数组存储字符内容, 当调用append添加字符串,比较count+len与buf.length,如果count+len> buf.length,则进行扩容

      进行扩容后的数组长度=原先的数组长度*2+2;
    • 它是线程安全的

    2.2、StringBuffer的用法

    比较简单,自己查看api

    2.3、StringBuilder的特点和用法

    它的用法与StringBuffer是相同的,但它线程不安全,因为没加同步机制,因此性能要比StringBuffer要好

    3、数据类型的包装类

    在java中每一种基本数据类型都对应一 个数据类型的包装类

    • byte ---->Byte

    • short---->Short

    • char----->Character

    • int------> Integer

    • long----->Long

    • float----->Float

    • double---->Double

    • boolean--->Boolean

    3.1、用法

    • 以Integer为例

    • 将基本数据类型转换成包装类

    //写法一:直接字面值赋值 
    Integer a=100;
    //写法二:直接创建Integer对象
    Integer a1=new Integer(100);
    //写法三:调用valueOf静态方法
    Integer a2=Integer.valueOf(100);
    • 面试题

    //数据值在-128到127之间,使用缓存区获取数据 
    Integer a3=Integer.valueOf(56);
    Integer a4=Integer.valueOf(56);
    System.out.println(a3==a4);//true
    //数据值在-128到127以外,则直接new Integer对象
    Integer a5=Integer.valueOf(129);
    Integer a6=Integer.valueOf(129);
    System.out.println(a5==a6);//false
    • 字符串与包装类之间是如何转换

    //将字符串转换成包装类 
    String value="100";
    Integer iValue=new Integer(value);
    //将包装类转换成字符串
    String sValue=String.valueOf(iValue);
    System.out.println(sValue);

    4、日期相关的类

    4.1、jdk1.8之前时间类用法

    java.util.Date类:表示特定的瞬间,精确到毫秒

    如何将字符串转换到日期对象

     String inDate="2020-06-06"; 
    String inDateTime="2020-06-06 13:24:56";
    //日期格式化的类,设置格式
    SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
    //转换成Date类型
    Date date=sf.parse(inDate);
    //设置格式
    SimpleDateFormat sf_time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //转换成Date类型
    Date dateTime=sf_time.parse(inDateTime);

    如何将日期对象转换成关系数据库日期对象 (代码接着上面的)

     //java.sql.Date类对象 
     java.sql.Date sqlDate=new java.sql.Date(date.getTime());
     java.sql.Date sqlDateTime=new java.sql.Date(dateTime.getTime());

    如何从关系数据库将日期读取到字符串,打印输出到控制器

    //定义Date对象
    Date javaDateObj=null;
    Date javaDateTimeObj=null;
    //从数据库读取到的日期对象
    java.sql.Date getDateObj=rs.getDate(1);
    Timestamp timeStampObj=rs.getTimestamp(2);
    //将java.sql.日期对象转换成java.util.Date对象 
    javaDateObj=getDateObj; 
    javaDateTimeObj=new Date(timeStampObj.getTime());
    //获取Date对象,转换成字符串输出(yyyy年MM月dd日 HH时 mm分ss秒)
    SimpleDateFormat sf=new SimpleDateFormat("yyyy年MM 月dd日 HH时mm分ss秒");
    String javaDateTimeStr=sf.format(javaDateTimeObj); 
    System.out.println(javaDateTimeStr);

    4.1.2、时间日期运算问题

    在jdk1.8之前,提供一个日历类, 专门 ]处理日期时间运算问题

    4.1.3、Calendar类的用法

    public static void main(String[] args) {
            //获取日历对象
            Calendar calendar=Calendar.getInstance();
            //设置时间为当月第五天
            calendar.set(Calendar.DAY_OF_MONTH,5);
            //2小时之后的时间
            calendar.add(Calendar.HOUR,2);
            //获取Date对象
            Date date=calendar.getTime();
            //设置时间格式
            SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
            //将date转换成String
            String dateString=simpleDateFormat.format(date);
            System.out.println(dateString);
        }

    4.2、jdk1.8之后时间类用法

    jdk1.8提供新的日期时间api来操作日期时间

    • LocalDate:日期(年月日)

    • LocalDateTime:日期时间(年月日时分秒)

    • LocalTime:时间(时分秒)

    基本用法

    public static void main(String[] args) {
            //获取当前日期(年月日)
            LocalDate localDate=LocalDate.now();
            System.out.println(localDate);
            //获取年份
            int year=localDate.getYear();
            System.out.println(year);
            //获取月份
            Month month=localDate.getMonth();
            System.out.println(month);
            //获取天
            int day=localDate.getDayOfMonth();
            System.out.println(day);
            //获取2天后的日期
            LocalDate localDate1=localDate.plusDays(2);
            System.out.println(localDate1);
            //获取2个月之后的日期
            LocalDate localDate2=localDate1.plusMonths(2);
            System.out.println(localDate2);
            //获取两个月之前的日期
            LocalDate localDate3=localDate2.minusMonths(2);
            System.out.println(localDate3);
        }

    跟数据库日期字段对接

    LocalDate转字符串

    //设置格式
    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    //获取当前年月日
    LocalDate time = LocalDate.now();
    //转成字符串
    String localTime = df.format(time);
    System.out.println(localTime);

    从字符串----->LocalDate---->存储到数据库表的Date字段

    String strCurDate="2020-08-20";
    //将String根据日期格式(yyyy-MM-dd)解释成LocalDate对象
    LocalDate curDateObj=LocalDate.parse(strCurDate,
    DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    //LocalDate可以直接存储到数据库的Date字段
    //条件:mysql驱动的版本>=4.2
    pstmt.setObject(1, curDateObj);

    从字符串----->LocalDateTime---->存储到数据库表的DateTime字段

    String strCurDateTime="2020-08-20 16:30:56";
    //将String根据日期格式(yyyy-MM-dd  HH:mm:ss)解释成LocalDate对象
    LocalDateTime curDateTimeObj=LocalDateTime.parse(strCurDateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    //LocalDate可以直接存储到数据库的Date字段
    //条件:mysql驱动的版本>=4.2
    pstmt.setObject(2, curDateTimeObj);

    从数据库表的Date字段------->java.sql.Date----->LocalDate

    //读取数据库Date
    Date date=rs.getDate(1);
    //将Date转换成LocalDate
    LocalDate ld=date.toLocalDate();
    //将LocalDate按格式转成字符串
    String dateFormat=ld.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));

    从数据库表的dateTime字段----->java.sql.TimeStamp---->LocalDateTime

    //读取数据库数据
    Timestamp datetime=rs.getTimestamp(2);
    //将Timestamp转换成LocalDate
    LocalDateTime ldt=datetime.toLocalDateTime();
    //将LocalDate按格式转成字符串
    String dateFormat=ldt.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒"))

    5、Optional类的用法

    Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。

    作用:避免编写大量的if(p==null)这样判断

    核心方法

    • Optional.of(T t) : 创建一个 Optional 实例

    • Optional.empty() : 创建一个空的 Optional 实例

    • Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例

    • orElse方法:如果value为空,则返回参数值,否则返回value本身

    举例

    class Apple {
        public void info() {
            System.out.println("我是苹果"); 
        } 
    }
    class Person { 
        public Apple getAppleObj() {
            return null; 
        } 
    }
    public class MainTest { 
        public static void getAppleInfo(Person p) { 
            Person pObj=(Person) (Optional.ofNullable(p).orElse(new Person())); 
            Apple appleObj=(Apple) (Optional.ofNullable(pObj.getAppleObj()).orElse(new Apple()));appleObj.info();
    		/*
    		if(p!=null) {
    			Apple a=p.getAppleObj();
    			if(a!=null) { 
    			a.info();
    			}else {
    				a=new Apple();
    				a.info();
    			} 
    		}else { 
    			p=new Person(); 
    			Apple a=p.getAppleObj();
        	if(a!=null) { 
        		a.info(); 
        	}else {
        		a=new Apple();
        		a.info(); 
       		} 
    	}
    */ 
        }

    6、Math类的用法

    三个与取整有关的方法: ceil、 floor、 round

    ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12 ,Math.ceil(-11.3)的结果是-11

    floor的英文意义是地板,该方法就表示向下取整,所以,Math.floor(11.6)的结果为11 ,Math.floor(-11.6)的结果是-12

    最难掌握的是round方法,它表示“四舍五入”,算法Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结 果为12,Math.round(-11 .5)的结果为-11

    7、BigInteger与BigDecimal类用法

    一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal类。BigDecimal类支持任何精度的定点数。

    BigInteger v1=new BigInteger("9223372036854775808");
    BigInteger v2=new BigInteger("9223372036854775808");
    	
    //“加”运算
    BigInteger sum=v1.add(v2);
    System.out.println(sum.toString());
    		
    //“减”运算
    BigInteger result=v1.subtract(v2);
    System.out.println(result.toString());
    记得快乐
  • 相关阅读:
    [Evolution in aciton] C#1.1=>2.0=>3.0 [Querying Collections]
    动态操作.Config文件
    设计模式代理模式(Proxy Model)
    Linq Coding Part Five (Join之内部联接查询)
    Linq Coding Part Four[Concat应用]
    [转]领域模型管理与AOP
    08端午节,休闲一下吧,来上游戏
    有关于ViewState的二种压缩方式
    AddOutParameter引发类型问题
    Linq Coding Part Two[标准查询运算符]
  • 原文地址:https://www.cnblogs.com/Y-wee/p/13557810.html
Copyright © 2011-2022 走看看