1.Object类
类object是类层次结构的根类,每个类都是用object作为超类(父类),所有对象(包括数组)都实现这个类的方法。
(1)、public int hashCode();
返回该对象的哈希码值------> 通过哈希算法(哈希表:hashtable)------> 得到一个地址值(但不是真正意义上的地址值)
package work1;
public class Student extends Object {
}
package work1;
public class Test1 {
public static void main(String[] args) {
Student s1 = new Student();
System.out.println(s1.hashCode());
Student s2 = new Student();
System.out.println(s2.hashCode());
System.out.println("clever".hashCode());
}
}
(2)、public final Class getClass()返回此 Object 的运行时类 (Java反射机制中讲!)
Class类中有一个方法:public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。即获取当前正在运行的这个类的全路径名称
Class类中有一个方法:public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。即获取当前正在运行的这个类的全路径名称
package work1;
public class Text2 {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
Class c1 = s1.getClass();
System.out.println("c1:"+c1);
String name = c1.getName();
System.out.println("name:"+name);
}
}
2.toString类
public String toString()返回该对象的字符串表示(建议所有子类都重写此方法)
Integer类中有一个方法:public static String toHexString(int i)
将一个int类型的数据转换成一个十六进制的字符串表现形式
如果直接输出对象名称,想要显示当前对象的成员变量的值,那么必须重写Object类中的toString()方法
如果直接输出对象名称,想要显示当前对象的成员变量的值,那么必须重写Object类中的toString()方法
package toString;
public class Text3 {
private String name;
private int age;
public Text3(){
super();
}
public Text3 (String name,int age){
super();
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setName(){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(){
this.age = age;
}
// 子类重写 String toString方法 可以同通过快捷键 alt+shift+s----s 在String toString中自动生成
@Override
public String toString() {
return "Text3 [name=" + name + ", age=" + age + "]";
}
public static void main(String[] args) {
}
package toString;
public class Text4 {
public static void main(String[] args) {
Text3 t = new Text3("caesar",20);
System.out.println("输出结果:"+t);
System.out.println("用toString方法调用:"+t.toString());
System.out.println(t.getClass().getName()+"@"+Integer.toHexString(t.hashCode()));
Text3 t2 = new Text3("caesar",20);
System.out.println("Name"+t2);
System.out.println(t == t2);
}
}
3.equals()方法
public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
面试题:
==和equal()方法的区别
==: 比较的是两个对象的地址值是否相同
equals()方法: 默认比较的是两个对象的地址值是否相同,如果重写了Object类中的equals()方法,那么默认比较就是两个对象的内容是否相同
==和equal()方法的区别
==: 比较的是两个对象的地址值是否相同
equals()方法: 默认比较的是两个对象的地址值是否相同,如果重写了Object类中的equals()方法,那么默认比较就是两个对象的内容是否相同
* javascript:Array对象,Number对象,String对象,valueOf():====>s1.valueOf(s2) ;比较是内容是否相同
4.finalize
protected void
finalize() throws Throwable:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法,但是什么时候调用gc不确定。
System类中的一个方法:public void gc() 运行垃圾回收器,这个垃圾回收器最终调用的就是finalize()方法。
5.clone()方法
protected Object clone() :Object类中的clone()方法执行特定的复制操作,如果此对象的类不能实现接口Cloneable,则会抛出异常:throws CloneNotSupportedException,注意所有数组都被视为实现接口Cloneable。
6.scanner类
创建一个文本扫描器(键盘录入),在java.util包下,需要导包,被fianl修饰不能被继承
Scanner sc = new Scanner(System.in);
System类中的静态字段:
public static final InputStream in :标准输入流
InputStream(字节流): InputStream is = System.in; 实质是一个抽象类多态
public static final OutputStream out :标准输出流7.Scanner类中的注意事项
先后录入两个int类型的数据:package Scanner;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入第一个数据:");
int a = sc.nextInt();
System.out.println("请录入第二个数据:");
int b = sc.nextInt();
System.out.println("a:"+a+"b:"+b);
}
}
先后录入两个String类型的数据:
package Scanner;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入第一个数据:");
String a = sc.nextLine();
System.out.println("请录入第二个数据:");
String b = sc.nextLine();
System.out.println("a:"+a+"b:"+b);
}
}
先录入String类型数据再录入int类型数据:
package Scanner;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入第一个数据:");
String a = sc.nextLine();
System.out.println("请录入第二个数据:");
int b = sc.nextInt();
System.out.println("a:"+a+"b:"+b);
}
}
先录入int类型数据再录入String类型数据:
此时会发现接收不到第二次录入的String类型数据,直接输出结果,由于“Enter”才能接收数据,是回车换行符导致的。
package Scanner;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入第一个数据:");
int a = sc.nextInt();
System.out.println("请录入第二个数据:");
String b = sc.nextLine();
System.out.println("a:"+a+"b:"+b);
}
}
改进方案:在第二次录入之前重新创建一个对象
package Scanner;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入第一个数据:");
int a = sc.nextInt();
Scanner sc1 = new Scanner(System.in);
System.out.println("请录入第二个数据:");
String b = sc1.nextLine();
System.out.println("a:"+a+"b:"+b);
}
}
9.String类
String类代表字符串,Java程序中的所有字符串字面值都作为此类的实例实现。字符串一旦被赋值,其值不能在改变。
String类常用的构造方法:String():表示一个空字符序列
public String(byte[ ] bytes ,Charset ch) :默认编码字符集(编码格式):如果平台默认编码格式是GBK(一个中文对应两个字节)格式,可以不写第二个参数
public String(byte[ ] bytes ,int Index,int length): 将部分字节数组构造成一个字符串
public String(char[ ] value): 将字符数组构造成一个字符串
public String(char[ ] value,int Index,int length): 将部分字符数组构造成一个字符串
public String(String original):通过字符串常量构造一个字符串对象
编码和解码:(保证格式一致)
编码:把能看懂的东西转换成看不懂的东西:String ---------->byte[ ]:public byte[ ] getBytes(String charsetName)
解码:把当前看不懂的东西转换成能看懂的(一般就是String类):byte[ ]--------->String:public String(byte[ ] bytes ,CharsetName ch)
获取字符串长度功能:public int length()
面试题:
数组中有没有length(),字符串中有没有length(),集合中有没有length()。
数组中没有length(),数组中的叫length属性,遍历元素时使用
字符串中有length(),遍历字符串使用length()
集合中没有length(),获取集合中的元素数量用size()
10.字符串的特点
一旦被赋值,其值不能被改变。
面试题:String s = new String("Hello")和 String s = "Hello" 有什么区别,分别创建了几个对象?
前者创建了两个对象,堆内存中有new String,字符串常量池中也会有这样一个字符串常量(开辟空间的地址);后者创建了一个对象
11.String类的判断功能:
(1) boolean equals(Object obj):当前该对象是否obj这个对象是否相等;
(2) boolean equalsIgnoreCase(String str):比较字符串是否相等,忽略大小写
(3) boolean contains(String str):判断str这个字符串是否包含在当前字符串中
(4) boolean startsWith(String str):是否以str子字符串开头
(5) boolean endsWith(String str):判断是否以str子字符串结尾
(6) boolean isEmpty():判断字符串是否为空
String s = "" ;空字符
String s = " " ;字符串"空格"
String s = null ;当前字符串对象为空
(2) boolean equalsIgnoreCase(String str):比较字符串是否相等,忽略大小写
(3) boolean contains(String str):判断str这个字符串是否包含在当前字符串中
(4) boolean startsWith(String str):是否以str子字符串开头
(5) boolean endsWith(String str):判断是否以str子字符串结尾
(6) boolean isEmpty():判断字符串是否为空
String s = "" ;空字符
String s = " " ;字符串"空格"
String s = null ;当前字符串对象为空
12.String类中常用的获取功能
(1) int length(): 获取字符串长度功能
(2) char charAt(int index):返回的是索引处对应的字符
(3) int indexOf(int ch) :返回指定字符在次字符串中第一次出现处的索引
(4) int indexOf(String str):返回指定的子字符串在此字符串中第一次出现的索引
(5) int indexOf(int ch,int fromIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索
(6) int indexOf(String str,int fromIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索
(7) String substring(int start):从指定位置开始截取字符串,默认截取到末尾
(8) String substring(int start,int end):从指定位置开始截取到指定位置结束(包前[start索引]不包后[end索引])