Java-02 面向对象3

1. Object类

        Java作为单继承语言,Object类是所有的类的祖先,所有类在没有指定继承父类的情况下都是默认继承Object类中的方法。

        Object类有12个成员方法,分别是(省略修饰符)String toString()、Object clone()、boolean equals(Object)、void finalize()、getClass() 、int hashCode()、void notify()、void notifyAll()、、 void wait()、void wait(long)、void wait(long,int)。

        其中带有Native关键字的方法意味着其是被JVM(C++)通过底层语言执行。

        1) public Object() : Object对象的无参构造方法

        2) public String toString()

public String toString(){
    return getClass().getName()+ '@' +Integer.toHexString(hasCode());
}

        toString()方法返回代表该对象的一个字符串,默认的实现是获取该类的路径(getClass().getName())以及哈希散列值。通常需要在子类中重写hasCode方法。

        3)public Native int hasCode()

        返回当前对象的哈希值(物理地址),根据散列约定,如果两个对象相同,它们的散列码一定相同,因此如果在子类中重写了 equals 方法,必须在该子类中重写 hashCode 方法,以保证两个相等的对象对应的散列码是相同的。

        两个相等的对象一定具有相同的散列码,两个不同的对象也可能具有相同的散列码。实现 hashCode 方法时,应避免过多地出现两个不同的对象也可能具有相同的散列码(哈希冲突)的情况。

        4)public boolean equals(Object obj)

public boolean equals(Object obj){
    return this == obj;
}

        用于比较两者是否相等,对于基本数据类型比较值是否相等,对于引用数据类型比较地址是否相等,通常而言需要重写。

        5)public void finalize() throws Throwable

       finalize()方法用于垃圾回收,如果一个对象不再被访问,该对象被视为"垃圾",finalize方法会被该对象的垃圾回收程序(GC)调用。该方法的默认实现不做任何事,如果必要,子类应该重写该方法。该方法可能抛出Throwable异常。

        6)protected native Object clone() throws CloneNotSupportedException

        clone()方法用于该方法用于复制一个对象,以Object对象的形式创建并返回一个对象的拷贝。不是所有的对象都可以复制,只有当一个类实现了 java.lang.Cloneable 接口时,这个类的对象才能被复制。该方法可能抛出 CloneNotSupportedException 异常。

        7)public final native Class<?> getClass()

        该方法返回对象的元对象。元对象是一个包含类信息的对象,包括类名、构造方法和方法等。一个类只有一个元对象。每个对象都有一个元对象,同一个类的多个对象对应的元对象相同。

2. 基本类型与包装类型

        Java提供的8种基本的数据类型每一个都对应了一个包装数据类型,包装类的名称和对应的基本数据类型相同,包装类的名称的首字母大写,Integer 和 Character 例外。基本数据类型与包装类型的区别如下:

        1) 基本数据类型是变量,包装数据类型是引用

Integer a = new Integer(10);
Integer b = new Integer(10);

System.out.println(a == b); // false
System.out.println(a.equals(b)); // true

                "=="对于基本数据类型比较的是值是否相等,对于包装类型(引用)比较的是地址是否相等;''.equals()"用于比较两个引用类型的值是否相等;

                通常而言,基本数据类型比引用类型更高效,因为基本类型在栈中直接存储的具体数值,而包装类型则存储的是堆中的引用。

        2)包装类型的值可以为null,基本数据类型不可以

                数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出 NullPointerException 的异常。

        3)包装类型可用于泛型,而基本类型不可以(会编译报错)

                因为泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是 Object 类及其子类——包装类型是个特例。

        4)包装类型的装箱、拆箱

                将基本数据类型转换为包装数据类型的过程称为装箱,将包装类型转换为基本数据类型的过程称为拆箱,在JDK1.5以后,以上过程就是自动实现的。

                自动装箱

                        · 在(-128~127)之内 调用相应包装类的valueOf():其实在该范围之内,源码底层中是通过数组 IntegerCache(Integer缓存池) 存的值,当在该范围内再一次定义相同大小的值,如12,JDK它会在相应的数组里找到该值是不是存在,如存在则数组里存有12,则把它的引用给该对象,所以它们的地址是相等的。

Integer i = 12; 
Integer a = 23;
// 以上过程由JDK编译器自动完成的,即自动调用Integer.valueOf()方法
// 实际为  
// Integer i = Integer.valueOf(12); Integer a = Integer.value(23);

                          · 不在(-128~127)之内 直接 new 对象:不在该范围内则通过 new 关键字在堆中创建相应的对象;注意:只要其基本数据类型值相同,则hasCode的值也相等。

Integer i = 200; 
Integer a = 200;
/* 
* 实际上为
* Integer i = new Integer(200); 
* Integer a = new Integer(200);
*/

                自动拆箱

                        自动拆箱默认调用 .xxxValue()方法;注意:在包装类进行与基本数据类型比较时 ,会存在自动拆箱的操作。

Integer i = 100; 
int a = i;
/* 实际上底层调用了相应的xxxValue()方法:
* Integer i = 100; 
* int a = i.intValue();
*/

3. 包装类型常用方法

        1. parseXXX(String s):将字符串转换为相应的基本数据类型(静态方法)。

                底层调用的方法为parseXXX(String s, int raidx),将字符串转换为基本数据类型,静态方法。例如:Integer.parseInt(String s, int radix)

// 将字符串转换为基本数据类型
int i = Integer.parseInt("123");

                注意:Character类型没有parseXXX()方法。

        2. valueof(String s):将字符串转换为相应的包装类型(静态方法)

                底层调用parseXXX(String s)方法,先将字符串转换为基本数据类型 ;再通过valueof(baseType i)将基本数据类型变量转换为包装类型(注意:Character类型不支持String转换),源码如下:

         例如:Integer.valueof(String s):

// 将字符串转换为包装类型Integer
Integer i = Integer.valueof("123");

        3. valueof(value):将基本数据类型转换为包装类型(静态方法,所有包装类型均支持)

                底层源码:如果在Ingeter常量池中直接返回常量池引用,否则new一个Integer对象并通过基本类型值初始化,例如:Integer.valueof(int i)

// 将int类型变量转换为包装类型Integer
Integer i = Integer.valueof(123);

                注意:JDK8以后就支持自动装箱了,即valueof(int i)是自动执行的,直接通过 Integer i = 123;实现即可。

        4. XXXvalue():将包装类型转换为XXX基本数据类型(实例方法,所有包装类型均支持)

                注意:JDK8以后就支持自动拆箱了,即intvalue()是自动执行的,直接通过 int num = i;实现即可,例如:i.intvalue();

// 将包装类型Integer转换为基本数据类型int
Integer i = 123;
int num = i.intValue();

        

        5. toString(value):将基本数据类型转换为字符串(静态方法)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值