标签:处理 tor 同步 har 取数据 word ade -- 数据库数据
此类是不可被继承,因为它是final类
此类实现序化接口,支持序列化处理
String实现Comparable比较器,支持自然排序
String的字符串内容,底层也是使用char[]数组存储, 并且此数组是一个final数组
因为char是final,所以String是不可变的类
直接赋值
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与变量进行连接,则此对象肯定在堆空间分配(即地址不一样)
*/
它还是依赖char数组存储字符串数据
它是可变的字符数组
它默认分配16个字符长度的字符数组
其实它就是一个字符数组存储字符内容, 当调用append添加字符串,比较count+len与buf.length,如果count+len> buf.length,则进行扩容
进行扩容后的数组长度=原先的数组长度*2+2;
它是线程安全的
比较简单,自己查看api
它的用法与StringBuffer是相同的,但它线程不安全,因为没加同步机制,因此性能要比StringBuffer要好
在java中每一种基本数据类型都对应一 个数据类型的包装类
byte ---->Byte
short---->Short
char----->Character
int------> Integer
long----->Long
float----->Float
double---->Double
boolean--->Boolean
以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);
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);
在jdk1.8之前,提供一个日历类, 专门 ]处理日期时间运算问题
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); }
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秒"))
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(); } } */ }
三个与取整有关的方法: 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
一般的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());
标签:处理 tor 同步 har 取数据 word ade -- 数据库数据
原文地址:https://www.cnblogs.com/Y-wee/p/13557810.html