java4~~~

news2024/12/23 14:16:08

 日期

第一代

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;

public class Main {
    public static void main(String[] args) throws ParseException {
        //两种构造器的使用
        //1、获取当前系统时间
        Date d1 = new Date();
        //默认输出的日期格式是国外的方式,需要对格式进行转换
        System.out.println(d1.toString());
        //获取对应的毫秒数 getTime()
        long millTimes = d1.getTime();

        //2、通过指定毫秒数获取时间
        Date d2 = new Date(9234567);
        System.out.println(d2);

        //指定相应的格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
        String format = sdf.format(d1);
        System.out.println(format);

        //可以把一个格式化的String转成对应的Date
        //得到Date在输出时,还是按照国外的形式,如果希望指定格式输出,需要转换
        //在把String => Date, 使用的sdf格式需要和你给的String的格式一样,否则会抛出转换异常
        String s = "1996年01月01日 10:20:30 星期一";
        Date parse = sdf.parse(s);
        System.out.println(parse);


    }
}

第二代Calendar(日历)

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        //1、Calendar是一个抽象类,并且构造器是protected
        //2、可以通过getInstance()来获取实例
        //3、没有专门的格式化类,需要自己组合显示
        //4、按照24小时进制来获取时间 Calendar.HOUR_OF_DAY
        Calendar c = Calendar.getInstance();//创建日历类对象
        System.out.println(c);//输出有很多字段
        //获取日历对象的某个日历字段
        System.out.println("年 " + c.get(Calendar.YEAR));
        //返回月的时候是按照 0 开始编号
        System.out.println("月 " + (c.get(Calendar.MONTH) + 1));
        System.out.println("日 " + c.get(Calendar.DAY_OF_MONTH));
        System.out.println("小时 " + c.get(Calendar.HOUR));
        System.out.println("分钟 " + c.get(Calendar.MINUTE));
        System.out.println("秒 " + c.get(Calendar.SECOND));
    }
}

第三代

        LocalDate(年月日)

        LocalTime(时分秒)

        LocalDateTime(日期+时间)

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        //1、使用now()返回表示当前日期时间的对象
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);
        System.out.println(ldt.getYear());
        System.out.println(ldt.getMonth());//月,英文单词
        System.out.println(ldt.getMonthValue());//月,具体的数
        System.out.println(ldt.getDayOfMonth());//日 

        //2、of() 获取指定的时间
        LocalDateTime localDateTime = LocalDateTime.of(2022,12,5,11,23,45);
        System.out.println(localDateTime);


        //3、使用DateTimeFormatter对象进行格式化
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");
        String format = dtf.format(ldt);
        System.out.println(format);
    }
}

 String

final:String是不可被继承的,赋值后不可修改(地址不可以修改,内容可以变化)。

Serializable可序列化的接口。凡是实现此接口的类的对象就可以通过网络或本地流进行数据的传输(序列化)。

Comparable:凡是实现此接口的类,其对象都可以比较大小。在这个接口里面有抽象方法,String类实现了这个接口里面的抽象方法,指明了怎么算叫“大”,怎么算叫“小”,给了一种标准(重写了方法)。

CharSequence:字符序列。

可以看到String类实现了相关的接口,没有明显地写父类,也就是说它是继承Object类的。

两种创建String对象的区别

字符串常量池不允许存放两个相同的字符串常量

方式一:直接赋值 String s = "hsp";

        String可以通过字面量的方式来定义。字符串放在了字符串常量池当中,如果有直接指向,没有则重新创建然后指向,最终指向的是常量池的空间地址

方式二:调用构造器 String s = new String("hsp");

        先在堆中创建空间,里面维护了value属性,指向常量池的abc地址。如果没有则重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址

String的不可变性

        1、当对字符串变量重新赋值时,需要重新指定一个字符串常量的位置进行赋值,不能在原有的位置修改

        2、当对现有的字符串进行拼接操作时,需要重新开辟空间保存拼接以后的字符串,不能在原有的位置修改

String a = "hello" + "abc"; ==> String a = "helloabc" 只创建了一个对象

常量 + 常量 并没有创建新的对象

        3、当调用字符串的replace()替换现有的某个字符时,需要重新开辟空间保存修改以后的字符串,不能在原有的位置修改

String与基本数据类型、包装类之间的转换

//基本数据类型	=>	String

int num = 10;

String s1 = num + "";

String s2 = String.valueOf(num);



//String	=>	基本数据类型

String s3 = "1234"'

int num = Integer.parseInt(s3);



//String	=>	char[]

char[] arr = str.toCharArray();



//char[]	=>	String

String str = new String(arr);

String的常见方法

StringBuffer

public class StringBuffer01 {
    public static void main(String[] args) {
        //1. StringBuffer 的直接父类 是 AbstractStringBuilder
        //2. StringBuffer 实现了 Serializable, 即StringBuffer的对象可以串行化
        //3. 在父类中  AbstractStringBuilder 有属性 char[] value,不是final
        //   该 value 数组存放 字符串内容,引出存放在堆中的
        //4. StringBuffer 是一个 final类,不能被继承
        //5. 因为StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)
        //   不用每次都更换地址(即不是每次创建新对象), 所以效率高于 String
 
        StringBuffer stringBuffer = new StringBuffer("hello");
    }
}

