0
点赞
收藏
分享

微信扫一扫

web安全渗透测试十大常规项(二):web渗透测试之XSS跨站脚本攻击

小龟老师 2024-05-27 阅读 7
java

Object类:

Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用Object类中提供的一些方法。

所有类都是Object类的子孙类。

API文档:

 Object类的成员方法:

Object类的常见方法:

 

Student类:

package cn.ensource.d13_object;

import java.util.Objects;

public class Student {     // 默认继承Object类
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    // 重写equals方法,比较两个对象的内容一样,就返回true
    @Override
    public boolean equals(Object obj) {
        // 1. 两个对象的地址一样,直接返回true
        if(this == obj) return true;
        // 2. 判断Obj是null,直接返回false
        // 比较者类型跟被比较者类型不一样,例如:Student.class != Pig.class
        if(obj == null || getClass() != obj.getClass()) return false;
        // 3. obj不是null,obj一定是学生类型的对象,开始比较内容了
        // 强制类型转换到Student
        Student student = (Student) obj;
        return Objects.equals(this.name, student.name) && this.age == student.age;
    }
}

测试类:

package cn.ensource.d13_object;

public class Test {
    public static void main(String[] args) {
        // 目标:掌握Object类的常用方法

        Student s1 = new Student("赵敏", 23);
        System.out.println(s1);

        Student s2 = new Student("赵敏", 23);
        System.out.println(s2.equals(s1));   // 默认比较两个对象的地址,String类是帮我们重写了equals方法
        System.out.println(s1 == s2);        // 默认比较两个对象的地址
        
    }
}

clone方法:对象克隆:

当某个对象调用这个方法的时候,这个方法会复制一个一模一样的新对象返回。

这个新对象:里面的内容一样的,但是地址不一样。

package cn.ensource.d13_object;

// Cloneable标志接口,理解是一种规则。
public class User implements Cloneable {
    private int id;
    private String username;
    private String password;
    private double[] scores;

    public User() {
    }

    public User(int id, String username, String password, double[] scores) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.scores = scores;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double[] getScores() {
        return scores;
    }

    public void setScores(double[] scores) {
        this.scores = scores;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        // super 去调用父类Object中的clone方法
        return super.clone();
    }
}

package cn.ensource.d13_object;

public class Test2 {
    public static void main(String[] args) throws CloneNotSupportedException {
        // 目标;掌握Object类的对象克隆方法
        // 1. protected Object clone(): 对象克隆

        User user1 = new User(1, "chang", "123456", new double[]{99.0, 99.5});
        System.out.println(user1.getId());
        System.out.println(user1.getUsername());
        System.out.println(user1.getPassword());
        System.out.println(user1.getScores());

        System.out.println("-----------");

        User user2 = (User) user1.clone();
        System.out.println(user2.getId());
        System.out.println(user2.getUsername());
        System.out.println(user2.getPassword());
        System.out.println(user2.getScores());

    }
}

protected只能在这个lang包下,访问这个clone方法。或者是在Object的子类中才能调用这个方法。

protected 是指可以在子类中访问,而不是在子类对象中访问。

User是Object的不同包的子类,可以在User类中访问clone,但是不能在Test类中访问。

protected修饰的只能在本类,同一包下,继承它的子类中使用,只能在User这个类中使用clone,在new出来的对象中确实使用不了,如果一定要使用,重写或者在方法中使用。

protected只能自己的儿子用,不让让儿子的朋友以儿子的名义用。

输出结果:

1
chang
123456
[D@3b07d329
-----------
1
chang
123456
[D@3b07d329

getscores()函数返回的是数组的地址,克隆的对象中的地址是一样的,都是指向堆内存中的数组对象,所以地址相同。

浅克隆:

拷出来的新对象,与原来对象中的数据是一模一样的(引用类型拷贝的只是地址。

深克隆:

对象中基本类型的数据直接拷贝。

对象中的字符串数据拷贝的还是地址。String是放在堆内存的常量池中。

对象中还包含的其他对象,不会拷贝地址,会创建新对象。

深克隆的实现:

对数组对象进行克隆。

举报

相关推荐

0 条评论