逆向爬虫33 Java基础一

逆向爬虫33 Java基础一

目的

  • 总结java和之前学过语言之间相似和不同的地方,方便记忆

基本特性

  • 一个文件可以有多个类,但只能有一个public类,且public类名必须和文件名相同
  • 类名首字母大写且驼峰式命名,例如:Hello、UserInfo、PersonApplication
  • 类中的方法分为成员方法和静态方法,成员方法必须通过实例化类的对象来调用,静态方法可以直接通过类名来调用
  • java中方法的参数和返回值都必须指定数据类型,返回值为空时为void
  • java基本输入输出
import java.util.Scanner;

public class Hello {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String text = input.nextLine();
        System.out.println(text);
        input.close();
    }
}
  • 变量定义和C/C++一样,但是定义常量的修饰符为 final
  • 条件 if … else … 循环 while,do while,for 和C/C++一样

整型 ( 特别是字节类型 )

  • java中的整型分为:byte,short,int,long四种类型,分别是1个,2个,4个和8个字节大小
  • byte类型和C/C++中的char类型相似,可以用byte数组来和字符串做相互转换
import java.util.Arrays;

public class Hello {
    public static void main(String[] args) {
        // 字节数组 -> 字符串
        byte[] dataList = {97, 105, 100, 61, 50, 52, 54, 51, 56, 55, 53, 55, 49, 38, 97, 117, 116, 111, 95, 112, 108, 97, 121, 61, 48, 38, 99, 105, 100, 61, 50, 56, 57, 48, 48, 56, 52, 52, 49, 38, 100, 105, 100, 61, 75, 82, 69, 104, 69, 83, 77, 85, 74, 104, 56, 116, 70, 67, 69, 86, 97, 82, 86, 112, 69, 50, 116, 97, 80, 81, 107, 55, 87, 67, 104, 67, 74, 103, 38, 101, 112, 105, 100, 61, 48, 38, 102, 116, 105, 109, 101, 61, 49, 54, 50, 55, 49, 48, 48, 57, 51, 55, 38, 108, 118, 61, 48, 38, 109, 105, 100, 61, 48, 38, 112, 97, 114, 116, 61, 49, 38, 115, 105, 100, 61, 48, 38, 115, 116, 105, 109, 101, 61, 49, 54, 50, 55, 49, 48, 52, 51, 55, 50, 38, 115, 117, 98, 95, 116, 121, 112, 101, 61, 48, 38, 116, 121, 112, 101, 61, 51};
        String dataString = new String(dataList);
        System.out.println(dataString);

        // 字符串 -> 字节数组
        try {
            // python中的 name.encode("gbk")
            String name = "一个小黑";
            byte[] v1 = name.getBytes("GBK");
            System.out.println(Arrays.toString(v1));

            // python中的 name.encode("utf-8")
            byte[] v2 = name.getBytes("utf-8");
            System.out.println(Arrays.toString(v2));
        } catch (Exception e) {
            
        }
    }
}
  • byte类型数组可以直接通过String构造函数转换成字符串
  • String字符串可以通过getBytes(charset)方法转换成byte数组

在这里插入图片描述

  • 上述例子就是从字符串转换为字节数组,下一步需要去看v0是什么编码

java字节转换为python字节

注意:python中的字节是无符号数,范围是0255,java中的字节是有符号数,范围是-128127,其中正数是一一对应的

java中的字节,有符号:-128 ~ 127
	0 1 2 3 ... 126 127 -128 -127 ... -3 -2 -1
python中的字节,无符号数:0 ~ 255
	0 1 2 3 ... 126 127 128 129 ... 253 254 255

因此以后碰到java中的byte字节类型需要用python来模拟的话,需要做相应的处理,处理的方法如下

# Python脚本,方便你们以后使用。
byte_list = [-50, -28, -59, -26, -58, -21]

bs = bytearray()  # python字节数组
for item in byte_list:
    if item < 0:
        item = item + 256
    bs.append(item)

str_data = bs.decode('gbk')  # data = bytes(bs)
print(str_data)	# 武沛齐

字符串

  • 字符串的定义方式有以下几种
import java.io.UnsupportedEncodingException;

public class Hello {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String v1 = "一个小黑";
        String v2 = new String("一个小黑");
        String v3 = new String(new byte[]{-28, -72, -128, -28, -72, -86, -27, -80, -113, -23, -69, -111});
        String v4 = new String(new byte[]{-46, -69, -72, -10, -48, -95, -70, -38}, "GBK");
        String v5 = new String(new char[]{'一', '个', '小', '黑'});
    }
}
  • 字符串中的方法基本和python中的一样,看到方法名字就知道是干什么用的了
  • java中比较两个字符串是否相同是通过equals()方法实现的,而python中只需要用 == 运算符就可以了

字符串拼接 ( StringBuilder )

  • java中的连接字符串是通过StringBuilder实现的
public class Hello {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("name");
        sb.append("=");
        sb.append("apphao");
        sb.append("&");
        sb.append("age");
        sb.append("=");
        sb.append("18");
        String dataString = sb.toString();
        System.out.println(dataString);	// name=apphao&age=18
    }
}

以后在逆向的过程中看到StringBuilder就知道要连接字符串了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数组

  • java中的数组和C/C++中的数组类似,只能存放指定个数,固定类型变量,单写法上稍有不同
import java.util.Arrays;

public class Hello {
    public static void main(String[] args) {
        int[] numArray = new int[3];    // 整型数组
        numArray[0] = 123;
        numArray[1] = 1;
        numArray[2] = 99;
        System.out.println(Arrays.toString(numArray));

        String[] names = new String[]{"一个小黑", "alex", "eric"};  // 字符串数组
        System.out.println(Arrays.toString(names));

        String[] nameArray = {"一个小黑", "alex", "eric"};
        System.out.println(Arrays.toString(nameArray));

        for (int idx = 0; idx < nameArray.length; idx++) {
            System.out.println(nameArray[idx]);
        }
    }
}

Object

java中的object可以泛指任何一种类型的变量,和python中的object类似

public class Hello {
    public static void func(Object v1) {
        if (v1 instanceof Integer) {
            System.out.println("整型");
        } else if (v1 instanceof String) {
            System.out.println("字符串类型");
        } else {
            System.out.println("位置类型");
        }
    }
    public static void main(String[] args) {
        func(123);
        func("123");
        func(12.3);
    }
}
  • Java中所有的类都继承Object,Object代指所有的类型。
  • 自己创建关系
    在这里插入图片描述
ArrayList v1 = new ArrayList();
LinkedList v2 = new LinkedList();
List v1 = new ArrayList();
List v2 = new LinkedList();
Object v1 = new ArrayList();
Object v2 = new LinkedList();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值