java学习之旅(day.14)
可变字符串
StringBuffer:可变长字符串,运行效率慢,线程安全
StringBuilder:可变长字符串,运行效率快,线程不安全
package com.zhang.lei;
//StringBuffer和StringBuilder的使用:和String相比,效率更高,更节省内存
public class Demo05 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
//append() 追加
sb.append("java牛逼");
System.out.println(sb.toString());//java牛逼
sb.append("java真难");
System.out.println(sb.toString());//java牛逼java真难
//insert() 添加或插入,某个位置处添加或插入
sb.insert(0,"傻逼");
System.out.println(sb.toString());//傻逼java牛逼java真难
//replace,String的replace仅可以替换旧的字符串,而此处的可以指定位置
sb.replace(2,4,"hello");//2-4 含头(2)不含尾(4),0
System.out.println(sb.toString());//傻逼hellova牛逼java真难
//delete() 含头不含尾
sb.delete(2,4);
System.out.println(sb.toString());//傻逼llova牛逼java真难
}
}
==========================================================================================================
package com.zhang.lei;
//验证StringBuilder比String的效率高
public class Demo06 {
public static void main(String[] args) {
//开始时间
long start=System.currentTimeMillis();
String string="";
for (int i = 0; i < 99999; i++) {
string+=i;//字符串拼接
}
System.out.println(string);//0123.....999998
//结束时间
long end=System.currentTimeMillis();
System.out.println("用时:"+(end-start));//用时:37637
//看看StringBuilder的时间
long start1=System.currentTimeMillis();
StringBuilder sb=new StringBuilder();
for (int i = 0; i < 999999; i++) {
sb.append(i);
}
System.out.println(sb.toString());
long end1=System.currentTimeMillis();
System.out.println("用时:"+(end1-start1));//用时:180
}
}
BigDecimal
引例:
package com.zhang.lei;
public class Demo07 {
public static void main(String[] args) {
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2);//0.09999999999999998
//或
double result=(1.4-0.5)/0.9;
System.out.println(result);//0.9999999999999999
//原因就出在double上,double或float类型的存储时一个近似值,所以在精度要求高的情况下double不再符合要求,此时需借助BigDecimal
}
}
BigDecimal
- 位置:java.amth包中
- 作用:精确计算浮点数
- 创建方式:BigDecimal bd =new BigDecimal();
package com.zhang.lei;
import java.math.BigDecimal;
public class Demo07 {
public static void main(String[] args) {
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2);//0.09999999999999998
//或
double result=(1.4-0.5)/0.9;
System.out.println(result);//0.9999999999999999
//原因就出在double上,double或float类型的存储时一个近似值,所以在精度要求高的情况下double不再符合要求,此时需借助BigDecimal
//BigDecimal 浮点数精确计算
BigDecimal bd1=new BigDecimal("1.0");
BigDecimal bd2=new BigDecimal("0.9");
//此时类就无法再做加减运算了 bd1-bd2会报错
//要用方法subtract() 减法
BigDecimal r1=bd1.subtract(bd2);
System.out.println(r1);//0.1
//add 加法
BigDecimal r2=bd1.add(bd2);
System.out.println(r2);//1.9
//multiply 乘法
BigDecimal r3=bd1.multiply(bd2);
System.out.println(r3);//0.90
//divide 除法
BigDecimal r4=new BigDecimal("1.4").subtract(new BigDecimal("0.5")).divide(new BigDecimal("0.9"));
System.out.println(r4);//1
//当上面方法除不尽时,会报异常:ArithmeticException:
//BigDecimal r5=new BigDecimal("10").divide(new BigDecimal("3"));
BigDecimal r5=new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);//ROUND_HALF_UP 四舍五入 2是指保留2位小数
System.out.println(r5);//3.33
}
}


