码迷,mamicode.com
首页 > 编程语言 > 详细

Java 常用类

时间:2020-08-31 11:56:52      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:处理   tor   同步   har   取数据   word   ade   --   数据库数据   

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());

 

Java 常用类

标签:处理   tor   同步   har   取数据   word   ade   --   数据库数据   

原文地址:https://www.cnblogs.com/Y-wee/p/13557810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!