首页 > 编程语言 >Java常用类

Java常用类

时间:2023-05-09 22:35:27浏览次数:31  
标签:常用 Java String int char 字符串 java public

字符串相关的类

关于String

String类:代表字符串。Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现
String 是一个final类,代表不可变的字符序列。
字符串是常量,用双引号引起来标识,它们的值在创建之后不能更改。
String对象的字符内容是存储在一个字符数组final char[] value中的
String 实现了Serializable接口,标识字符串是支持序列化的。
通过字面量的方式给一个字符串赋值,此时的字符串值声明在字符串常量池的
字符串常量池中式不会存储相同内容的字符串的

理解不可变性:当对字符串重新赋值时,需要重写指定内存区域赋值,不能指定原有的value进行赋值。2、对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value赋值3、当调用String 的 replace()方法修改指定的字符或字符串时,也需要重新指定内存区域赋值

常量和常量的拼接结果在常量池。且常量池中不会存在相同内容的常量
只要器中有一个是变量,结果就在堆中
如果拼接的结果调用intern()方法,返回值就在常量池中。

String s1 = "abc";//字面量
String s2 = "abc";
s1==s2;//地址值 true
s1 = "hello";//新增一个hello在方法区中

String对象的创建

String str = "hello";
//本质上this.value = new char[0]
String s1 = new String();

//this.value = original.value
String s2 = new String(String original);

//this.value = Arrays.copyOf(value,value.length)
String s3  = new String(char[] a);

String s4 = new String(char[] a,int startIndex,int count)

面试题:String s = new String("abc");方式创建对象,在内存中创建了几个对象?两个:一个是对空间中new结构,一个是char[]对应的常量池中的数据:"abc"

面试题:

public class StringTest{
	String str = new String("good");
	char[] ch = {'t','e','s','t'};
	public void change(String str, char ch[]){
		str="test ok";
		ch[0] ='b';
	}
	public static void main(String[] args){
		StringTest ex = new StringTest();
		ex.change(ex.str,ex.ch);
		System.out.println(ex.str);//good
		System.out.println(ex.ch);//best
	}
}

String常用方法1