Date类
Date表示特定的瞬间,精确到毫秒。Date类中大部分方法都已被Calendar类中的方法取代
时间单位:秒 毫秒 微秒 纳秒 之间的转化为1000
package com.zhang.lei;
import java.util.Date;
public class Demo08 {
public static void main(String[] args) {
//创建Date对象并实例化
Date date1=new Date();
//今天的时间
System.out.println(date1.toString());//Thu Jan 14 14:21:19 CST 2021 打印当前时间
System.out.println(date1.toLocaleString());//2021-1-14 14:22:44也是打印当前时间,但已经过时了
//昨天的时间
//今天的时间减去一天的毫秒数,getTime返回的是从1970年1月1日到现在的毫秒数
Date date2=new Date(date1.getTime()-60*60*24*1000);
System.out.println(date2.toString());//Wed Jan 13 14:26:17 CST 2021
//after before
boolean b1=date1.after(date2);//今天在昨天之后
boolean b2=date1.before(date2);//今天在昨天之前
System.out.println(b1);//true
System.out.println(b2);//false
//compareTo 比较2个日期的顺序 前大于后,输出1,反之为-1,相等为0
int d=date2.compareTo(date1);//-1
int d1=date1.compareTo(date2);//1
int d2=date2.compareTo(date2);//0
System.out.println(d);
System.out.println(d1);
System.out.println(d2);
//equals 比较是否相等
boolean e=date1.equals(date2);
System.out.println(e);//false
}
}
Calendar类

package com.zhang.lei;
import java.util.Calendar;
public class Demo09 {
public static void main(String[] args) {
//创建一个Calendar对象,无法用new
Calendar calendar=Calendar.getInstance();
//System.out.println(calendar.toString());不能用这种方法输出
System.out.println(calendar.getTime().toLocaleString());//2021-1-14 19:55:00
System.out.println(calendar.getTimeInMillis());//1610625436701 打印毫秒值
//获取时间信息(年月日时分秒)
//获取年
int year=calendar.get(Calendar.YEAR);
//获取月(老外的月从0开始的,1-12月对应为0-11月)
int month=calendar.get(Calendar.MONTH);
//日
int day=calendar.get(Calendar.DAY_OF_MONTH);//或用Date
//小时
int hour=calendar.get(Calendar.HOUR_OF_DAY);//HOUR 12小时的 HOUR_OF_DAY 24小时的
//分钟
int minute=calendar.get(Calendar.MINUTE);
//秒
int second=calendar.get(Calendar.SECOND);
System.out.println(year+"年"+month+1+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒");
//2021年01月14日20时11分18秒
//修改时间
Calendar calendar2 =calendar.getInstance();//获取时间
calendar2.set(Calendar.DAY_OF_MONTH,5);//设置时间
System.out.println(calendar2.getTime().toString());//Tue Jan 05 20:28:18 CST 2021
//add方法修改时间
calendar2.add(Calendar.HOUR,1);
System.out.println(calendar2.getTime().toLocaleString());//2021-1-5 21:31:35 加了1小时,减1小时的话:-1
int max=calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);//或取当前时间的最大值
int min=calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);//或取当前时间的最小值
System.out.println(max);//31
System.out.println(min);//1
}
}
SimpleDateFormat

package com.zhang.lei;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo10 {
public static void main(String[] args) throws Exception {
//创建 SimpleDateFormat对象 y 年 M月
//SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd/HH-mm-ss");///和-可以换。换成汉字也可
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
//创建Date
Date date=new Date();
//格式化date(把日期转换成字符串)
String str=sdf.format(date);
System.out.println(str);//2021/01/14
//解析(把字符串转成日期)
Date date2=sdf.parse("1990/05/01"); //给的时间和上面格式不一样的话会报错,要在上面抛出异常
System.out.println(date2);//Tue May 01 00:00:00 CDT 1990
}
}
System类
System系统类主要用于获取系统的属性数据和其他操作,构造方法是私有的,
所以用的时候不需要创建对象,其属性和方法都是静态的,可直接System. 就可
System中的一些方法

