java基础---类和对象(3)
一、Object类
java.lang.Object类是Java语言中类层次结构的根类,也就是说任何一个类都是该类的直接或者间接子类
- 如果定义一个Java类时没有使用extends关键字声明其父类,则其父类为 java.lang.Object 类。
- Object类定义了“对象”的基本行为, 被子类默认继承。
- object源码中没有成员变量,只有成员方法,包括 equals() / toString() / getClass() /hashCode() / clone() / finalize() / wait() / notify() / notifyAll()
- Object类只声明了一个空参的构造器
1. equals()方法
public boolean equals(Object obj) {
return (this == obj);
}
- equals方法
- equals()是一个方法,而非运算符,只能适用于引用数据类型
- Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
- 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同
- ==运算符
- ==是一个运算符,可以用于基本数据类型和引用数据类型变量中
- 通常情况下,我们自定义的类如果使用equals()要比较两个对象的"实体内容"是否相同,需要对Object类中的equals()进行重写
- == 符号使用时,必须保证符号左右两边的变量类型一致
- ==如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同,如char可以与int类型比较)
- ==如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
2. toString()
- 当输出一个对象引用时,实际上是调用当前对象的toString()
- String/Date/File/包装类都重写了Object的toString()方法,返回实体内容
- 自定义类也可以重写toString()方法,当调用此方法时,返回对象的"实体内容"
//Object类中toString()的定义
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
二、包装类(Wrapper)
通常情况下基本数据类型的变量不是对象,为了满足万物皆对象的理念就需要对基本数据类型的变量进行打包封装处理变成对象,而负责将这些变量声明为成员变量进行对象化处理的相关类,叫做包装类

- Integer类
java.lang.Integer类内部包装了一个int类型的变量作为成员变量,主要用于实现对int类型的包装并提供int类型到String类之间的转换等方法
- 常用的常量

- 常用的方法

- java5 加入自动装箱机制,将-128到127之间的整数已经装箱完毕,当程序中使用该范围之间的整数时,无需装箱直接取用自动装箱池中的对象即可,从而提高效率
/**
* Cache to support the object identity semantics of autoboxing for values between
* -128 and 127 (inclusive) as required by JLS.
*
* The cache is initialized on first usage. The size of the cache
* may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
* During VM initialization, java.lang.Integer.IntegerCache.high property
* may be set and saved in the private system properties in the
* jdk.internal.misc.VM class.
*/ private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[]; //自动装箱范围-128~127 static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h; cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
} private IntegerCache() {}
}
2. Double
- 常用的常量

- 常用的方法

3. Boolean
- 常用的常量

- 常用的方法

4. Character
- 常用的常量

- 常用的方法
总结:
- 基本数据类型转换为对应包装类的方式调用包装类的构造方法或静态方法即可
- 获取包装类对象中基本数据类型变量数值的方式调用包装类中的xxxValue方法即可
- 字符串转换为基本数据类型的方式调用包装类中的parseXxx方法即可
三、单元测试
Java中的JUnit单元测试步骤:
- 选中当前工程 - 右键选择:build path - add libraries - JUnit 4 - 下一步
- 创建Java类,进行单元测试。此时的Java类要求:① 此类是public的 ②此类提供公共的无参的构造器此类中
- 声明单元测试方法。此时的单元测试方法:方法的权限是public,没有返回值,没有形参此单元测试方法上需要声明注解:@Test,并在单元测试类中导入:import org.junit.Test;
- 声明好单元测试方法以后,就可以在方法体内测试相关的代码。左键双击单元测试方法名,右键:run as - JUnit Test
- 如果执行结果没有任何异常:绿条
- 如果执行结果出现异常:红条
四、垃圾回收机制
- 垃圾回收机制只回收JVM堆内存里的对象空间。对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力
- 现在的JVM有多种垃圾回收实现算法,表现各异。
- 垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。
- 可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。
程序员可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确定。
垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一个新的引用变量重新引用该对象,则会重新激活对象),不要人为的主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。
五、对象之间的关系
依赖关系
对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。
class A{
public B method(C c,D d){
E e = new E();
...
B b = new B();
...
return b;
}
}
这里A依赖了BCDE类

- 关联关系(Association)
对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联可以有方向,即导航。一般导航是双向的,不需要在线上标出箭头。

class Employee{
private int eid;//员工编号
private String name;//员工姓名
private Computer coumputer;//员工所使用的电脑
//....
}
class Computer{
}
- 聚合关系
表示 has-a 的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。

- 组合关系
对象 A 包含对象 B,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用,表示 contains-a 的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。也使用属性表达组合关系,是关联关系的一种,是比聚合关系强的关系。

- 继承关系
类与类的继承关系,类与接口的实现关系

