public class MyClass{…}等价于
public class MyClass extends Object {…}
方法 | 说明 |
---|---|
Object clone() | 创建与该对象的类相同的新对象 |
boolean equals(Object) | 比较两对象是否相等 |
void finalize() | 当垃圾回收器确定不存在对该对象的更多引用时,对象垃圾回收器调用该方法 |
Class getClass() | 返回一个对象运行时的实例类 |
int hashCode() | 返回该对象的散列码值 |
void notify() | 激活等待在该对象的监视器上的一个线程 |
void notifyAll() | 激活等待在该对象的监视器上的全部线程 |
String toString() | 返回该对象的字符串表示 |
void wait() | 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待 |
// 定义Demo类,实际上继承Object类 class Demo { } public class ObjectDemo01 { public static void main(String[] args) { Demo d = new Demo(); // 实例化Demo对象 System.out.println("不加toString()输出:" + d); System.out.println("加上toString()输出:" + d.toString()); } }输出结果为:
不加toString()输出:Demo@15db9742
加上toString()输出:Demo@15db9742
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return "姓名:" + this.name + ":年龄" + this.age; } public static void main(String[] args) { Person per = new Person("C语言中文网", 30);// 实例化Person对象 System.out.println("对象信息:" + per);// 打印对象调用toString()方法 } }输出结果为:
对象信息:姓名:C语言中文网:年龄30
程序中的 Person 类中重写了 Object 类中的 toString() 方法,这样直接输出对象时调用的是被子类重写过的 toString() 方法。==
运算符和 equals() 方法,==
运算符是比较两个引用变量是否指向同一个实例,equals() 方法是比较两个对象的内容是否相等,通常字符串的比较只是关心内容是否相等。boolean result = obj.equals(Object o);其中,obj 表示要进行比较的一个对象,o 表示另一个对象。
import java.util.Scanner; public class Test01 { // 验证用户名和密码 public static boolean validateLogin(String uname, String upwd) { boolean con = false; if (uname.equals("admin") && upwd.equals("admin")) { // 比较两个 String 对象 con = true; } else { con = false; } return con; } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("------欢迎使用大数据管理平台------"); System.out.println("用户名:"); String username = input.next(); // 获取用户输入的用户名 System.out.println("密码:"); String pwd = input.next(); // 获取用户输入的密码 boolean con = validateLogin(username, pwd); if (con) { System.out.println("登录成功!"); } else { System.out.println("用户名或密码有误!"); } } }上述代码在 validateLogin() 方法中又使用 equals() 方法将两个 String 类型的对象进行了比较,当 uname 对象与保存 admin 的 String 对象相同时,uname.equals("admin") 为 true;与此相同,当 upwd 对象与保存 admin 的 String 对象相同时,upwd.equals("admin") 为 true。当用户输入的用户名和密码都为 admin 时,表示该用户为合法用户,提示登录成功信息,否则提示用户名或密码有误的错误信息。
------欢迎使用大数据管理平台------ 用户名: adinm 密码: admin 用户名或密码有误!
------欢迎使用大数据管理平台------ 用户名: admin 密码: admin 登录成功!
public class Test02 { public static void printClassInfo(Object obj) { // 获取类名 System.out.println("类名:" + obj.getClass().getName()); // 获取父类名 System.out.println("父类:" + obj.getClass().getSuperclass().getName()); System.out.println("实现的接口有:"); // 获取实现的接口并输出 for (int i = 0; i < obj.getClass().getInterfaces().length; i++) { System.out.println(obj.getClass().getInterfaces()[i]); } } public static void main(String[] args) { String strObj = new String(); printClassInfo(strObj); } }该程序的运行结果如下:
类名:java.lang.String 父类:java.lang.Object 实现的接口有: interface java.io.Serializable interface java.lang.Comparable interface java.lang.CharSequence
interface A { public String getInfo(); } class B implements A { public String getInfo() { return "Hello World!!!"; } } public class ObjectDemo04 { public static void main(String[] args) { // 为接口实例化 A a = new B(); // 对象向上转型 Object obj = a; // 对象向下转型 A x = (A) obj; System.out.println(x.getInfo()); } }输出结果为:
Hello World!!!
通过以上代码可以发现,虽然接口不能继承一个类,但是依然是 Object 类的子类,因为接口本身是引用数据类型,所以可以进行向上转型操作。public class ObjectDemo05 { public static void main(String[] args) { int temp[] = { 1, 3, 5, 7, 9 }; // 使用object接收数组 Object obj = temp; // 传递数组引用 print(obj); } public static void print(Object o) { // 判断对象的类型 if (o instanceof int[]) { // 向下转型 int x[] = (int[]) o; // 循环输出 for (int i = 0; i < x.length; i++) { System.out.print(x[i] + "\t"); } } } }输出结果为:
1 3 5 7 9
以上程序使用 Object 接收一个整型数组,因为数组本身属于引用数据类型,所以可以使用 Object 接收数组内容,在输出时通过 instanceof 判断类型是否是一个整型数组,然后进行输出操作。
本文链接:http://task.lmcjl.com/news/10332.html