Educoder- 《JAVA从小白到大牛》(第二章)2-6 Java面向对象 - 常用类

本文主要介绍了Java中的Object类,包括Object类的方法如hashCode()和toString(),以及对象克隆的概念。此外,还涉及到了Random类的使用,如生成随机数的方法,并通过实例展示了如何创建和使用Random对象。文章最后提到了Date类和SimpleDateFormat类以及Math类的使用,为读者提供了Java基础类库的重要知识。
摘要由CSDN通过智能技术生成

提示:本文章为个人学习记录,仅供参考学习,禁止转载,支持交流与讨论。

第1关:Object类

相关知识

为了完成本关任务,你需要掌握:

1.什么是Object类;

2.Object类的方法;

3.Java对象克隆。

什么是Object类

Java中有一个比较特殊的类,就是 Object类,它是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类就默认继承Object类。因此,Object 类是 Java 类层中的最高层类,是所有类的超类。换句话说,Java 中任何一个类都是它的子类。由于所有的类都是由Object类衍生出来的,所以 Object类中的方法适用于所有类。

public class Person //当没有指定父类时,会默认 Object 类为其父类
{
   
    ...
}
//上面的程序等价于:

public class Person extends Object
{
   
    ...
}

如果想引用你不知道的类型的对象,使用Object类是没有错的。请注意,父类引用变量可以引用子类对象,称为向上转换。下面举一个例子,有一个getObject()方法返回一个对象,但它可以是任何类型,如:Employee,Student等这样的类,我们可以使用Object类引用来引用该对象。 例如:

Object obj=getObject();//we don't know what object will be returned from this method

Object类为所有对象提供了一些常见的行为,如对象可以进行比较,对象可以克隆,对象可以通知等。
在这里插入图片描述
Object类的常用方法有:toString()equals()方法。

1.关于toString()方法

在Object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串);

可以通过重写toString()方法表示出对象的属性。

此方法是在打印对象时被调用的,下面有两个范例,一个是没复写toString()方法,另一个是复写toString()方法,读者可比较两者的区别。

package educoder;
public class TestToStringDemo1 {
   
    public static void main(String[] args) {
   
        Person p = new Person();
        System.out.println(p);
    }
}
class Person extends Object {
   
    String name = "张三";
    int age = 18;
}

输出结果:
educoder.Person@7852e922
从上面的程序中可以发现,在打印对象p的时候实际上打印出的是一些无序的字符串,这样的字符串很少有人能看懂什么意思,之后可以再观察下面的范例,下面的范例复写了Object类中的 toString()方法。

package educoder;
public class TestToStringDemo2 {
   
    public static void main(String[] args) {
   
        Person p = new Person();
        System.out.println(p);
    }
}
class Person extends Object {
   
    String name = "张三";
    int age = 18;
    // 复写Object类中的toString()方法
    public String toString() {
   
        return "我是:" + this.name + ",今年:" + this.age + "岁";
    }
}

输出结果:
我是:张三,今年:18岁

2.关于equals()方法

比较的是对象的引用是否指向同一块内存地址,一般情况下,比较两个对象时是比较它的值是否一致,那如何解决呢?思路也比较简单,重写equals()方法。

在不重写的情况下,我们先看下程序执行情况,创建两个相同类型的对象,并判断对象是否相等。

ackage educoder;
public class test {
   
    public static void main(String[] args) {
   
        Dog dog = new Dog();
        dog.name = "jack";
        Dog dog1 = new Dog();
        dog1.name = "jack";
        System.out.println(dog);
        System.out.println(dog1);
        if (dog.equals(dog1)) {
   
            System.out.println("两个对象是相同的");
        } else {
   
            System.out.println("两个对象是不相同的");
        }
    }
}
class Animal {
   
}
class Dog extends Animal {
   
    int age = 20;
    String name = "rose";
    public String toString() {
   
        return "Dog [age=" + age + ", name=" + name + "]";
    }
    }

输出结果:
Dog [age=20, name=jack]
Dog [age=20, name=jack]

两个对象是不相同的

分析下 : 两个对象分别new了一次,开辟了两个不同内存空间,内存地址不同。object提供的equals()是用来比较的是对象的引用是否指向同一块内存地址。很显然,内存地址不一样,所以是不相等的,跟属性值是否一样完全没有任何关系。

equals()==的区别:

在Java中,任何类型的数据都可以用“==”进行比较是不是相等,一般用于基本数据类型的比较,比较器存储的值是否相等。但是如果用于引用类型的比较,则是比较所指向对象的地址是否相等,在这点上,跟object类提供的equals()方法的作用是一致的。
对于equals()方法
首先,不能用于基本数据类型的变量之间的比较相等;

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

诸如String、Date等类都对equals方法进行了重写,比较的是所指向的对象的内容

Java对象克隆

对象克隆是一种创建对象的精确副本的方法。 Object类的clone()方法用于克隆对象。java.lang.Cloneable接口必须由我们要创建其对象克隆的类实现。如果我们不实现Cloneable接口,clone()方法将生成CloneNotSupportedException

clone()方法在Object类中定义。clone()方法的语法如下:

少处理任务。
clone()方法示例(对象克隆)

package educoder;
public class Student implements Cloneable {
   
    int rollno;
    String name;
    Student(int rollno, String name) {
   
        this.rollno = rollno;
        this.name = name;
    }
    public Object clone() throws CloneNotSupportedException {
   
        return super.clone();
    }
    public static void main(String args[]) {
   
        try {
   
            Student s1 = new Student(101, "amit"
Java的String中,处理文件名和邮箱验证通常涉及到对字符串内容的一些特定模式匹配,这可以借助正则表达式(Regular Expression)来完成。正则表达式是一种强大的文本匹配工具,用于描述字符串中字符的规律。 **文件名验证:** 1. 检查是否包含非法字符:例如,排除路径分隔符(如斜杠`/`、反斜杠`\`),以及不允许的特殊字符(如空格、#等)。正则表达式可能是 `/[^\/\\ .\*?:"<>|]+$/`,它允许点`.`、下划线 `_` 和字母数字字符,并且结束于路径的结尾。 **邮箱验证:** 2. 验证电子邮件地址的格式:标准的正则表达式可能是 `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`。这个正则表达式包括了用户名部分(允许点、下划线、加号、减号)、@符号,域名部分(由点分隔的字母数字组合),以及顶级域名(如`.com`, `.org`等)。 使用Java的`Pattern`和`Matcher`来进行这样的验证: ```java import java.util.regex.Pattern; import java.util.regex.Matcher; public class Validation { public static boolean isValidFileName(String fileName) { Pattern pattern = Pattern.compile("/[^\/\\ .\*?:"<>|]+$/"); Matcher matcher = pattern.matcher(fileName); return matcher.matches(); } public static boolean isValidEmail(String email) { Pattern pattern = Pattern.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"); Matcher matcher = pattern.matcher(email); return matcher.matches(); } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值