六、native关键字
使用 native 关键字说明这个方法是原生函数,也就是这个方法是用 C/C++等非Java 语言实现的,并且被编译成了 DLL,由 java 去调用
- 用于java 应用需要与 java 外面的环境交互 ,本地方法提供了一个非常简洁的接口,无需去了解 java 应用之外的繁琐的细节
- native 声明的方法,对于调用者,可以当做和其他 Java 方法一样使用,一个 native method 方法可以返回任何 java 类型,包括非基本类型,而且同样可以进行异常控制。
- native method 的存在并不会对其他类调用这些本地方法产生任何影响,实际上调用这些方法的其他类甚至不知道它所调用的是一个本地方法。 JVM 将控制调用本地方法的所有细节。
- 如果一个含有本地方法的类被继承,子类会继承这个本地方法并且可以用 java语言重写这个方法(如果需要的话)。
java基础---类和对象(3)的更多相关文章
- 第31节:Java基础-类与对象
前言 Java基础-类与对象,方法的重载,构造方法的重载,static关键字,main()方法,this关键字,包,访问权限,类的继承,继承性,方法的重写,super变量. 方法的重载:成员方法的重载 ...
- JAVA基础——类和对象
java类与对象学习笔记 一.成员变量和局部变量 (1)定义 1.成员变量 在类中定义,用来描述对象将要有什么.(默认的成员变量值为0) 2.局部变量 在类的方法中定义,在方法中临时保存数据. 演示示 ...
- Java基础-类和对象
类和对象 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. 类:类是一个模板,它描述一类对象的行为和状态. ...
- Java基础—类和对象
基本概念 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. 类:类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提 ...
- java基础---类和对象(4)
一. static关键字 使用static关键字修饰成员变量表示静态的含义,此时成员变量由对象层级提升为类层级,整个类共享一份静态成员变量,该成员变量随着类的加载准备就绪,与是否创建对象无关 使用st ...
- java基础---类和对象(1)
一. 类和对象 面向对象:以属性和行为的观点去分析现实生活中的事物,将功能封装进对象, 强调具备了功能的对象,以类/对象为最小单位,考虑谁来做 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做 ...
- Java基础——类和对象的初始化过程
本节把类和对象的初始化所涉及到的所有代码块阐述一边. 示例代码: public class Demo { private static String name; private String age; ...
- java基础---类和对象(2)
一.继承(extends) 面向对象的三大特性之一,当多个类中存在相同属性和行为时,将这些内容抽取到一个公共类中,让多个类(子类)吸收公共类(父类.超类)中已有特征和行为,而在多个类型只需要编写自己独 ...
- Java基础-IO流对象之字符类(FileWrite与FileReader)
Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...
随机推荐
- Archlinux常用软件推荐 更新于2021年4月
记录一下常用软件 必装软件 包管理工具 yay 代替pacman的包管理 yaourt 备用 终端工具 zsh oh-my-zsh-git 搭配zsh利器` proxychains4 终端代理工具` ...
- Linux的top命令cpu占用少,但是显示很高
最近发现服务器一个奇怪的问题,40核的双路服务器,装的centos7.4系统,开机过几个小时后会图形界面特别卡顿,top里发现CPU使用率50%左右,但是进程里没有大量占用的进程.怎么上传不了图片.. ...
- OFRecord 数据集加载
OFRecord 数据集加载 在数据输入一文中知道了使用 DataLoader 及相关算子加载数据,往往效率更高,并且学习了如何使用 DataLoader 及相关算子. 在 OFrecord 数据格式 ...
- NVIDIA DeepStream 5.0构建智能视频分析应用程序
NVIDIA DeepStream 5.0构建智能视频分析应用程序 无论是要平衡产品分配和优化流量的仓库,工厂流水线检查还是医院管理,要确保员工和护理人员在照顾病人的同时使用个人保护设备(PPE),就 ...
- CUDA 内存统一分析
CUDA 内存统一分析 关于CUDA 编程的基本知识,如何编写一个简单的程序,在内存中分配两个可供 GPU 访问的数字数组,然后将它们加在 GPU 上. 本文介绍内存统一,这使得分配和访问系统中任何处 ...
- 硬核!2w 字长文爆肝分布式事务知识点!!
前言 分布式事务,是分布式架构中一个绕不开的话题,而什么是分布式事务?为什么要使用分布式事务?分布式事务有哪些实现方案?更是面试时面试官特别喜欢的一个分布式三连炮!同时用XMind画了一张导图记录分布 ...
- SSM和SpringBoot常用注解
SpringBoot的重要注解 @SpringBootApplication 创建 SpringBoot 项目之后会默认在主类加上 我们可以把 @SpringBootApplication看作是 @C ...
- 码农飞升记-04-OracleJDK 与 OpenJDK 的区别和联系以及 OracleJDK builds 与其他 OpenJDK builds 的选择问题
在前两篇 OracleJDK是什么?OracleJDK的版本怎么选择? 和 OpenJDK是什么? 中分别介绍了 OracleJDK 和 OpenJDK 的来历以及概念,那可能就有小伙伴要问了:那我到 ...
- 【NX二次开发】体消参,移除体参数UF_MODL_delete_body_parms()
例子: 源码: extern DllExport void ufusr(char *param, int *returnCode, int rlen) { UF_initialize(); tag_t ...
- 【NX二次开发】创建扫描特征
扫描特征相关函数: 创建扫描特征的相关函数: 1.UF_MODL_create_extrude_trim_opts 拉伸 2.UF_MODL_create_extrude_trim_opts1 拉伸 ...