package com.zhang.lei.D;
import com.zhang.lei.Student;
public class Demo11 {
public static void main(String[] args) {
//arraycopy 实现数组的复制
int[] arr={20,18,15,8,35,26,45,90};//原数组
int[] dest=new int[8];//目标数组
System.arraycopy(arr,0,dest,0,arr.length);
//第一个参数:你要从哪个数组中复制,即原数组
//第二个参数:从哪个位置开始复制
//第三个参数:目标数组,即复制到哪个数组里面
//地四个参数:目标数组的位置,从哪个位置开始放
//第五个参数:复制的长度,复制几个
for (int i = 0; i <dest.length; i++) {
System.out.println(dest[i]);
}
//Arrays.copyOf();差不多
//打印从1970年到现在过去的毫秒数
System.out.println(System.currentTimeMillis());//1610635924109
//这个方法可以实现计时,如计算代码的执行时间
long start=System.currentTimeMillis();//获取时间
for (int i = 0; i < 999999; i++) {
for (int j= 0; j<999999; j++) {
int result=i+j;
}
}
long end=System.currentTimeMillis();
System.out.println("用时:"+(end-start));//12毫秒
//System.gc();告诉垃圾回收器,你要回收垃圾了
//这个例子需要额外建个类:Student1
Student s1=new Student("aaa",19);
new Student("aaa",19);
Student s2=new Student("bbb",19);
new Student("bbb",19);
Student s3=new Student("ccc",19);
new Student("ccc",19);
System.gc();
//退出JVM
System.exit(0);//非0就是非正常退出
System.out.println("程序结束了");//这句未执行,因为上一行代码就让JVM退出了
}
}
=======================================================
package com.zhang.lei.D;
public class Student1 {
private String name;
private int age;
//添加构造方法
public Student1(String name, int age) {
this.name = name;
this.age = age;
}
public Student1() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student1{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
protected void finalize() throws Throwable {
System.out.println("回收了"+name+""+" "+age);
}
}
java学习之旅(day.14)的更多相关文章
- Java学习之旅开篇:运行机制及环境搭建
在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...
- 第一篇,java学习之旅
在java的这座殿堂中,我才刚刚推开了大门,就像是在岔路口找到了一条,走向前进java大门的路. 下面是一些java算法的问题 第一题: package project.model; import j ...
- Java学习之旅(一):探索extends
鄙人为兴趣爱好,0基础入门学习Java,有些心得想法,记录于此,与君分享. 然毕竟新手,学识尚浅,错误之处,希望多多指正批评,也是对我最大的帮助! 前言:本篇文章,主要讨论在子类继承父类之后,一些继承 ...
- ROS2学习之旅(14)——编写简单的发布者和订阅者(C++)
节点是通过ROS Graph进行通信的可执行进程.在本文中,节点将通过话题以字符串消息的形式相互传递信息.这里使用的例子是一个简单的"talker"和"listener& ...
- Java学习之旅基础知识篇:数组及引用类型内存分配
在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- 我的java学习之旅--一些基础
(因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...
- Java学习之旅(二):生病的狗1(逻辑推导)
前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...
- ASP.NET Core on K8S学习之旅(14)Ingress灰度发布
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 之前一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和 ...
随机推荐
- 使用OHOS SDK构建freetype
参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone https://github.com/freetype/freetype.git ...
- 4步成功将三方库——speexdsp移植到OpenHarmony
战码先锋,PR征集令(以下简称"战码先锋")第二期正如火如荼地进行中,涉及OpenAtom OpenHarmony(以下简称"OpenHarmony")主干仓 ...
- C#_面试题1
C#_面试题1 1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么? 答:尽可能用约束(包括CHECK.主键.唯一键.外键.非空字段)实现,这种方式的效率最好:其次用触发器,这种方 ...
- Minio架构简介
简介 Minio是一个go编写基于Apache License v2.0开源协议的对象存储系统,是为海量数据存储.人工智能.大数据分析而设计,它完全兼容Amazon S3接口,十分符合存储大容量的非结 ...
- 挑战吧,HarmonyOS应用开发工程师
一年一度属于工程师的专属节日1024已过,但程序员多重活动持续进行中~ 参与活动即有机会获得HUAWEI Freebuds 5i 耳机等精美礼品! 点击"阅读原文"查看更多活动 ...
- redis 简单整理——redis 的字符串基本结构和命令[二]
前言 简单介绍一下redis的基本结构和命令. 正文 redis有5种基本结构: 字符串 哈希 列表 集合 有序集合 那么就来看下其基本命令吧. 通用命令键: keys * 查看全部键,一般不怎么用. ...
- c# webapi swagger
如何配置swagger? 在使用项目中,我们希望去查看我们的webapi的测试,那么我们是需要去有一个集成的测试的. 步骤 1.在nutget管理包中下载swagger包. 2.这样会在App_sta ...
- eclipse 卡顿的优化办法
1. 关闭校验 2. 关闭插件自动升级 3.关闭界面设置的一些选项
- 如何解决打不开Microsoft Store的痛处?
换了机房后,我最喜欢的计算器和画图3d没有了,网上的方法都行不通,怎么办? 第一步,在百度上搜索你想安装的东西,例如我搜索的画图3d,就会有这个链接. 然后,把这个链接复制到这个网站的搜索框中,就会有 ...
- 【Oracle】使用xmlagg(xmlparse(content()).getclobval()拼接信息
使用xmlagg(xmlparse(content()).getclobval()拼接信息 简单来说格式如下 xmlagg(xmlparse(content(内容||分割符)).getclobval( ...