可变字符串

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)的更多相关文章

  1. Java学习之旅开篇:运行机制及环境搭建

    在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...

  2. Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...

  3. 第一篇,java学习之旅

    在java的这座殿堂中,我才刚刚推开了大门,就像是在岔路口找到了一条,走向前进java大门的路. 下面是一些java算法的问题 第一题: package project.model; import j ...

  4. Java学习之旅(一):探索extends

    鄙人为兴趣爱好,0基础入门学习Java,有些心得想法,记录于此,与君分享. 然毕竟新手,学识尚浅,错误之处,希望多多指正批评,也是对我最大的帮助! 前言:本篇文章,主要讨论在子类继承父类之后,一些继承 ...

  5. ROS2学习之旅(14)——编写简单的发布者和订阅者(C++)

    节点是通过ROS Graph进行通信的可执行进程.在本文中,节点将通过话题以字符串消息的形式相互传递信息.这里使用的例子是一个简单的"talker"和"listener& ...

  6. Java学习之旅基础知识篇:数组及引用类型内存分配

    在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...

  7. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  8. 我的java学习之旅--一些基础

    (因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...

  9. Java学习之旅(二):生病的狗1(逻辑推导)

    前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...

  10. ASP.NET Core on K8S学习之旅(14)Ingress灰度发布

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 之前一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和 ...

随机推荐

  1. C# 做个Splash(启动屏幕)

    现在有好些splash的做法,我的比较简单,而且如果你的素材不错的话,应该可以做出很好的效果,这个教程不依赖任何第三方控件,直接使用vs的就行了,下面这个是预览图: 正文开始: 我们首先新建一个win ...

  2. std::thread 三:条件变量(condition_variable())

    condition_variable  .  wait   .  notify_one   .  notify_all *:notify_one:通知(唤醒)一个线程 *:notify_all:通知( ...

  3. 美团一面,面试官让介绍AQS原理并手写一个同步器,直接凉了

    写在开头 今天在牛客上看到了一个帖子,一个网友吐槽美团一面上来就让手撕同步器,没整出来,结果面试直接凉凉. 就此联想到一周前写的一篇关于AQS知识点解析的博文,当时也曾埋下伏笔说后面会根据AQS的原理 ...

  4. 基于ArkUI开发框架,图片马赛克处理的实现

     原文:https://mp.weixin.qq.com/s/60HDKcBFV7GTjZpzeHtjeg,点击链接查看更多技术内容.     关于马赛克   马赛克是一种使用较为广泛的图片处理方式, ...

  5. 树模型-label boosting-GBDT

    GBDT GBDT是boosting系列算法的代表之一,其核心是 梯度+提升+决策树. GBDT回归问题 通俗的理解: 先来个通俗理解:假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时 ...

  6. MMDeploy部署实战系列【第二章】:mmdeploy安装及环境搭建

    MMDeploy部署实战系列[第二章]:mmdeploy安装及环境搭建 这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善.如果有那个地方没看懂,评论区问就可以,我给补充. 版权声明:本文为博 ...

  7. JVM简明笔记3:类加载机制

    1 类的加载 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结 ...

  8. 力扣1346(java&python)-检查整数及其两倍数是否存在(简单)

    题目: 给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M). 更正式地,检查是否存在两个下标 i 和 j 满足: i != j 0 &l ...

  9. 力扣1337(java&python)-矩阵中战斗力最弱的 K 行(简单)

    题目: 给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示. 请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序. 如果第 i 行的军人数量少于第 ...

  10. 力扣682(java)-棒球比赛(简单)

    题目: 你现在是一场采用特殊赛制棒球比赛的记录员.这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分. 比赛开始时,记录是空白的.你会得到一个记录操作的字符串列表 ops,其中 ops ...