int lengh():返回字符串的长度:return value.length
char charAt(int index):返回某处索引处的字符 return value[index]
boolean isEmpt():判断是否为空字符串:return value.length==0
String toLowerCase():使用默认语言环境,将String中的所有字符转换为小写
String toUpperCase():使用默认语言环境,将String中所有字符串转换为大写
String trim():返回字符串的副本,忽略前导空白和尾部空白
boolean equals(Object obj):比较字符串内容是否相同
boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
String concat(String str):将指定字符串连接到此字符串的结尾。等价于用"+"
int compareTo(String anotherString):比较两个字符串的大小
String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后一个子字符串。
String substring(int beginIndex,int endIndex):返回一个新的字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串
boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
boolean startsWith(String prefix,int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始
boolean contains(CharSequence s):当且仅当此字符串包含指定的char值序列时,返回true
int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
int indexOf(String str,int formIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
int lastIndexOf(String str):返回指定子字符串在此字符串中最右边处的索引
int lastIndexOf(String str,int formIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
注意:indexOf和lastIndexOf方法如果未找到都是返回-1

String replace(char oldChar,char new Char):返回一个新的字符串,它是通过newChar替换此字符串中出现的所有oldChar得到的
String replace(CharSequence target,CharSequence replacement):使用指定的字面值替换此字符串所有匹配字面值目标序列的子字符串
String replaceAll(String regex,String replacement):使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串
String replaceFirst(String regex,String replacement):使用给定的replacement替换此字符串匹配给定正则表达式的第一个子字符串

boolean matches(String regex):告知此字符串是否匹配给定的正则表达式
String[] split(String regex):根据给定正则表达式的匹配拆分此字符串
String[] split(String regex,int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。

涉及到String类与其他结构之间的转换:
String 与基本数据类型、包装类之间的转换。
String --->基本数据类型、包装类:调用包装类的静态方法:parseXxx(str)
基本数据类型、包装类 --> String:调用String重载的valueOf(xxx)

String 与 char[]之间的转换:
String --> char[]:调用String的toCharArray()
char[]-->String:调用String的构造器

String str1 = "abc1230";
char[] charArry=str1.toCharArray();

编码和解码:字节和字符串之间的相互转换
String 与 byte[]之间的转换:
String ---> byte[]:调用String的getBytes()(使用默认的字符集进行转换) getBytes("gbk");(使用gbk进行编码")
byte[]---> String:调用String的构造器:使用默认的字符集进行编码,String str2 = new String(bytes);//使用默认字符集进行解码。String str3 = new String(bytes,"gbk"); 编码集和解码集得保持一致。

StringBuffer 和 StringBuilder:
都是可改变的字符序列:StringBuffer是线程安全的,StringBuilder是线程不安全的

源码分析:

String str = new String();//new char[0];
String str1 = new String("abc");//new char[]{'a','b','c'};
StringBuffer sb1 = new StringBuffer();//new char[16];底层创建了一个长度是16的char型数组
sb1.append('a');//value[0]='a';
StringBuffer sb2 = new StringBuffer("abc");//char[] value = new char["abc".length+16];

问题一:System.out.println(sb.length());//3
问题二:扩容问题 左移一位(乘2)+2

常用方法:
StringBuffer append(xxxx):提供了很多append()方法,用于进行字符串的拼接
StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer replace(int start,int end,String str):把[start,end)位置替换为str
StringBuffer insert(int offset,xxx):在指定位置插入xxx
StringBuffer reverse():把当前字符串序列逆转
以上方法都可以用方法链进行操作
public int indexOf(String str):
public String subString(int start,int end):
public int length():
public char charAt(int n):
public void setCharAt(int n,char ch):

关于时间和日期的api测试

1.System类中的currentTimeMillis();
long time = System.currentTimeMillis();//时间戳 返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差

2.java.util.Date类
两个构造器的使用:
Date():创建一个当前时间的Date的对象
Date(Long timestamp):创建一个对应时间戳的Date()对象

两个方法的使用:
toString():显示当前的年、月、日、时、分、秒
getTime():获取当前Date对象对应的时间戳

java.sql.Date类对应着数据库中日期的类型的变量
Date(Long timestamp):创建一个对应时间戳的Date()对象,只显示年月日

3.java.text.SimpleDateFormat类
格式化:
SimpleDateFormat():默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:public String format(Date date):方法格式化时间对象date
解析:
public Date parse(String source):从给定字符串开始解析文本,以生成一个日期。

4.java.util.Calendar(日历)类
Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能
获取Calendar实例的方法:
使用Calendar.getInstance()方法。
调用它的子类GregorianCalendar的构造器
一个Calendar的实例是系统时间的抽象标识,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_MONTH、DAY_OF_WEEK、HOUR_OF_DAY、MINUTE、SECOND
public void set(int field,int value);
public void add(int field, int amount);
public final Date getTime();
public final void setTime(Date date)
注意获取月份是一月是0 获取星期时:周日是1

5.新增时间日期API
java.time-包含值对象的基础包 //常用
java.time.chrono-提供对不同的日历系统的访问
java.time.format-格式化和解析时间和日期 //常用
java.time.temporal-包含底层框架和扩展特性
java.time.zone-包含时区支持的类
注: ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法,也就是公历。

LocalDate代表IOS格式(yyyy-MM-dd)的日期可以存储生日、纪念日等日期
LocalTime表示一个时间,而不是日期。
LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。

LocalDate、LocalTime、LocalDateTime比较重要的类
now()/* now(Zoneld zone) 静态方法,根据当前时间创建对象/指定时区的对象
of():静态方法,根据指定日期/时间创建对象
getDayOfMonth()/getDayOfYear():获取月份天数(1-31)/获取年份天数(1-366)
getDayOfWeek():获取星期几
getMonth():获取月份,返回一个Month枚举值
getMonthValue()/getYear():获取(1-12)/获取年份
getHour()/getMinute()/getSecond():获取当前对象对应的小时、分钟、秒
withDayOfMonth()/withDayOfYear()/withMonth()/withYear():将月份天数、年份天数、月份、年份修改为指定值并返回新的对象
plusDays(),plusWeeks(),plusMonths(),plusYears(),plusHours():像当前对象添加几天、几周、几月、几年、几个小时
minusMonths()/minusWeeks()/minusDays()/minusYears()/minusHours:从当前对象减去几个月、几周、几年、几小时

Instant: 时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳。
now():静态方法,返回默认UTC时区的Instant类的对象
ofEpochMilli(long epochMilli):静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
atOffset(ZoneOffset offset):解和即时的偏移来创建一个OffsetDateTime
toEpochMilli():返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳

java.time.format.DateTimeFormatter类:该类提供了三种格式化方法
预定义的标准格式。如:ISO_LOCAL_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
本地化相关的格式:如:ofLocalizedDateTime(FormatStyle.Long)
自定义的格式:如:ofPattern("yyyy-MM-dd hh:mm:ss E")
ofPattern(String pattern)静态方法,返回一个指定字符串格式的DateTimeFormattern
format(TemporalAccessor t)格式化一个日期、时间,返回字符串 LocalDate等均可
parse(CharSequence text)将指定字符序列解析为一个日期时间。

Java比较器Comparable或Comparator

Comparable接口的使用 自然排序

1、像String、包装类等实现了Comparable接口,重写了compareTo()方法,给出了两个对象大小
2、像String、爆炸u哪个类重写了compareTo()方法以后,进行了从小到大的排列
3、重写compareTo(obj)的规则:如果当前对象this大于形参对象obj,则返回正整数
如果当前对象this小于形参对象obj,则返回负整数
如果当前对象this等于形参对象obi,则返回零。

4、对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法,在compareTo(obj)方法中指明如何排序

定制排序 java.util.Comparator

当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序,强行对多个对象进行整体排序的比较。

重写compare(Object o1,Object o2)方法,比较01和o2的大小: 如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示01小于o2
可以将 Comparator 传递给 sort 方法(如 Collections.sort 或Arrays.sort)从而允许在排序顺序上实现精确控制。
还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。

其他常用类

System类

native long currentTimeMillis():返回当前计算机的时间
void exit(int status):该方法是退出程序
void gc():系统进行垃圾回收
String getProperty(String key):获取系统中属性为key的属性对应的值
java.version java运行时的环境版本
java.home java的安装目录
os.name 操作系统的名称
os.version 操作系统的版本
user.name 用户的账号名称
user.home 用户的主目录
user.dir 用户当前的工作目录

Math类(java.lang.Math)

abs 绝对值
acos,asin,atan,cos,sin,tan 三角函数
sqrt 平方根
pow(double a,double b)a的b次幂
log 自然对数
exp e为底指数
max(double a, double b)
min(double a,double b)
random() 返回0.0到1.0的随机数
long round(double a) double型数据a转换为long型 四舍五入
toDegrees(double angrad) 弧度->角度
toRadians(double angdeg) 角度->弧度

BingInteger和BigDecimal

Integer类作为int的包装类,能存储的最大整型值为231-1,Long类也是有限的,最大为263.1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类都无能为力,更不用说进行运算了。
java.math包的Biglnteger可以表示不可变的任意精度的整数。Biglnteger 提供所有 Java 的基本整数操作符的对应物,并提供java.lang.Math 的所有相关方法另外,Biglnteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成位操作以及一些其他操作。
构造器

BigInteger(String val): 根据字符串构建Biglnteger对象

public Biglnteger abs(): 返回此 Biglnteger 的绝对值的 BigInteger
Biglnteger add(Biglnteger val) : 返回其值为(this + val) 的 Biglnteger
BiglInteger subtract(Biglnteger val) : 返回其值为(this - val) 的 BigInteger
BigInteger multiply(Biglnteger val) : 返回其值为(this * val) 的 Biglnteger
Biglnteger divide(Biglnteger val) : 返回其值为 (this /val) 的 Biglnteger。整数相除只保留整数部分。
Biglnteger remainder(Biglnteger val) : 返回其值为 (this % val) 的 BigInteger
BigIntegerl] divideAndRemainder(Biglnteger val): 返回包含(this /val) 后跟(this % val) 的两个 Biglnteger 的数组。BigInteger pow(int exponent) : 返回其值为(this exponent) 的 Biglnteger。

一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中要求数字精度比较高,故用到java.math.BigDecimal类。BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
构造器

public BigDecimal(double val)
public BigDecimal(String val)

常用方法

public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

标签:常用,Java,String,int,char,字符串,java,public
From: https://www.cnblogs.com/rhy2103/p/17351238.html

相关文章

  • 入门1-pytest测试框架功能及常用第三方插件介绍
    安装1. 安装Python2. 安装pytest: pipinstall-Upytest3. 安装常用插件pipinstall-rrequirement.txtPS: 常用插件:pytestallure-pytestrequestsPyYAMLpandasopenpyxljsonpathrequests_toolbeltPrettyTablepytest-htmlpytest-xdist https://docs.py......
  • 实验四 Java图形界面与事件处理
    实验目的1.掌握Java语言中AWT和Swing组件的基本用法2.掌握Java语言中的事件处理方法3.掌握Java语言中事件源、监视器和处理事件的接口的概念图形用户界面设计程序(ArtFont.java)要求:设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、......
  • Java程序设计-实验五 Java多线程程序设计
    目的1.掌握Runnable接口实现多线程的方法2.掌握Thread类实现多线程的用法3.掌握Java语言中多线程编程的基本方法1.线程接力(45分)要求:编写一个应用程序,除了主线程外,还有三个线程:first、second和third。first负责模拟一个红色的按钮从坐标(10,60)运动到(100,60);second负......
  • JAVA知识点总结1
    目录1.关键字2.数据类型3.运算符4.流程控制语句4.1ifelse4.2Scanner类从键盘获取数据4.3获取一个随机数4.4switch-case4.5for循环4.6while循环4.7do-while循环5.数组5.1一维数组的基本使用5.2二维数组的基本使用5.3数组的常见操作(特征值统计、......
  • JAVA的线程池随笔
    线程池基本概念概念:线程池主要是控制运行线程的数量,将待处理任务放到等待队列,然后创建线程执行这些任务。如果超过了最大线程数,则等待。优点:线程复用:不用一直new新线程,重复利用已经创建的线程来降低线程的创建和销毁开销,节省系统资源。提高响应速度:当任务达到时,不用创建新的......
  • Docker CLI docker compose rm常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • 学习JavaScript数据结构与算法 第八章
    八,字典和散列表8.3ES2015Map类ECMAScript2015新增了Map类。constmap=newMap();map.set('Gandalf','[email protected]');map.set('John','[email protected]');map.set('Tyrion','[email protected]');......
  • 学习JavaScript数据结构与算法 第七章
    7.集合7.4ESMAScript2015---Set类ECMAScript2015新增了Set类作为JavaScriptAPI的一部分。我们可以基于ES2015的Set开发我们的Set类。constset=newSet()set.add(1)console.log(set.values())//@iteratorconsole.log(set.has(1))console.log(set......
  • 终端常用命令(自用)
    记录文件解压缩,解决向日葵无法连Ubuntu,ubuntu+jekyll搭建个人博客等命令。文件解压缩压缩tar-czvffilename.tar.gz/xxx/folder分割split-b4000M-a2-dfilename.tar.gzfilename.tar.gz.–verbose#命令最后的一个点"."不能丢了#-b意思是切分片大小,其单位......
  • Method com/mysql/jdbc/JDBC4ResultSet.getObject(Ljava/lang/String;Ljava/lang/Clas
      mybatis-plus生成的日期类型默认是localdatetime,数据库是datetime,按道理转换应该可以,我又不想把实体类转换成date查看依赖<--locadate/locadatetime的时间依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-ty......