您的位置:首页 > 科技 > IT业 > 摄影网站免费_搭建平台载体_代写文章兼职_百度收录方法

摄影网站免费_搭建平台载体_代写文章兼职_百度收录方法

2025/9/5 10:10:54 来源:https://blog.csdn.net/forwkard__/article/details/146105402  浏览:    关键词:摄影网站免费_搭建平台载体_代写文章兼职_百度收录方法
摄影网站免费_搭建平台载体_代写文章兼职_百度收录方法

 Comparable 接口

查看接口ctrl+鼠标

sort 要求传入的数组的每个对象都是“可比较”的,也就是说对象中的某个成员变量可以进行比较(比如姓名、年龄等)。这样通过重写 compareTo 方法就可以定义比较规则

Comparable接口是一个泛型(要比较什么类型,就把类名传入)接口,用于定义对象的排序规则。该接口中只有一个方法compareTo(),用于比较这个对象与另一个对象的大小关系。

compareTo()方法

 int compareTo(T obj)

用法:

compareTo()方法返回一个整数值,表示当前对象与参数对象的大小关系:

如果返回值小于0,表示当前对象小于参数对象;
如果返回值等于0,表示当前对象等于参数对象;
如果返回值大于0,表示当前对象大于参数对象。
Comparable接口需要实现类重写compareTo()方法,根据对象的某个属性或多个属性进行比较,从而确定对象的大小关系。

一般情况下自定义类型可以进行比较 

比较器Comparator接口

用于定义两个对象之间的比较规则。它通常用于排序算法中,使得对象可以按照自定义的规则进行排序。

比较器接口中只有一个方法:compare(Object o1, Object o2),该方法用于比较两个对象。返回一个负整数、零或正整数,表示o1小于、等于或大于o2。根据返回值的不同,可以确定两个对象的相对顺序。

比较器的使用可以实现灵活的排序规则,不依赖于对象的自然排序。它可以按照不同的属性、不同的顺序进行排序,同时也可以处理特定的比较需求,例如忽略大小写比较字符串等。

 

Clonable 接口

Object 类中存在一个 clone 方法,调用这个方法可以创建一个对象的拷贝,要调用 clone 方法,需要先实现 Clonable 接口,否则就会抛出 CloneNotSupportedException 异常(不支持克隆异常)

class Person implements  Cloneable{//当自己写的类型支持克隆时,一定要使用克隆接口public String  name;public int age;public Money money = new Money();public Person(String name, int age) {//提供构造方法this.name = name;this.age = age;}

浅拷贝 VS 深拷贝

Cloneable接口的clone方法可以实现浅拷贝,如果要实现深拷贝,那么让需要对对象中的引用类型进行拷贝

深浅拷贝与代码的实现有关

浅拷贝: 只有一份地址 

深拷贝:克隆出一份地址 相当于有两份地址

Object类

概念

Object类是Java中所有类的父类它定义了一些通用的方法,可以被其他类继承重写

    public static void func(Object obj) {System.out.println(obj);}

类中的方法, 开锁的可以直接使用被public修饰;锁起来被private修饰(间接调用)

Object类中也有一些定义好的方法

 获取对象信息toString方法

如果要打印对象中的内容,就需要重写Object类中的toString()方法,不然会打印出它的地址(内存地址的字符串表示形式)

// Object类中的toString()方法实现:
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

对象比较equals方法

要比较对象的内容是否相等,那就要用到equals方法,但是需要进行重写,因为它默认按地址进行比较的

我们常见的==就可以实现比较,它在比较时:
如果它左右操作数是基本类型变量,比较的是变量中值是否相同
如果左右两侧是引用类型变量,则比较引用变量地址是否相同

如果不重写,默认为:

 比较person:

@Override//idea可以直接生成public boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age && name.equals(person.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}
public static void main(String[] args) {Person person = new Person("zs", 10);Person person1 = new Person("zs", 10);// System.out.println(person == person1);System.out.println(person.equals(person1));}

内部类

概念

在 Java 中, 可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。内部类也是封装的一种体现.
public class OutClass {
class InnerClass{
}
}
// OutClass是外部类
// InnerClass是内部类
【注意事项】
1. 定义在 class 类名 {} 花括号外部的,即使是在一个文件里,都不能称为内部类
2. 内部类和外部类共用同一个 java 源文件,但是经过编译之后, 内部类会形成单独的字节码文件

分类

实例内部类

内部类生成的字节码文件--通过外部类引出

必须要静态的时候添加final--让时间更早

1. 外部类中的任何成员都可以在实例内部类方法中直接访问
2. 实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
3. 在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问
4. 实例内部类对象必须在先有外部类对象前提下才能创建
5. 实例内部类的非静态方法中包含了一个指向外部类对象的引用
6. 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建建内部类的对象

静态内部类 

static修饰的内部成员类称为静态内部类。
注意事项
1. 在静态内部类中只能访问外部类中的静态成员
确实想访问:
2. 创建静态内部类对象时,不需要先创建外部类对象

 局部内部类

定义在外部类的方法体或者{}中,该种内部类只能在其定义的位置使用,一般使用的非常少。
注意事项
1. 局部内部类只能在所定义的方法体内部使用
2. 不能被public、static等修饰符修饰
3. 编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class
4. 几乎不会使用

匿名内部类

  interface  IA {void test();}
public class test {// new IA();接口不能实例化public static void main(String[] args) {IA a=new IA() {@Overridepublic void test () {System.out.println("重写接口的方法!");}};a.test();

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com