Api
Api概述
应用程序接口是一些预先定义的函数,(工具类的一些方法)
目的是提供应用程序和开发人员基于某软件或硬件得以访问一组例称的能力
Object
所有类的父类
1.objec类中的方法都可以被子类使用
object类中的方法
1.getclass:返回对象的字节码文件对象
2.hashcode:返回对象的哈希码值
3.equals:比较俩个对象是否相同
4.toString:getClass().getclass()+@+interger.tohexString(hashcode());
类的全路径名+@+对象的哈希码值的十六进制
如果我们想输出自己的东西就必须要重新tostring方法
String
String 被final修饰的类,不能被继承
字符串存在于常量池中。字符串的值一旦被初始化就不会被改变
如果new String() 会在堆内存中开辟空间
如果直接赋值的话,会在常量池中开辟空间
常用方法
方法名 | 作用 | 返回值 |
---|---|---|
isEmpty() | 判断是否为空 | boolean |
length() | 取到该String的长度 | int |
equals(Object obj) | 判断两个字符串是否相等 | boolean |
equalsIgnoreCase(String as) | 不区分大小写比较 | Object |
charAt(int index) | 返回该下标的char | char |
substring(int start) | 截取字符串下标从start开始 | String |
substring(int start,int end) | 截取区间字符串从start开始到end结束(包头不包尾) | String |
eplace(char old,char new) | 替换字符串 | String |
trim() | 去掉字母首尾空格 | String |
indexOf() | 寻找某个字符串在目标字符串的位置 | int |
byte[] bytes = {11,22,33,44};
String s = new String(bytes);
System.out.println(s);
char[] chars = {'a','d'};
String s1 = new String(chars);
System.out.println(s1);
String name = "十九";
System.out.println(name.isEmpty());
System.out.println(name.length());
String l1 = "0123145617891";
String l2 = "Abc";
System.out.println(l1.equalsIgnoreCase(l2));
char c = l1.charAt(1);
System.out.println(c);
String substring = l1.substring(3,7);
System.out.println(substring);
String replace = l1.replace("1", "9");
System.out.println(replace);
String lq = " bcbab ";
System.out.println(lq.trim());
int i = s1.indexOf("ab");
System.out.println(i);
byte[] bytes1 = "sh".getBytes();
System.out.println(Arrays.toString(bytes1));
byte[] bytes2 = {11, 22, 33};
System.out.println(new String(bytes2));
}
String数据类型转换
方法名 | 作用 | 返回值 |
---|---|---|
getBytes() | 转换成bytes型数组 | byte[] |
toCharArray() | 转换成char型数组 | char[] |
String valueOf(char[] chs) | 将入参类型转换为 | String String |
toLowerCase() | 将所有英文字母转换为小写字母 | String |
toUpperCase() | 将所有英文字母转换为大写字 | String |
concat(String str) | 将指定字符串连接到此字符串的结尾 | String |
包装类
基本数据类型是没有方法的,但是可以通过包装类来实现方法的调用
写法上只有 int - Integer char - Character
其他的都为首字母大写
装箱和拆箱:
装箱:基本数据类型 —>包装类
拆箱:包装类 —>基本数据类型
StringBuffer
常用的方法:
方法名 | 作用 | 返回值 |
---|---|---|
append(String str) | 追加字符串 | StringBuffer |
insert(int offset,String str) | 指定位置追加字符串 | StringBuffer |
deleteCharAt(int index) | 删除下标处的字符 | StringBuffer |
delete(int start,int end) | 删除下标区间的字符 | StringBuffer |
replace(int start,int end,String str) | 替换区间字符 | StringBuffer |
reverse() | 反转字符串 | StringBuffer |
substring(int start,int end) | 截取区间字符串从start开始到end结束(包头不包尾) | String |
substring(int start) | 截取字符串 | String |
split() | 拆分字符串 | String[] |
Math概述
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数
Math常用方法
方法名 | 作用 | 返回值 |
---|---|---|
abs(int a) | 取绝对值 | int |
ceil(double a) | 返回最小值 double | |
floor(double a) | 返回最大值 | double |
max(int a,int b) | 取最大值 | int |
pow(double a,double b) | 求幂 | double |
random() | 随机数 | double |
round(float a) | 四舍五入成整数 | int |
sqrt(double a) | 求double值的正平方根 | double |
int a = 100;
System.out.println(java.lang.Math.abs(a));
double b = 1116;
double ceil = java.lang.Math.ceil(b);
System.out.println(ceil);
double floor = java.lang.Math.floor(b);
System.out.println(floor);
int max = java.lang.Math.max(444, 666);
System.out.println(max);
double pow = java.lang.Math.pow(1, 2);
System.out.println(pow);
long round = java.lang.Math.round(b);
System.out.println(round);
double random = java.lang.Math.random();
int aa = (int)(random * 1110);
System.out.println(aa);
System.out.println(java.lang.Math.sqrt(9));
}
Random概述
常用的方法:
方法名 | 作用 | 返回值 |
---|---|---|
nextInt() | 生产一个随机数 | int |
nextInt(int n) | 生成一个0~n之间的随机数 | int |
{
public static void main(String[] args) {
Random random = new Random();
int i = random.nextInt(100);
System.out.println(i);
int x = 20+ random.nextInt(70-20);
System.out.println(x);
}
}
String、StringBuffer和StringBuilder的区别
在Java中,String、StringBuffer和StringBuilder都是用来处理字符串的类,但它们之间有一些重要的区别。
- 不可变性:
- String类是不可变的,一旦创建就不能被修改。
这意味着每次对String进行修改时,都会创建一个新的String对象。 - StringBuffer和StringBuilder类是可变的,
可以通过方法来修改其内容。它们会在原有对象上进行修改,而不会创建新的对象。
- 线程安全性:
- String类是线程安全的,因为它的方法都是被synchronized修饰的
所以多个线程同时访问一个String对象是安全的。 - StringBuffer类也是线程安全的,因为它的方法都是被synchronized修饰的
所以多个线程同时访问一个StringBuffer对象是安全的。 - StringBuilder类不是线程安全的,它的方法没有被synchronized修饰,
所以多个线程同时访问一个StringBuilder对象可能会导致不可预期的结果。
- 性能:
- String类由于其不可变性,每次对String进行修改都会创建一个新的String对象,这会产生大量的临时对象,影响性能。
- StringBuffer类在进行字符串的拼接、插入、删除等操作时,会在原有对象上进行修改
避免了创建大量的临时对象,因此在频繁修改字符串时,使用StringBuffer会比String更高效。 - StringBuilder类与StringBuffer类类似,
但不保证线程安全,所以在单线程环境下,
使用StringBuilder会比StringBuffer更高效。
综上所述,如果需要频繁修改字符串且在多线程环境下,
应该使用StringBuffer类;如果在单线程环境下需要频繁修改字符串,可以使用StringBuilder类;
如果字符串不需要修改,或者在多线程环境下不需要频繁修改字符串,可以使用String类。