java的学习过程中,我们经常会接触到不同的类,有些类我们经常在使用,我们称之为常用类,我就我自己在java常用类的学习进行一下分享。
1.Object类:public class Object
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法,简单来说,Object类是所有类的父类,所有类都默认继承了Objet类
这里我主要讲几个Object常用的方法
1.hashCode()方法:
格式:public int hashCode()
概述:返回该对象的哈希码值。
(这里可能有部分同学不知道哈希码值是什么?大家只需要先知道hashCode方法通过将该对象的内部地址转换成一个整数来实现)
代码展示:
public class ObjectTest{
public static void main(String[] args){
//创建Object类对象
ObjectTest o1 = new ObjectTest();
ObjectTest o2 = new ObjectTest();
ObjectTest o3 = o2;
System.out.println(o1.hashCode());
System.out.println(o2.hashCode());
System.out.println(o3.hashCode());
}
}
结果如下:
大家可以看出:此时这几行整数就是通过地址转化而来
2.getClass()方法:
格式:public final Class<?> getClass()
概述:
返回值:
表示此对象运行时类的 Class 对象。
public class ObjectTest2 {
public static void main(String[] args) {
ObjectTest2 o1 = new ObjectTest2();
Class c = o1.getClass();
System.out.println(c.getName());
}
}
3.toString()方法:
格式:public String toString()
概述:返回该对象的字符串表示。
通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
//我们提前定义好一个学生类
public class Student {
private String name;
private int age;
//构造函数
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//然后定义我们的测试类
public class ObjectTest {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.toString());
}
}
结果如下:
其实我们重写toString方法就可以帮我们少写一个显示的方法!
4.equals()方法:
格式:public boolean equals(Object obj)
概述:比较两个对象是否相等
//equals在我之前的一篇文章中,我是分享过的,今天我主要分享一下关于equals的面试题
//面试题:==与equals的区别?
//1.==:
// 基本数据类型:等号比较的是值是否相同
// 引用数据类型:等号比较的是地址值是否相同
//
//2.equals
// 只能引用数据类型:一般情况下,和==作用相同
// 但有时候,我们会根据需要重写toString方法,比较属性值
public class ObjectTest {
public static void main(String[] args) {
Student student = new Student("tom",18);
Student student2 = new Student("tom",18);
boolean flag= student.equals(student2);
System.out.println(flag);//重写equals变成true
System.out.println("__________________________________");
Student student3 = student;
boolean flag2 = student3.equals(student2);
System.out.println(flag2);//重写equals变成true
}
}
结果如下:因为我在学生类中重写了方法
2.String类和StringBuffer类和Stringbuilder类
首先,我们来说String类。
String类,我之前也用初步的介绍过,这次我主要分享一下类中常用的方法:
概述:
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。
代码测试:
String z = "HelloWorld!";
//获取字符串长度
System.out.println(z.length());
//获取指定索引处的字符
System.out.println(z.charAt(4));
//返回指定位置的字符在此字符串出现的第一次索引
System.out.println(z.indexOf('o'));
//返回指定位置的字符在当前字符串出现的第一次索引
System.out.println(z.indexOf("oWo"));
//返回指定字符在指定位置后出现的第一次索引
System.out.println(z.indexOf("o",2));
//返回指定字符串在指定位置后出现的第一次索引
System.out.println(z.indexOf("or",2));
//从指定位置截取当前位置字符串
System.out.println(z.substring(5));
//从指定位置开始截取到指定位置结束当前位置字符串
System.out.println(z.substring(2,5));
结果如下:
StringBuffer类:
概述:
线程安全的可变字符序列。
之前String是不可变的序列,那么StringBuffer即是可变的序列:
public class StringBufferTest{
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("zjd");
for(int i=0;i<100;i++){
buf.append(i);
}
System.out.println(buf);
}
}
由上述代码:我们可以看见把StringBuffer的实例化对象放进for循环,可实现字符串的改变
代码展示:
//接下来我们看一下StringBuffer常用的方法
StringBuffer stringBuffer2 = new StringBuffer();
stringBuffer2.append(666);//末尾添加
System.out.println(stringBuffer2);
stringBuffer2.append(3.14);
System.out.println(stringBuffer2);
stringBuffer2.insert(4,"abc");//指定索引位置,添加
System.out.println(stringBuffer2);
stringBuffer2.deleteCharAt(4);//删除指定索引位置的元素
System.out.println(stringBuffer2);
stringBuffer2.delete(1,3);//删除指定一段
System.out.println(stringBuffer2);
stringBuffer2.replace(1,3,"zjd");//指定索引区间替换
System.out.println(stringBuffer2);
stringBuffer2.reverse();
System.out.println(stringBuffer2);
//截取方法(复制取出,本身没变)
System.out.println(stringBuffer2.substring(1,3));
System.out.println(stringBuffer2.substring(2));
结果如下:
StringBuilder类和StringBuffer类用法差不多,这里我不做说明!
3.面试题讲解:
1.String和StringBuff和StringBuilder区别?
String:不可变序列
StringBuffer:可变序列,多线程,安全
StringBuilder:可变序列,单线程,不安全
2.StringBuffer和数组的区别?
都是容器,可以用来存数据但是数组只能存一种数据,但是StringBuffer可以存很多种类型数据,不过最终结果都是字符串数据
4.Arrays类
概述:
该类包含用于操作数组的各种方法(例如排序和搜索)。
常用方法:
遍历:public static String toString(int[] a)
排序:public static void sort(int[] a)
查找:public static int binarySearch(int[] a,int key) 二分查找,查找前必须排序
//我们来代码测试一下
public class ArrayDemo4 {
public static void main(String[] args) {
int arr[] = {
10,8,15,21,4,7};
System.out.println("排序前:");
System.out.println(Arrays.toString(arr));
System.out.println("排序后:");
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
System.out.println("查找:");
int index= Arrays.binarySearch(arr,21);
System.out.println(index);
}
}
结果如下:
5.包装类
概述:
基本类型的包装类:将我们的基本类型包装起来,可以添加相关方法,简化操作
格式:
byte----Byte
short—Short
int-----Integer
long----Long
float—Float
double–Double
char----Character
boolean–Boolean
代码展示:
//进制转化
System.out.println(Integer.toBinaryString(66));//二进制
System.out.println(Integer.toOctalString(66));//八进制
System.out.println(Integer.toHexString(66));//十六进制
//判断是否在int范围内
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
结果如下:
构造方法:
/**
* Integer构造方法
* public Integer(int value):构造一个新分配的 Integer 对象,它表示指定的 int 值。
* public Integer(String s)
* throws NumberFormatException:构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。
*/
public class integerDemo2 {
public static void main(String[] args) {
//public Integer(int value)
Integer integer = new Integer(88);
System.out.println("toString:"+integer.toString());
//public Integer(String s)
Integer integer1 = new Integer("88");
System.out.println("toString:"+integer1.toString());
Integer integer2 = new Integer("abc88");
System.out.println("toString:"+integer2.toString());//注意:字符串中只能含有数字,不能有其他字符
}
}
结果如下:
分析:
当我们输出“abc88"出现了报错,所以我们得出结论:
字符串中只能含有数字,不能有其他字符
6.关于int 和String的转化
//1.int------String
int num=88;
String s=""+88;
System.out.println("s:"+s);
//2.
String s1 = String.valueOf(num);
System.out.println("s1:"+s1);
//3.
Integer integer = new Integer(num);
String s2 = integer.toString();
System.out.println("s2:"+s2);
//4.
String s3 = Integer.toString(num);
System.out.println("s3:"+s3);
System.out.println("__________________________________");
//1.String-----int
Integer i = new Integer(s);
int a = i.intValue();
System.out.println("a:"+a);
//2.
int b = Integer.parseInt(s);
System.out.println("b:"+b);
结果代码:
7.自动装箱和拆箱
/**
* 针对包装类的一种新特性:
* 自动装箱:将基本类型转换成包装类
* 自动拆箱:将包装类转化成基本类型
*
* 注意事项:在使用自动拆箱的过程中,建议先判断是否为null,然后在使用
*/
public class integerDemo4 {
public static void main(String[] args) {
Integer integer = new Integer(88);
Integer integer1 = 100;//自动装箱
integer1 +=21;//自动拆箱,然后再一次自动装箱
System.out.println("i1:"+integer1);
}
}
结果: