java案例3:构造方法及其重载对照frida

构造方法及其重载

目录

什么是构造方法

  构造方法 : 用来初始化对象的方法
(1)  构造方法名与类名相同 , 且没有返回值,且不需要使用void修饰 。
(2)  作用:在构造方法中为创建的对象初始化赋值,
(3)  在创建一个对象的时候,至少要调用一个构造方法。
(4) 每个类都有构造方法。如果没有显式地为类定义构造方法,Java将会为该类提供一个默认构造方法,但是只要在一个Java类中定义了一个构造方法后,默认的无参构造方法即失效。
       我们说构造方法是用来初始化对象的,那么它是怎样去初始化的呢,回想我们创建对象的语法
例 : Car car= new Car();
       我们可以看到new关键字右边的这一块 ,这其实就是调用了Car类的构造方法来创建此对象的

无参构造快捷启动

在这里插入图片描述

代码示例

Main.java

public class Main {
    public static void main(String[] args) {
        Person person = new Person(); //实例化
        person.talk("你好");
    }
}

Person.java

public class Person {
    public Person() {
        //无参构造
        System.out.println("这是一个构造函数");
    }

    //隐藏了一个无参构造函数
    public void talk(String pString){
        System.out.println("talk==>"+pString);
    }
}

把无参构造的 public 去掉也可以运行,无参函数默认是 public
    无参构造的 public 后面不能跟 void 
    不能把系统默认的公有转为私有,导致函数无法调用
非无参构造的 public 去掉也可以运行,默认是公有

基于无参构造快速修改文件内容,初始化构造

public class Person {
    private String name = "张三";
    public Person(String pName) {
        //无参构造
        System.out.println("这是一个构造函数");
        name = pName;
    }

    //隐藏了一个无参构造函数
    public void talk(String pString){
        System.out.println("talk==>"+pString);
        System.out.println("我的名字叫"+name);
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("王二麻子"); //实例化
        person.talk("你好");
    }
}

运行结果

这是一个构造函数
talk==>你好
我的名字叫王二麻子

构造方法特点

构造方法的特点

1、构造方法名一定与类同名

2、构造方法无返回值类型(void 也不行)

3、构造方法可以没有(默认一个无参构造方法),也可以有多个构造方法,他们之间构成重载关系

4、如果定义有参构造函数,则无参构造函数将被自动屏蔽

5、构造方法不能被继承

6、构造方法不能手动调用,在创建类实例的时候自动调用构造方法

7.大驼峰命名法

构造函数赋值但是没有传值,默认得到的结果是null

Main.java

public class Main {
    public static void main(String[] args) {
        Person person = new Person("王二麻子"); //实例化
        person.talk("你好");
    }
}

Person.java

public class Person {
    private String name;
    public Person(String pName) {
        //无参构造
        System.out.println("这是一个构造函数");
//        name = pName;
    }

    //隐藏了一个无参构造函数
    public void talk(String pString){
        System.out.println("talk==>"+pString);
        System.out.println("我的名字叫"+name);
    }
}

运行结果

这是一个构造函数
talk==>你好
我的名字叫null

Process finished with exit code 0

方法重载

在一个类中,方法名不同,参数不同,会构成方法重载

类和构造方法中可以使用this指针

Main.java

public class Main {
    public static void main(String[] args) {
        Person person = new Person("王二麻子",12); //实例化
        person.talk("你好");
    }
}

Person.java

public class Person {
    private String name;
    private int age;
    public Person(String pName,int pAge) {
        //无参构造
        System.out.println("这是一个构造函数");
//        name = pName;
        this.age = pAge;
        //this指针
    }

    //隐藏了一个无参构造函数
    public void talk(String pString){
        System.out.println("talk==>"+pString);
        //在类中可以使用this指针
        System.out.println("我的名字叫"+this.name);
        System.out.println("我的年龄"+age+"岁");
    }
}

运行结果

这是一个构造函数
talk==>你好
我的名字叫null
我的年龄12Process finished with exit code 0

方法的重载既可以独立重载也可以分开重载

Main.java

public class Main {
    public static void main(String[] args) {
        Person person = new Person("王二麻子"); //实例化
        Person person1 = new Person(2);
        person.talk("你好");
        person1.talk("你好");
    }
}

Person.java

public class Person {
    private String name;
    private int age;
    public Person(String pName) {
        //无参构造
        System.out.println("这是一个构造函数");
//        name = pName;

    }
    public Person(int pAge){
        age = pAge;
        //this指针
    }

    //隐藏了一个无参构造函数
    public void talk(String pString){
        System.out.println("talk==>"+pString);
        //在类中可以使用this指针
        System.out.println("我的名字叫"+this.name);
        System.out.println("我的年龄"+age+"岁");
    }
}

运行结果

这是一个构造函数
talk==>你好
我的名字叫null
我的年龄0岁
talk==>你好
我的名字叫null
我的年龄2

frida对照

java构造方法的重载对应了frida 类$init重载选项,根据数据类型overload(‘int’,‘数据类型’)

java与frida数据类型关系

Java Type (Java中参数类型)Frida Type (frida脚本中参数类型)
intint
bytebyte
shortshort
longlong
floatfloat
doubledouble
charchar
(比如String、List).(比如java.lang.String、java.util.List)
int[][I
byte[][B
short[][S
long[][J
float[][F
double[][D
char[][C
[](比如String[])L.; (比如 [Ljava.lang.String;)
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值