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构建tinyexr
参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone https://github.com/syoyo/tinyexr.git 进入源码 ...
- 本周四晚19:00知识赋能第八期第2课丨ArkUI自定义组件
9月21日19:00~20:00,第八期知识赋能第2节直播就要开始啦!本次直播将为同学们带来涂鸦小游戏的趣味体验,让大家全面了解ArkUI框架的应用,帮助你们在自己已有专业的基础上拓宽知识边界,学习 ...
- RabbitMQ 02 安装
安装 推荐使用Docker进行安装. 执行如下命令. docker run -d --restart always --name rabbitmq \ -e RABBITMQ_DEFAULT_USER ...
- MogDB/openGauss数据库package关键字的两种用法
MogDB/openGauss 数据库 package 关键字的两种用法 本文出处:https://www.modb.pro/db/237701 package 关键字在 MogDB 数据库里有两种用 ...
- MogDB 2.1.1 初始化参数概要说明
MogDB 2.1.1 初始化参数概要说明 本文出处:https://www.modb.pro/db/394787 MogDB 数据库安装完成后,官方文档提供了刷新参数的脚本,推荐执行脚本来进行初始化 ...
- 实验2 C语言分支与循环基础应用编程
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 int main() { ...
- CentOS 8 安装更新国内清华大学源手记【亲测成功】
一直和各种OS打交道,仍觉得自己是小白,故深知小白们的困惑和蛋碎,特此将安装更新源的细节和步骤做了详细整理,供大家参考.红字是命令和提示,深灰色代码框中是源配置,本文采用了清华大学CentOS 8的源 ...
- Locust、Jemter、Loadrunner三种工具的分布式压测
前言: 最近公司接了一个云上展会项目,合同里签订的是6w并发连接数和2w QPS的性能指标,还有监理单位,第三方评测单位. 唉,先吐槽一下,有了监理和评测,文档tmd一堆堆,严格按照软件开发来执行,写 ...
- eclipse 导入项目报错
eclipse 导入项目报错 用的是jsp的项目,svn下来以后发现很多地方都报错,看了一圈下来,大部分的报错都是因为一些基本的jsp页面的import部分报错,但是import的都是java自带的包 ...
- FasterViT:英伟达提出分层注意力,构造高吞吐CNN-ViT混合网络 | ICLR 2024
论文设计了新的CNN-ViT混合神经网络FasterViT,重点关注计算机视觉应用的图像吞吐能力.FasterViT结合CNN的局部特征学习的特性和ViT的全局建模特性,引入分层注意力(HAT)方法在 ...