String 和 StringBuffer 相互转换

public class StringAndStringBuffer {
    public static void main(String[] args) {
 
        //看 String——>StringBuffer
        String str = "hello tom";
        //方式1 使用构造器
        //注意: 返回的才是StringBuffer对象,对str 本身没有影响
        StringBuffer stringBuffer = new StringBuffer(str);
        //方式2 使用的是append方法
        StringBuffer stringBuffer1 = new StringBuffer();
        stringBuffer1 = stringBuffer1.append(str);
 
        //看看 StringBuffer ->String
        StringBuffer stringBuffer3 = new StringBuffer("韩顺平教育");
        //方式1 使用StringBuffer提供的 toString方法
        String s = stringBuffer3.toString();
        //方式2: 使用构造器来搞定
        String s1 = new String(stringBuffer3);
 
    }
}

StringBuffer 类常见方法

public class StringBufferMethod {
    public static void main(String[] args) {
 
        StringBuffer s = new StringBuffer("hello");
 
        //增
        s.append(',');// "hello,"
        s.append("张三丰");//"hello,张三丰"
        s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
        System.out.println(s);//"hello,张三丰赵敏100true10.5"
 
 
        //删
        /*
         * 删除索引为>=start && <end 处的字符
         * 解读: 删除 11~14的字符 [11, 14)
         */
        s.delete(11, 14);
        System.out.println(s);//"hello,张三丰赵敏true10.5"
 
        //改
        //使用 周芷若 替换 索引9-11的字符 [9,11)
        s.replace(9, 11, "周芷若");
        System.out.println(s);//"hello,张三丰周芷若true10.5"
        //查找指定的子串在字符串第一次出现的索引,如果找不到返回-1
        int indexOf = s.indexOf("张三丰");
        System.out.println(indexOf);//6
 
        //插
        //在索引为9的位置插入 "赵敏",原来索引为9的内容自动后移
        s.insert(9, "赵敏");
        System.out.println(s);//"hello,张三丰赵敏周芷若true10.5"
 
        //长度
        System.out.println(s.length());//22
        System.out.println(s);
 
    }
}

比较

        ① StringBuilder 和StringBuffer 非常相似,均代表可变的字符序列,而且方法也一样;

        ② String:不可变字符序列,效率低,但是复用率高;

        ③ StringBuffer:可变字符序列、效率较高(增删)、线程安全(适合多线程);

        ④ StringBuilder:可变字符序列、效率最高、线程不安全(适合单线程);

        ⑤ 效率:StringBuilder > StringBuffer > String

选择

        ① 如果字符串存在大量的修改操作,一般男使用StringBuffer和StringBuilder;

        ② 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder;

        ③ 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer;

        ④ 如果字符串存在很少量的修改操作,被多个对象引用,使用String,比如配置信息等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV高级图形用户界面(1)创建滑动条函数createTrackbar()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 创建一个滑动条并将其附加到指定的窗口。 该函数 createTrackbar 创建一个具有指定名称和范围的滑动条&#xff08;滑块或范围控制&#xff09;…

Flexbox 弹性盒子布局

Flexbox&#xff0c;全称弹性盒子布局&#xff0c;提供更精细的控制&#xff0c;能轻松解决困扰我们许久的垂直居中和登高列问题。 1 display: flex 将容器设置为弹性容器&#xff0c;容器会占据100%的可用宽度&#xff0c;高度则由自身的内容来决定&#xff0c;即使改变主轴…

基于SSM的“企业人事管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“企业人事管理系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登陆页面 部门管理页面 加班页面 考勤页面 请假页面 工资页面 …

leetcode链表(三)-反转链表

题目 . - 力扣&#xff08;LeetCode&#xff09; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 思路 首先定义一个cur指针&#xff0c;指向头结点&#xff0c;再定义一个pre指针&#xff0c;初始化为None。 然后就要开始反转了&…

使用tgz包下载安装clickhouse低版本

1.下载安装包 官方下载地址&#xff1a;https://packages.clickhouse.com/tgz/stable 阿里云下载地址&#xff1a;clickhouse-tgz-stable安装包下载_开源镜像站-阿里云 共需要下载四个文件 clickhouse-common-static-20.3.10.75.tgz clickhouse-common-static-dbg-20.3.10.7…

如何通过零工市场小程序提高匹配效率?

零工市场正往好的方向逐步发展&#xff0c;零工市场小程序就是数字化转型成功的标志&#xff0c;那么零工市场小程序作为求职者和雇主之间沟通的桥梁&#xff0c;通过利用现代技术&#xff0c;例如Java算法&#xff0c;提高了灵活就业市场的效率。 Java通过数据分析&#xff0…

AI预测体彩排3采取888=3策略+和值012路或胆码测试10月11日升级新模型预测第101弹

