常见对象中的问题1

本文主要探讨了Java中Object类的重要方法,包括toString()、equals()、hashCode()、getClass()以及finalize()和clone()。讲解了它们的默认行为、使用场景以及在实际编程中的意义。同时,介绍了IDE的使用、API的概念和调试技巧。
摘要由CSDN通过智能技术生成

常见对象中的问题1

目录

1.Eclipse的概述使用
2.API的概述
(1)应用程序编程接口
(2)就是JDK提供给我们的一些提高编程效率的Java类
3.Object类
(1)Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类
(2)Object类的构造方法有一个,并且是无参构造
者其实就是理解当时我们说过,子类构造方法默认访问父类的构造是无参构造
(3)要掌握的方法
A:toString()
返回对象的字符串表示,默认是由类全路径+’@’+哈希值的十六进制表示。
这个表示其实是没有意义的,一般子类都会重写该方法
B:equals()
比较两个对象是否相同,默认情况下,比较的是地址值是否相同
而比较地址值是没有意义的,所有一般子类也会重写该方法
可以自动生成
(4)要了解的方法
A:hashCode() 返回对象的哈希值。不是实际地址,可以理解为地址值
B:getClass() 返回对象的字节码文件对象,反射中我们会详讲
C:finalize() 用于垃圾回收,在不确定的时间
D:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是他和两个引用指向是有区别的
(5)两个注意问题
A:直接输出一个对象名称,其实默认调用了该对象的toString()方法。如果输出对象名,打印
出来的是a+@+…说明没重写方法,要是输出,字符串说明重写了
B:== 和equals()的区别
==:
基本类型:比较的是值是否相等
引用类型:比较的是地址值是否相等
equals:
引用类型:默认比较的是地址值,但是也可以根据自己的要求重写该方法

常见开发工具的介绍

集成开发环境IDE
(integrated Development Environment)

debug的基本使用

debug的作用:
调试程序
查看程序执行流程
如何查看程序执行流程:
要想看程序流程,就必须设置断点。
什么是断点
就是一个标记,从哪里开始
如何设置断点
你想看哪里的程序,你就在那个有效程序的左边双击即可。
在哪里设置断点
哪里不会点哪里
目前:我们就在每个方法的第一天有效语句上都加
如何运行设置断点后的程序
右键–Debug as --Java Application
看哪些地方
Debug:断点测试的地方
在这个地方,记住F6,或者点击也可以。一次看一行的执行过程。
Variables:查看程序的变量变化
ForDemo:被查看的源文件
Console:控制台
如何去除断点
a:再次双击即可
b:找到Debug视图,variables界面,找到Breakpoints,并点击,然后看到所有的断点,最后点击那个双叉

常见对象API概述

API(Application Programming Interface)
应用程序编程接口
编写一个机器人程序去控制一个机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等
各种命令,没有编过程序的人很难想象这样的程序该如何编写。但是对于有经验的开发人员来说,知道机器人厂商
一定会提供一些用于控制机器人的Java类,这些类中第一好了操作机器人各种动作的方法。其实,这些Java类
就是机器人厂商提供给应用程序编程的接口
大家把这些类称为Xxx Robot API.本章涉及的JavaAPI指的就是JDK中提供的各种功能的Java类

学习汉语和编程语言的异同点

相同点
基本语法
大量成语
写文章的手法和技巧
不同点
学习汉语,必须先学后用
学习编程 ,可以现用现学

Object类的概述

Object类的概述
类层次结构的根类
所有类都直接或者间接的继承自该类
构造方法
public Object()
回想面向对象中为什么说:
子类的构造方法默认访问的是父类的无参构造方法

Object类的hashCode

public int hashCode();返回该对象的哈希码值。
注意:哈希值是根据哈希算法算出来的一个值,这个值和地址值有关,
但是不是实际地址值,你可以理解为地址值。

Student s1 = new Student();
System.out.println(s1.hashCode());

Object类的getclass()方法

Student s = new Student();
Class c = s.getClass();
String str = c.getName();
System.out.println(str);//打出当前类的包名及其类名

链式编程
String str2 = s.getClass().getName();
System.out.println(str2);

Object类的toString()方法

toString()方法的值等价于它:
this.getClass().getName()+’@’+Integer.toHexString(this.hashCode());//this是对象名
如果没有重写那么打印的还是地址值

Object类的equals()方法

public boolean equals(Object obj):在父类方法
指示其他某个对象是否与此对象“相等”
这个方法,默认情况下比较的是地址值.比较地址值一般来说意义不大,所以我们要重写方法
怎么重写呢?
一般都是用来比较对象的成员变量是否相同
基本类型:比较的就是值是否相同
引用类型:比较的是地址值是否相同
看源码:public

Stduent s1 = new Student("null",0);
	Stduent s2 = new Student("null",0);
	System.out.println(s1==s2);//false
	Studnet s3 =s1;
	System.out.println(s1==s3);//true


public boolean equals(Object obj):
//return ture;
//这里要改进,根据这里比较的成员变量来决定返回true还是false
//这里其实要比较的就是name和age
//但是,name是String类型的,而String是引用类型的,所以,在这里我们不能直接用==比较,应该用equlas()比较
//String的equlas()方法是重写自Object类的,比较的是字符串的内容是否相同
Student s = (Student)obj;//s--obj--s2
if(this.name.equlas(s.name)&& this.age == s.age){
	return true;
}else{
	return false;
}

Object类的equals()方法代码优化

equals:
	引用类型:默认情况下,比较的是地址值
	不够,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同

obj是对象

public boolean equlas (Object obj){
Student s = (Student)obj;
if(this.name.equals(s.name) && this.age ==s.age){
	return ture;
}else{
	return false;
}
}
用三元改进:
public boolean equlas (Object obj){
	//为了提高效率,当两个对象地址值一样时,不需要向下转型比较
if(this == obj){
	return turn;
}
	//为了提高程序的健壮性
	//我先判断一下,obj是不是学生的一个对象,如果是,在做向下转型,如果不是,直接返回false
	//这个时候,我们要判断的是对象是否是某个类的对象?
	//记住一个格式:对象名instanceof类名
	//表示:判断该对象名是否是一个对象
	if(!(obj instanceof Studnet)){
		return false;
}

	Student s = (Student)obj;
	return this.name.equlas(s.name) && this.age == s.age;
}

Object类的finalize()方法和clone()方法

protected void finalize():当垃圾回收期确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法,用于回收
垃圾,但是什么时候回收,是不确定的。
protected Objiect clone():创建并返回此对象的一个副本
A:重写该方法

Cloneable:此类实现了Cloneable接口,以指示Object.clone()方法可以合法地对该类实例进行按字段复制
这个接口是标记接口,告诉我i们实现该接口的类就可以实现对象的复制了。

public static void main(String[] args) thow ClpneNotSupportedException{
	//创建学生对象
	Student s = new Student();
	//克隆学生对象
	Object obj = s.clone();
	Student s2 = (Student)obj;;

}
在父类
public class Studnet implements Cloneable才可以克隆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值