目录
(3)binarySearch 使用二分搜索算法搜索指定数组
2.String 和 StringBulider 和 StringBuffer的区别
一,API概述
API(Application Programming Interface)应用程序编程接口
一般在开发中用api表示Java语言中为我们提供的各种类和接口
一般所说的是api文档。是对Java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员,进行使用帮助说明
二,Object类
1.概述
Object类是所有Java类的祖先(根基类)。
每个类都使用Object作为超类(父类)。
所有对象(包括数组)都继承实现这个方法。
如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
2,Object类中的常用方法
(1) toString方法
开发中,经常用到输出一个对象,但是对象在内存中存储,是不能直接输出控制台的
一旦输出某个对象,那么会默认自动调用toString(),把对象中的信息,以字符串的形式输出
如果类中没有定义toString(),那么会找父类(Object)
object类中的toString(),默认输出的是对象在内存中的地址
public String toString(){
类的全名
return getClass().getName() + "@" + Integer.toHexString(hashCode()); + 返回的时对象在内存中的地址值,转为16进制
所以在通常使用时,可以通过在用户自定义类型中重写toString()方法
(2)equals方法
1.
返回值类型:boolean类型
所需参数类型:Object
2.
与 == 的对比
==左右为引用类型数据时,比较的是左右两个对象的地址是否相等
Object中默认的equals(Object obj) 其实质比较的是两个对象的地址是否相等,与我们使用==比较的效果是一样的
equals的使用:
对象名+“.”+equals(对象名)
使用时默认调用Object类中的equals(),也就是比较地址
Object类中的equals()等价于== 存在意义就不大了
所以广大的开发者,就对equals方法进行重写,
用于比较两个对象的内容是否相等。
3.
==与equals的区别
==:两边是引用数据类型时直接比较两对象的地址
equals():为重写:等价于==
重写后:比较两对象中的内容
4.
结论:java中几乎所有类都对Object中的equals进行重写
都用来比较内容是否相等,所以我们一般的就把
equals()用来比较对象内容是否相等。
用==比较对象地址是否相等
三,Arrays类
1.概述:
java.util.Arrays类用于操作数组工具类,里面定义了常见操作数组的静态方法。
2.Arrays类中的常用方法:
(1)equals:
相较于父类Object类中的Equals方法已被重写
判断两数组中元素是否相同。
声明:public statuc boolean equals(type[] a,type[] b)
参数的类型可以是原生数据类型和引用类型的任意一种类型
返回值类型:如果两个相等,则返回true,否则返回false
(2)sort:排序对数组排序
作用域数组的所偶有元素
声明:public static void sort(type[] a)
作用域数组指定范围内的元素
public static void sort(type[] a ,int formIndex(包括),int toIndex(不包括))
将指定的类型数组所有元素按数字升序进行排序
自定义对象排序
需要对自定义类实现Comparable接口
重写comoareto方法
对引用类型数组排序时
需要为自定义类提供一个排序规则指定用哪个属性进行排序
此方法会在Arrays类中sort()排序时自动调用
根据返回结果进行排序
(3)binarySearch 使用二分搜索算法搜索指定数组
public static int binarySearch(type[] a,type key)
public static int binarySearch(long[] a,int fromIndex ,int toIndex ,long key)
参数:
a: 要搜索的数组
key:要搜索的值
fromIndex : 要排序的第一个元素的索引(包括)
toIndex : 要排序的最后一个元素的索引(不包括)
如果返回值为负数,就说明未找到,若找到呢返回该搜索值的索引
二分查找算法(折半查找算法):
前提:数组有序
每次找到数组的中间值,用我们要找的值与中间值进行比较,
如果要找的值大于中间的值,那么就向右边找,继续在右边找一个中间值进行比较
如果要找的值小于中间的值,那么就向左边找,继续在左边找一个中间值进行比较
(4)copyOf()方法:数组复制(数组扩容)
将原数组的内容,复制到一个新创建的指定长度的数组中。
static int[] copy(int[] a , int newLength)
(5)fill方法:
将指定的int值分配到指定的int数组的每一个元素
fill(int[] a , int val)
也可以选择填充
fill(int[] a , int x , int y)//将指定的int值y 填充到数组a的索引x到a.length-1索引中
(6)toString()方法
返回指定数组内容的字符串表示形式
public static String toString(type[] a)
四,基本数据类型包装类
1.概述
由于java语言是面外的
而八种基本数据类型,不是面向对象的,使用起来不方便
所以java为基本八种基本数据类型,各提供一个包装类进行表示,类中包含一个基本类型值
类中还包含一些对整数常用操作的方法(如:转二进制,最大值,最小值)
基本数据类型 包装类
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double
boolean Boolean
2.包装类常用属性方法
以java.lang.Integer为例
(1)常用静态方法
Integer.MIN_VALUE);//最小值
Integer.MAX_VALUE);//最大值Integer.SIZE);
//字节Integer.BYTES);//比特位Integer.max(,)//比较两值,返回较大的
Integer.min(,)//比较两值,返回较小的Integer.toBinaryString(6)//转为二进制
Integer.toHexString(17)//转为十六进制
Integer.toOctalString(9)//转为八进制
Integer.compare(6,10)//-1前小后大,0一样大,1前大后小
Integer.parseInt(c);//把字符串类型的数值,转为基本类型整数 转换时,不能出现非数字字符
(2)构造方法
Integer(int a);
Integer (String a);
(3)实例方法
boolean equals(Object);
比较两个Integer对象内容是否相等
int compareTo (Integer anotherInteger);
比较两个Ingeter对象内容的大小
String toString();
将整数转为String类型
int intValue();
取出包装类型中的基本类型值
3.装箱和拆箱
(1)装箱
自动的将基本数据类型转换为包装类型,装箱时自动调用的是Integer的valueOf(int)方法
Static Integer valueOf(int i)
Static Integer valueOf(String s)
eg:
int a0 = 10;
Integer a = a0;;自动装箱,自动的将基本类型转为包装类型
底层默认调用valueOf()
Integer a = a0 等价于 Integer a = Integer.valueOf(a);
自动装箱时需注意:
public static Integer valueOf (int i){
//在-128~127之间的值缓存在同一个数组中
//只要自动装箱时值的返回在-128~127直接按
//返回的就是同一个Integer对象。
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
//如果不在-128~127之间每次都会new一个新的Integer对象
return new Integer(i);
}
(2)拆箱
自动的将包装类型转换为基本数据类型
拆箱时自动调用Integer对象的intValue()方法
int a = i1.intvalue();//手动拆箱
int a = i1;//自动拆箱,底层默认调用intValue()
在计算机领域将这种简化写法,称为语法糖
五,String类
1.概述:
String类表示Java字符串(java语言,“”表示字符串)
String类被final修饰,不能被其他类继承
String类中,有一个char数组,用来存储字符串内容
private final char value[];
字符串一旦被创建后,值就不能改变了。
一旦值改变了,就会创建一个新的字符串对象。
2.String类中的两种创建方法
(1)直接赋值方式创建
String s = "abc";隐式的创建了一个字符串对象 类似于自动装包 创建对象都在一个叫字符串常量池中存储 创建时,如果字符串常量池中没有对应的字符串对象,就会在字符串常量池中创建一个字符串对象,并返回地址 如果字符串常量池已经存在了对应额字符串中的对象,那么就不会创建新的字符串对象,直接返回已有的字符串对象地址即可
(2) new 创建字符串对象
String s = new String(“abc”); 只要是new出来的对象,每一个对象都是独一无二的
3.String类的构造方法
4.String类中的方法
String s1 = "abc";
String s2 = "acd";
System.out.println(s1.equals(s2));//比较两个字符串对象中的内容是一致
System.out.println(s1.equalsIgnoreCase(s2));//比较两个对象内容是否相等,忽略大小写
System.out.println(s1.contains("a"));//true 判断s1中是否包含一个指定字串
System.out.println(s1.contains("ac"));//flase
System.out.println(s1.isEmpty());//判断字符串值是否是空串 ,空串返回true,否则flase
System.out.println(s1.startsWith("ac"));//判断是否以我们指定的子串开头
System.out.println(s1.endsWith("bc"));//判断是否以我们制定的子串结尾
String s1 = "asdfghjkl";
System.out.println(s1.length());//获取字符串长度
System.out.println(s1.charAt(4));//获取字符串中指定位置上的字符
System.out.println(s1.indexOf("s"));//获取指定字符首次出现的位置 若没有则返回-1
System.out.println(s1.indexOf("s",2));//从指定位置开始查找,指定字符首次出现的位置
System.out.println(s1.lastIndexOf("s"));//获取字符串中指定字符的最后一次位置
String s2 = s1.substring(2);//从指定位置开始截取
System.out.println(s2);
String s3 = s1.substring(2,6);//从指定位置开,截取到指定位置结束(不包含结束位置),截取后返回的是一个新的字符串对象
System.out.println(s3);
//讲不通的数据类型转为字符串类型
Integer a = null;
// String s1 = a.toString();//用的较少 值为null时会报错
String s = String.valueOf(a);//用的较多 即使值为null 转换是也不会报错
System.out.println(s);
char[] chars = {'a','b','c'};
String s2 = String.valueOf(chars);
System.out.println(s2);
String s3 = " abCD" ;
System.out.println(s3.toLowerCase());//转小写
System.out.println(s3.toUpperCase());//转大写
String s4 = s3.concat("efg");//连接字符串
System.out.println(s4);
String s5 = s3.trim();//去掉字符串前后的空格,不能去除字符串中间的空格
System.out.println(s3);
System.out.println(s5);
String s6 = "as:as;S;xz";
String[] strings = s6.split(":");//将字符串中的指定字符串删掉,并分成数组
System.out.println(Arrays.toString(strings));
String s7 = "asdf";
String s8 = s7.replace("s","S");//将字符串中指定字符,用另外的指定字符替换
System.out.println(s8);
String s1 = new String();//创建一个空字符串对象 this。value = “”.value
String s2 = new String("abcd");
char[] chars = {'a','b','c','d'};
String s3 = String.valueOf(chars);
String s4 = new String(chars);
String s5 = "cabd";
char[] chars1 = s5.toCharArray();//把字符串转为char数组
Arrays.sort(chars1);
String s6 = new String(chars1);//将char数组转为字符串
System.out.println(s6);
String s = "abcd";//传输时,以数字进行传递
byte[] bytes = s.getBytes();//编码 将字符串转为对应ASCII码并存储
System.out.println(Arrays.toString(bytes));
String s7 = new String(bytes);//解码 将ASCII码转化成对应字符并存入字符串
System.out.println(s7);
六,StringBuffer
1.概述:
如果我们使用String声明的字符串对其进行拼接操作,每次拼接,都会构建一个新的String对象,纸样既耗时,又浪费空间。而StringBuffer就可以解决这个问题
StringBuffer时线程安全的可变字符串。
StringBuffer stringBuffer = new StringBuffer();
char[] value;内部有一个未被final修饰的数组,默认长度是16,就可以向数组中放元素,装满后,据会自动扩容
不会创建StringBuffer对象,只会扩容内部的数组,提高了效率
2.构造方法
public StringBuffer();
public StringBuffer(String str);
3.String Buffer类中的常用方法
StringBuffer stringBuffer = new StringBuffer();//无参的构造方法,默认容量是16
StringBuffer stringBuffer1 = new StringBuffer("a");//super(str.length() + 16);
StringBuffer stringBuffer3 = new StringBuffer(10);//指定默认容量
stringBuffer3.append("abcd");
stringBuffer3.append("efgh");
stringBuffer3.append("lmno");//从字符串末尾添加
stringBuffer3.insert(5,"aa");//向指定位置添加指定字符串,指定位置及以后元素向后挪动
stringBuffer3.deleteCharAt(3);//删除指定位置上的内容
stringBuffer3.delete(5,7);//删除指定区间上的内容,不包含结束位置
stringBuffer3.replace(0,5,"ooo");//将指定位置上的内容替换
stringBuffer3.reverse();//逆置
七.StringBulider
1.概述:
StringBulider 类功能和 StringBuffer 功能完全一致,但StringBuffer是多线程场景下安全的,而StringBulider不适合多线程场景下使用。
2.String 和 StringBulider 和 StringBuffer的区别
String:是字符常量,每次修改是都会创建新对象,适用于少量的字符串操作。
StringBulider:可变字符串,适用于单线程场景下操作。
StringBuffer:可变字符串,适用于多线程场景下操作,因为它的方法都上了锁
八.Math类
1.概述:
提供了一系列静态方法用于科学计算
2.类中常用方法
System.out.println(Math.sqrt(a));//开根号
System.out.println(Math.abs(b));//绝对值
System.out.println(Math.pow(b,2));//b的2次方
max(double a, double b)//返回两数中较大值
min(double a, double b)//返回较小值
random() 返回 0.0 到 1.0 的随机数
long round(double a) double型的数据a转换为long型(四舍五入)
九.Random类
1.概述:
Random用于产生随机数
2.类中常用方法
构造方法
public Random()
成员方法
public int nextInt()
public int nextInt(int n)
十,Date类/Calendar类/SimpleDateFormal类
1.Date类
使用Date类对象代表当前系统时间
(1)构造方法
Date d = new Date();
Date d = new Date(long d);
(2)常用方法
System.out.println(date.getYear()+1900);
System.out.println(date.getMonth()+1);//月份从0开始
System.out.println(date.getDate());//月中的天
System.out.println(date.getDay());//获取星期 星期天是0
System.out.println(date.getHours());//时
System.out.println(date.getMinutes());//分
System.out.println(date.getSeconds());//秒
//getTime() 获取的是 自1970.1.1 0:0:0秒 至date对象创建时的毫秒值
System.out.println(date.getTime());//1739429670638
2.Calendar类
(1)概述:
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,只需要使用getlnstance方法创建即可
(2)构造
Calendar c1 = Calendar.getInstance();
c1.get(Calendar. YEAR);
(3)类中常用方法:
Calendar calendar = Calendar.getInstance();//获得 Calendar的一个子类对象 GregorianCalendar
System.out.println(calendar.get(Calendar.YEAR)); //年
System.out.println(calendar.get(Calendar.MONTH)); //月
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//日
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));//一天中第几小时
System.out.println(calendar.get(Calendar.MINUTE));//分
System.out.println(calendar.get(Calendar.SECOND));//秒
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//一年中的第几天
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//一周中的第几天
System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));//一年中的第几周
System.out.println(calendar.getTimeInMillis());//获取的是 自1970.1.1 0:0:0秒 至date对象创建时的毫秒值
3.SimpleDateFormat 日期格式化类
(1)构造
SimpleDateFormat(格式); // yyyy-MM-dd
(2)常用方法
/*
日期类型 转为 指定格式的字符串 从后端向前端传递数据时,需要进行转化
*/
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss S E");
String string = simpleDateFormat.format(date);
System.out.println(string);
/*
字符串类型 转为日期类型从前端向后端发送数据时间,在后端进行转化
*/
String dataStr = "2002年02月22日";
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日");
Date date1 = simpleDateFormat1.parse(dataStr);
System.out.println(date1);