匿名内部类:
就是内部类的简化写法;
前提:存在一个类或接口,类可以是具体类,也可以是抽象类;
格式:
new 类名或接口名(){重写方法;}
本质:是一个继承了类或实现了接口的子类匿名对象;
将匿名内部类用多态的方式接收并使用,就可以调用重写的方法;
例:
Inter i=new Inter(){public void show(){方法体;}};
i.show;(调用重写方法);
使用匿名内部类的好处:
用完后立即回收,不占用内存;
API:
JAVA中API指的就是JAVA中提供的各种功能的java类;
Object类:
Object类在java.lang包下,所以使用时无须导包;
Object类是类层次结构的根类,所有类都直接或间接继承自该类;
构造方法:
public Object();
Object类中的成员方法:
public int hashCode():
返回调用该方法对象的哈希码值,支持此方法是为了提高哈希表的性能;
本质是将调用对象的内部地址转换成一个整数来实现;
public final class getClass(Class类中的方法):
返回调用对象的运行时类,返回调用对象的字节码文件对象,可以看成是返回该类对象;
public String getName()(Class类中的方法):
以String的类型返回此Class对象所表示的实体(类,接口,数组类,基本类型或void)名称,返回一个全路径名称;
例:
Student s=new Student;
s.getClass().getName;
public String toString():
返回该对象的字符串表示,通常,toString方法会返回一个以文本方式表示此对象的字符串.结果应该是一个简明且易于读懂的信息表达时式,建议所有子类重写该方法;
默认的Object类的toString方法返回的值为:
getClass.getName+'@'+Interger.toHexString(hashcode());
public static String toHexString(int i):
以十六进制(基数16)无符号整数形式返回一个整数型参数的字符串表现形式;
直接输出一个对象名称,其实就是调用Object类中的toString方法;
public boolean equals(Object obj):
指示其他某个对象是否与此对象"相等";
==:基本类型:比较的就是值是否相同;
引用类型:比较的就是地址值是否相同;
源码:
public boolean equals(Object obj){
return (this==obj);
}
注意:当此方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等对象必须有相同的哈希码
一般我们使用equals方法都要进行重写;
public boolean equals(Object obj)(String类中):
将此字符串与指定的对象作比较(比较的是内容);
注意:使用String类中的equals来比较字符串重写Object类的equals方法时,要将obj进行向下转型为需要的类型以调用get/set或其他方法;
零碎知识点:
protected void finalize():
当垃圾回收器确定不存在对该对象的更多引用时,由该对象的垃圾回收期调用此方法,子类重写此方法,以配置系统资源式执行其他清除(回收的时机不确定);
protected Object clone():
创建并返回此对象的一个副本;
调用此对象需要实现Cloneable接口;
Cloneable为标记接口,告诉我们实现该接口的类就可以实现对象的复制;
clone出来的对象与原对象无关联,对原对象作删改不会影响到clone的对象;
Scanner:
构造方法:
public Scanner (InputStream Source):创建一个新的Scanner,从指定的输入流扫描;
public static final InputStream in(System类中):
作为System类中的静态常量,"标准输入流",此流已打开并准备提供输入数据,通常,此流对应于键盘输入或由主机环境或用户指定的另一个输入流;
成员方法:
hasnextXxx():判断是否还有一个输入项,其中Xxx可以是Int,Double等.如果判断是否包含下一个字符串,则可以省略Xxx;(用于判断输入的数据是否为Xxx类,并返回一个布尔类型的数据);
nextIntXxx:获取下一个输入项,Xxx可以是Int,Double等,字符串省略Xxx(返回一个Xxx类型的数据);
注意事项:
使用Scanner录入数据时,先获取数据,再获取字符串,字符串将获取到换行符;
例:
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
String s=sc.next();
在输出i和s的时候,s的输出像是空值一样,其实是i数据换行符被s所接收导致;
针对这个问题,有两种解决方案:
1.获取数据后,创建一个新的Scanner对象 ;
2.把所有数据都先用字符串获取,然后要什么,就转换成什么;
String类(java.lang):
字符串是由多个字符组成的一串数据(字符序列);
字符串可以看成是字符数组;
字符串为常量,在字符串缓冲区支持可变字符串;
构造方法:
1.public String():空构造;
2.public String(byte[] bytes):把字节数组转为字符串;
3.public String(byte[] bys,int offset,int length):把字节数组从offset开始,长度为length的数组转换为字符串;
4.public String(char[] value):把字符数组转换为字符串;
5.public String(char[],int offset,int length):把字符数组从offset开始,长度为length的数组转换为字符串;
6.public String(String original):把字符串常量转换为字符串;
字符串的方法:
public innt length():
返回此字符串长度;
String中的toString方法有重写,输出为空;
字符串赋值:
先到字符串常量池里去找,如果有就直接返回,没有就先创建在返回;
字符串赋值,值不能变,引用(地址)可以变;
String s=new String("hello");
String s="hello";
这两者的区别在于:前者在常量池和堆内存分别造了一个对象,后者只在常量池创建了一个对象;
字符串如果是常量相加,先相加,然后在常量池创建对象或找寻已有常量值;
字符串如果是变量相加,先开辟空间,再相加;
String类的判断功能:
1.public boolean equals(Object obj):比较字符串内容是否相同,区分大小写;
2.public boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,不分大小写;
3.public boolean contains(String str):判断大串中是否包含小串;
4.public boolean startWith(String str):判断字符串是否以某个指定的字符串开头;
5.public boolean endWith(String str):判断字符串是否以某个指定的字符串结尾;
6.public boolean isEmpty():判断字符串是否为空,要注意空指针异常;