image
hashCode()和toString()
Hash算法是把任意长度的数据通过hash算法成为散列值
hashCode()
public int hashCode(){ int result = 10;
result = 2*result + age;
result = 2*result + name.hashCode(); return result;
}toString()
public String toString(){
String result = "age:"+age+","+"name:"+name; return result;
}equals()
"=="操作符的作用
用来比较两个值是否相等
// 在堆内存中有两个对象u1,u2User u1 = new User(); User u2 = new User(); User u3 = u1;// u1和u3指向同一个对象
class Test{ public static void main(String[] args){
User u1=new User();
User u2=new User();
User u3 = u1; boolean b1 = u1 == u2; boolean b2 = u1 == u3;
System.out.println(b1);
System.out.println(b2);
}
}// 结果falsetrue什么是对象的内容相等呢?要符合对象的内容相等需要,对象的类型相同,两个对象的成员变量的值完全相同,如何比较对象的类型相同,可以用instanceof操作符进行比较哦~
User u1 = new User(); User u2 = new User();boolean b1 = u1.equals(u2); System.out.println(b1);// false
源码
public boolean equals(Object obj){ return (this == obj);
}// 创建类class User{
String name; int age; public boolean equals(Object obj){ if(this == obj){ return true
} boolean b = obj instanceof User; if(b){
User u = (user)obj; if(this.age == u.age && this.name.equals(u.name)){ return ture;
}else{ return false;
}
}else{ return false;
}
}
}class Test{
public static void main(String[] args){
User u1 = new User();
User u2 = new User();
User u3 = new User();
...
System.out.println(u1.equals(u2));
System.out.println(u1.equals(u3));
}
}// false// true内部类和匿名内部类
什么是内部类呢?内部类的使用方法是什么呢?如何使用匿名内部类呢?
class A{ class B{
...
}
}// 文件A.class
A$B.classclass Test{
public static void mian(String[] args){ // 创建外部类的对象
A a = new A(); // 内部类的表示 A.B new A().new B()
A.B b = new A().new B();
}
}内部类可以直接访问外部类,但是外部类要访问内部类中的成员变量,就必须要创建内部类的对象。
// 外部类class Demo{
private int num = 3; // 定义内部类
class Int{
void show(){
System.out.println("num="+num);
}
}
void method(){
Int int = new Int(); int.show();
}
}class Inner{
public static void main(Stirng[] args){
Demo demo = new Demo();
demo.method();
}
}image.png
内部类的分类:
静态内部类;局部内部类;成员内部类;匿名内部类
class A{
// 外部类的变量
int i; class B{
// 内部类的变量
int j; // 内部类的方法
int funB(){ int result = i+j; // 编译没有问题
return result;
}
}
}外部类如果不创建外部类对象,就不能直接创建内部了对象
A a = new A(); A.B = new A().new B();// A.B = a.new B();
赋值:
a.i = 1; b.j = 2;int result = b.funB();// 3
内部类可以随意使用外部类的成员变量
int funB(){ int result = A.this.i + j; return result;
}匿名内部类:
是一种特殊的局部内部类。
// 没有名字的类interface A{ public void doSomething();
}class B{
public void fun(A a){
System.out.println("B类的fun");
a.doSomething();
}
}class Demo implements A{ public void doSomething(){
System.out.println("do");
}
}匿名内部类
class Test{ public static void main(String args[]){
B b = new B(); // 匿名内部类
b.fun(new A(){ public void doSomething(){
System.out.println("匿名");
}
});
}
}什么是匿名对象,匿名对象是对象的简化形式,没有对象名,只能使用一次。
class Student{
// 创建属性
Stinrg name; int tall; // 定义方法
void study()
{
System.out.println("好好学习"+name);
}
}class Demo{
// 定义主函数
public static void main(String[] args)
{ // 创建类的对象
// 类类型的变量一定指向对象
Student stu = new Student(); // 调用对象的成员
stu.name = "dashu"; // 调用对象的方法
stu.study();
}
}成员内部类:
在成员变量的位置上定义的类为成员内部类。如果要使用成员内部类就要使用外部类.内部类来访问。
使用外部类的名字来访问,是因为一个内部类可能有不同的外部类。要有一个内部类,必须要有外部类的对象,因为成员内部类要用外部类访问。
成员内部类可以访问外部类的所有属性,成员内部类不能定义有静态属性。
静态内部类:
在成员位置上用static修饰的内部类为静态内部类。静态内部类只能访问外部类的静态成员和本内部类的成员;且不能访问外部类的非静态成员。
局部内部类:
局部,在一个方法中内的类,为局部内部类,局部内部类不能用访问修饰符,作用域在定义的它的区域内。
局部内部类可以访问外部类的成员属性和静态属性,也可以访问final修饰的局部变量,但不能访问非final的局部变量。
作者:达叔小生
链接:https://www.jianshu.com/p/e1f36623ff02
共同学习,写下你的评论
评论加载中...
作者其他优质文章

