常见对象Object
常见对象(object类的概述)
- A:Object类概述
- 类层次结构的根类
- 所有类都直接或者间接的继承自该类
- B:构造方法
- public Object()
- 回想面向对象中为什么说:
- 子类的构造方法默认访问的是父类的无参构造方法
常见对象(object类的hashcode()方法)
public int hashCode()
- a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
- b:不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。
常见对象(Object类的getClass()方法)(在反射的时候掌握)
public final Class getClass()
Class clazz=对象.getClass();
String str=clazz.getName();
- 返回此Object的运行时类,获得真实类的全名称
_常见对象(Object类的toString()方法)
public String toString()
//重写toString方法:返回该对象的字符串表示
public String toString(){
return this.name+this.age;
}
- 它默认情况下的数据对我们来说没有意义一般重写该方法(它原本的值=getClass().getName() + “@” + Integer.toHexString(hashCode()) )
常见对象(Object类的equals()方法)
- a:指示其他某个对象是否与此对象“相等”。 (比较地址)
- b:默认情况下比较的是对象的引用是否相同。
- c:由于比较对象的引用没有意义,一般建议重写该方法。(重写后比较对象中的属性值)
public boolean equals(Object obj){
Student s=(Student)obj;//向下转型(因为多态不能直接访问子类的属性)
return this.name.equals(s.name)&&this.age==s.age;//基本数据类型只能用==比较
}
==和equals都可以用来做比较返回值都是boolean类型区别在于
==是比较运算符,既可以比较基本数据类型(值)也可以比较引用数据类型(地址值)
equals方法只能比较引用数据类型但是地址值没有什么意义,我们需要比较地址值
常见对象Scanner
_常见对象(Scanner的概述和方法介绍)
- Scanner的构造方法原理
- Scanner(InputStream source)
- System类下有一个静态的字段:
- public static final InputStream in; 标准的输入流,对应着键盘录入。
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();//nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符
System.out.println(i);
if(sc.hasNextInt()) System.out.println("整数"); //- hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx
常见对象(Scanner获取数据出现的小问题及解决方案)
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个整数");
int i=sc.nextInt();//录入的是:整数+\r\n
System.out.println("请输入第二个字符串");
String j=sc.nextLine();//可以接受任意类型,通过\r\n就证明一行结束
System.out.println("i="+i+"j"+j);//会出现j录入进\r\n即没有录入信息
//解决方案:1.创建两个对象(不推荐)2.都用nextLine方法,可以将整数字符串转化成整数的方法
_常见对象(String类的概述)
- 程序中所有字符串文字都被实现为此类的实例//重写了String方法返回的该对象本身
- 字符串不变(对象可变,属性值不变); 它们的值在创建后不能被更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,它们可以被共享。
_常见对象(String类的构造方法)
- 常见构造方法
- public String():空构造
- public String(byte[] bytes):把字节数组转成字符串
- public String(byte[] bytes,int index,int length):把字节数组的一部分转成 字符串
- public String(char[] value):把字符数组转成字符串
- public String(char[] value,int index,int count):把字符数组的一部分转成字符串
- public String(String original):把字符串常量值转成字符串
String s1=new String();
System.out.println(s1);
byte[] arr1={97,98,99};//ASCII码
String s2=new String(arr1);//解码:解释计算机编码
System.out.println(s2);
byte[] arr2={97,98,99,100,101,102};
String s3=new String(arr2,2,3);
System.out.println(s3);
byte[] arr3={'a','b','c','d','e'};
String s4=new String(arr3);//将字符数组转换成字符串
System.out.println(s4);
String s5=new String(arr3,1,3);
System.out.println(s5);
String s6=new String("youknow");
System.out.println(s6);
(
注意:1.String里面的equals被重写了
2.创建String对象时一个在常量池一个在堆内存中
3.new String(“abc”)记录的是堆内存对象的地址值,而直接声明的是常量池中的地址值
4.java中有常量优化机制
)
_常见对象(String类的判断功能)
- String类的判断功能
- boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
- boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
- boolean contains(String str):判断大字符串中是否包含小字符串
- boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
- boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
- boolean isEmpty():判断字符串是否为空。
- "“和null的区别:”"是字符串常量同时也是一个String类的对象既然是对象当然也可以调用String类中的方法;而null是空常量,不能调用任何的方法,否则会出现空指针异常,null可以给任意的引用数据类型赋值
_常见对象(String类的获取功能)
- int length():获取字符串的长度。
- char charAt(int index):获取指定索引位置的字符
- int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
- int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
- int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
- int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
- lastIndexOf
- String substring(int start):从指定位置开始截取字符串,默认到末尾。
- String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。
String s11="nihao";
System.out.println(s11.length());
String s12="你知道吗?";
System.out.println(s12.length());
String s13="nihao";
int index=s13.indexOf('h');//参数接受的是int类型,传递char类型的会自动提升,如果不存在返回就是-1
System.out.println(index);
int index1=s13.indexOf("ni"); //获取字符串中第一个字符出现的位置,如果不存在连续的字符就返回-1
System.out.println(index1);
String s14="heimahema";
int index2=s14.indexOf('a',5); //从指定位置向后找
System.out.println(index2);
int index3=s14.lastIndexOf('a',5);//从指定位置向前找第一次出现的字符
String s15="heimanihaoya";
String s2=s15.substring(5);//左边是闭区间
System.out.println(s2);
String s3=s15.substring(0,5);//右边是开区间
System.out.println(s3);
_常见对象(String类的转换功能)
- byte[] getBytes():把字符串转换为字节数组。
- char[] toCharArray():把字符串转换为字符数组。
- static String valueOf(char[] chs):把字符数组转成字符串。
- static String valueOf(int i):把int类型的数据转成字符串。
- 注意:String类的valueOf方法可以把任意类型的数据转成字符串。包括对象
String s1="abc";
byte[] arr=s1.getBytes(); //通过gbk码表将字符串转换成字节数组
//gbk码表一个中文代表两个字节且中文的第一个字节肯定是负数
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
//遍历字符串
*/
* 第一种方法是通过tochar通过索引
* 第二种方法是通过toCharArray方法转换成字符数组
* 第三种
*/
char[] arr={'a','b','c'};
String s=String.valueOf(arr)//底层是由String类的构造方法完成
System.out.println(s);
String s2=String.valueOf(100);//将100转换成字符串
System.out.println(s2+100);
Person p1=new Person("张三",23);
System.out.println(String.valueOf(p1));//相当于调用了对象的toString方法