Java常用类

Java常用类,第1张

Java常用类 Java常用类

因为只是对java常用类的一些用法记录,部分代码不够严谨。

Object

常用方法

hashCode()返回对象的hash值

toString()返回对象的字符串表示形式

clone()用于创建并返回一个对象的浅拷贝

getClass()获取对象运行时的类

notify()唤醒一个在此对象监视器上等待的线程

wait()让当前线程进入等待状态。直到其他线程调用此对象的notify方法或notifyAll()方法

equals()判断两个对象的引用是否指向同一个地址

如果子类重写了 equals() 方法,就需要重写 hashCode() 方法,比如 String 类就重写了 equals() 方法,同时也重写了 hashCode() 方法。至于为什么,以下网址给出了详细的解释网址

Object类的方法非常重要,java所有的类都继承于它,所以万物皆可调用以上方法。子类大可以重写以上方法实现更多的功能。如重写clone实现深拷贝

String

字符串对象是存放在常量池中的

String sentence1="你好";
String sentence2="你好";
//那么sentence1和sentence2都指向了同一个地址

String sentence3=new String("你好");
String sentence4=new String("你好");
//new方法会在动态区开辟一块内存空间,尽管都是"你好",但这里的"你好"存放在动态区的不同地址中。作为不同的对象使用,所以地址不同。不过这里的"你好"同样也来自于常量池

//字符串的并置
String you="你";
String hi="好";
String you=you+hi;//你好
"你好"==you;//true 当发现两个字符串拼接出的字符串在常量池中时,就会用这一个字符串的引用作为String对象的引用。不在常量池时就会构建出这一个字符串常量

常用方法

length()//返回字符串长度  "你好"返回2
equals(String other)//判断当前String对象的字符串序列是否与某一个序列相同
startsWith(String head)//是否以head开头
endWith(String end)//是否以end结尾
compareTo(String s)//与s比较大小
contains(String s)//判断当前字符串中是否包含s子串
indexOf(String s)//检索字串s的第一个字符在字符串中的位置(多次出现取第一个)
lastIndexOf(String s)//同上,(多次取最后一个)
subString(int startpoint)//返回从startpoint开始到字符串结尾的子串
subString(int start,int end)//同上,说白了就是python切片

字符串与基本数据的相互转化

相应类数据类调用对应类的静态parse方法即可Byte、Short、Long、Float、Double、Integer

parseByte(String s);
parseShort;
parseLong;
parseFloat;
parseDouble;

//例子
String x="10";
int y=Integer.parseInt(x);
Object c=y;
System.out.println(y.getClass().toString());

//将数值转化为String
String.valueOf(值);

由于很多时候需要对字符串中的某些元素进行处理。但是字符串具有不可变性,所以会将字符串转化为字符数组或者字节数组进行处理

//处理完之后,String的构造函数自带对字符数组和字节数组的构造方法(还有一些其他的构造方法,详情见String源码)
getChars(int start,int end,char c[],int offset);//将字符串中某部分字符串按字符放入c中,并且从c的第offset位开始存放
toCharArrays();//将字符串全部转化为字符数组。底层使用的是System.arraycopy,所以效率极高

getBytes();//使用平台默认的字符编码,将当前的String对象的字符序列存放到字节数组中,并返回数组的引用
getBytes(String charsetName);//使用指定的参数字符编码
//默认的字符编码是GB2312,带参数的getBytes会抛出UnsupportedEncodingException异常,需要使用try,catch语句

正则表达式

String对象可以调用matches(String regex)方法,判断当前对象是否匹配regex中的表达式

精通正则表达式都可以出一本书了,不过一般掌握常用的就足够了。

正则表达式学习网址

https://www.runoob.com/regexp/regexp-syntax.html

matches(String regex);
replaceAll(String regex,String replacement);//把所有符合正则表达式的子串替换
split(String regex);//把匹配regex的子串作为分割符分割字符串,并返回分割后的字符串数组

StringBuilder

由于使用String并置的特性拼接字符串效率低下,并且会对内存有额外的消耗。所以提供的

StringBuilder sv=new StringBuilder(1024);//这里的1024只是预设容量,当字符串长度超过1024时,会自动增加容量
for(int i=0;i<1000;i++){
    sv.append(',');
    sv.append(i);
}
String s=sv.toString();
//https://www.runoob.com/java/java-stringbuffer.html 学习网址

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

StringBuffer

用法同StringBuilder,相比之下,适用于多线程,更安全,不过效率低。

StringTokenizer

相比于split对不熟悉正则表达式的程序猿更友好

//常用的两个构造方法
StringTokenizer(String s);//会使用默认的分隔标记对字符串进行分割(空格符,换行符,回车符,Tab符,进纸符)
StringTokenizer(String s,String delim);//使用delim中含有的字符作为分割标记

//例
String s="you are welcome(thank you),nice to meet you";
StringTokenizer stringArr=new StringTokenizer(s,"() ,");//表示用(),空格,以及,作为分割符
//就能做到将每一个单词单独分开
//StringTokenizer对象的其他方法见源码即可,基本就是看见名字就知道是什么意思
Scanner

Scanner可以配合System.in进行输入,但其本质是字符解析

String NBA="I Love This Game";
Scanner scanner=new Scanner(NBA);
scanner.useDelimiter(正则表达式);//设置分割标记
//用hasNext()等进行判断,接下来就可以用next,nextInt等方法返回下一个指定的字符序列

StringTokenizer和Scanner的区别

StringTokenizer类把分解出的全部单词都存放到StringTokenizer对象的实体中,因此可以较快速度获得所有单词,但这样的缺点是占用内存较多。Scanner不把单词放到Scanner中,而是存放怎样获取单词的分割标记。所以获取单词的速度较慢,但节省内存。

Date类
//使用Date类的无参构造方法创建的对象可以获取创建对象时的本地计算机时间
Date nowTime=new Date();

//使用带参数构造方法
Date(1000);//表示公元后1000毫秒,计算机的公元是1970年1月1日0时
Calendar类
Calendar calendar=Calendar.getInstance();//获取canlendar实例,canlendar的构造函数可访问类型为protected,所以为单例模式
//Calendar的时间是时刻流逝的,可以模拟现实生活中的时间。
日期格式化

使用String.format方法,format方法还可以进行数字的格式化

Date nowTime=new Date();
String s1=String.format("%tY年%tm月%td日",nowTime,nowTime,nowTime);//假如当前时间为2021年10月20日,字符序列为2021年10月01日

SimpleDateFormat类方法

Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");

System.out.println("当前时间为: " + ft.format(dNow));//2021-10-20 17:48:34

具体的格式化方式

https://www.runoob.com/java/java-date-time.html

Math

全都是数学公式

BigInteger

程序如果需要处理特别大的数需要用到

BigInteger内置一些常用数学运算,但是很多数学运算都没有,需要单独构造(不过一般情况下也不会用到BigInteger去进行复杂的数学计算)

Random

random称为随机数构造器,默认使用当前的计算机时间作为构造器的种子

也可以自己设置种子

使用next方法获取一个随机数

x=random.nextInt(100);//表示一个[0,100)的随机数 #随机数都是伪随机
Class类

Class类的实例可以帮助程序创建其他类的实例。创建对象最常用的方式就是使用new运算符和类的构造方法。实际上也可以用Class对象得到某一个类的实例

//此方法返回一个和参数className指定的类相关的Class对象。如果类在某个包中,还必须加上包名
public static Class forName(String className) throws ClassNotFoundException;
//然后对返回的class对象调用Instance方法就可以创建对应实例
//有点类似python元类

//例
Class cs=Class.forName("Rect");
Rect rect=(Rect)cs.newInstance();

console

如果希望在键盘输入一行文本,但不想让该文本回显,即不在命令行显示,那么就需要使用java.io包中的Console类

//注意,console在IDE环境中System.console会返回null
Console cons=System.console();//获取console对象
char[] passwd=cons.readPassword();//输入一行文本(不回显)

Java.io.Console 只能用在标准输入、输出流未被重定向的原始控制台中使用,在 Eclipse / Idea 或者其他 IDE 的控制台是不可用的。

详情见

https://blog.csdn.net/jhsword/article/details/108564052

Pattern类与Matcher类

模式匹配:检索和指定模式匹配的字符序列

Pattern和Matcher为java中提供的专门进行模式匹配的类,这两个类一般是结合使用的

String input="hello, good morning ,this is a good idea";
//pattern负责装载正则表达式
String regex="good";
Pattern pattern=Pattern.compile(regex);
//获取matcher实例,并装载String语句以供解析
Matcher matcher =pattern.matcher(input);


ng语句以供解析
Matcher matcher =pattern.matcher(input);

					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4670572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存