经过100多期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;已到达90%的命中率&#xff0c;这给喜欢打私菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大…

Docker Overlay2 空间优化

目录 分析优化数据路径规划日志大小限制overlay2 大小限制清理冗余数据 总结 分析 overlay2 目录占用磁盘空间较大的原因通常与 Docker 容器和镜像的存储机制以及它们的长期累积相关&#xff0c;其实我之前在 Docker 原理那里已经提到过了。 通常时以下几种原因导致&#xff…

Java:数据结构-LinkedList与链表(1)

一 链表 1.. ArrayList的缺陷&#xff08;LinkedList的优点&#xff09; 在ArrayList任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后 搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低&#xff0c;因此ArrayList不适合做任意位置插入和删除…

【AI知识点】残差网络(ResNet,Residual Networks)

AI知识点总结&#xff1a;【AI知识点】 AI论文精读、项目、思考&#xff1a;【AI修炼之路】 残差网络&#xff08;ResNet&#xff0c;Residual Networks&#xff09; 是由微软研究院的何凯明等人在 2015 年提出的一种深度神经网络架构&#xff0c;在深度学习领域取得了巨大的成…

Vue3封装消息提示框-基于element-plus

Vue3封装消息提示框-基于element-plus 图片示例 封装代码 创建modal.js文件 import {ElMessage,ElMessageBox,ElNotification,ElLoading, } from "element-plus";let loadingInstance;export default {// 消息提示msg(content) {ElMessage.info(content);},// 错误…

手机移动终端的土壤检测

手机OTG转USB串口&#xff0c;读取土壤检测设备信息&#xff0c;在APP展示。 总结一下 1. 用了MAUI框架&#xff0c;这东西感觉比xamarin好用&#xff0c;特别是contentpage和单例模式&#xff0c;数据绑定也很OK。 2. 串口驱动不好孤岛&#xff0c;废了不少功夫专门做这个。 3…

Lory: 推进大型语言模型训练的新篇章

人工智能咨询培训老师叶梓 转载标明出处 随着模型规模的增长&#xff0c;如何有效训练并利用这些模型成为了一个挑战。陈丹琦团队一项新的研究提出了一种创新的预训练方法——Lory&#xff0c;旨在解决大模型在混合专家&#xff08;MoE&#xff09;架构中的可微分性和计算效率…

开关打开输入框才能输入文字,否则为禁用状态

页面开关默认为关闭状态&#xff0c;输入框为禁用状态。 当点击开关&#xff0c;打开开关后&#xff0c;输入框禁用状态解除&#xff0c;才可以在输入框内输入。 html结构: <div class"page_top"><!-- 第一行 --><div class"top_first">…

使用three.js 实现一个 马赛克得 shader

使用three.js 实现一个 马赛克得 shader 源链接&#xff1a;https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idmosaicShader 国内站点预览&#xff1a;http://threehub.cn github地址: https://github.com/z2586300277/three-cesium-example…

HTML的介绍

HTML HTML是一种超文本标记语言,超文本是指,除了文本之外,还可能包含图片,音频,或者评注等的 文本形式,比文本强大,通过链接和交互方式来组织和呈现信息.标记语言是指,由标签构成的语言.HTML定义了多种不同的标签,用来表示不同的内容. 标签的介绍: 1.<h3> 三级 </h3&…

增强AI查询:使用Rewrite Retrieve Read框架优化RAG

增强AI查询&#xff1a;使用Rewrite Retrieve Read框架优化RAG 引言 在大规模语言模型&#xff08;LLM&#xff09;中&#xff0c;通过查询重写来提升检索增强生成&#xff08;RAG&#xff09;的性能是一个热门研究领域。本文将介绍如何使用rewrite_retrieve_read模板来优化R…

基于SpringBoot的图书推荐系统的设计与实现(论文+源码)_kaic

摘 要 网络信息技术的高速发展&#xff0c;使得高校图书馆的服务空间日益扩大&#xff0c;依据个人特点的针对性服务逐渐成为新服务模式的主导趋势。对于大多数用户而言&#xff0c;很难在大量的学术图书馆中快速找到他们想要的材料。另外&#xff0c;随着时代的不断发展&am…

Mysql的LSN是什么?

LSN的含义 ​ LSN全称为 Log Sequence Number&#xff0c;即日志序列号。它是一个不断递增的数字&#xff0c;用来标识事务日志中的每个操作或事件。LSN是一个64位的数字&#xff0c;每一个LSN值都是唯一的&#xff0c;并且随时间线性增加。 ​ 通过SHOW ENGINE INNODB STATUS;…

GADBench Revisiting and Benchmarking Supervised Graph Anomaly Detection

Neurips 23 推荐指数&#xff1a; #paper/⭐⭐⭐ 领域&#xff1a;图异常检测 胡言乱语&#xff1a; neurips 的benchmark模块的文章总能给人一些启发性的理解&#xff0c;这篇的insight真有意思。个人感兴趣的地方会加粗。此外&#xff0c;这篇文章和腾讯AIlab合作&#xff…