【44】WEB安全学习----JAVA基础一

前言:

为什么做渗透测试需要学习JAVA?自己的见解:

1、目前国内大中型企业项目多数采用JAVAEE开发,而在日常安全服务工作中,百分之八十的项目也是JAVA所开发,所以需要学习JAVA(达到会分析会写,而不是之前学习PHP那样会分析就行,因为PHP的特性,所以用来打CTF的挺多)。

2、JAVA相关安全工具也挺多(如burp、owasp组织开发的相关工具),可以用JAVA来编写日常安全工具(当然后期也会学习Python,至于选择谁?个人取决于环境及效率)。

3、能够深入了解目前主流漏洞,如stuts2相关漏洞(相比较thinkphp框架应该很少人分析吧),同时也能接触相关web环境如:tomcat、weblogic的安全漏洞。

4、也是为啥学习JAVA的重要原因之一,后期会接触APP的逆向分析(安卓开发)。

所以短期目标主要以学习JAVA为主。

 

JAVA基础:

java发展历史省略......

目前JAVA发展方向:

1、JAVA标准开发(J2SE、JAVA SE):提供了系统底层的支持,实现了桌面程序开发;

2、JAVA嵌入式开发(J2ME、JAVA ME):目前主要是安卓的开发(谷歌自己也提供了安卓官方开发语言:kotlin);

3、JAVA企业开发(J2EE、JAVA EE):目前主要是互联网开发;

扫描二维码关注公众号,回复: 4185033 查看本文章

JAVA特点:

1、是一个行业内通用的技术实现标准

2、是一门面向对象的编程语言

3、提供了自动垃圾回收机制

4、使用引用来代替指针处理

5、是为数不多的支持正真的多线程技术

6、跨平台(和python类似)

JAVA是半编译半解释的语言:

编译命令:javac.exe

解释命令:java.exe

编译及解释过程:*.java =编译> *.class(字节码) => JVM执行

JDK:即JAVA开发环境,目前JDK版本为1.10,但企业中用的较多的为1.8,传统企业为1.6

JDK环境配置省略。

第一个JAVA程序:

注意:public 类名与文件名一致(类名首字母大写),一个.java文件里只能有一个public class类,但可以有多个class类。

class A{}
class B{}
public class Text{
	public static void main(String[] args){
		System.out.println("hello word!");
	}
}

通过javac Text.java命令编译后,一个类会生成一个.class文件

通过java 类名命令执行.class文件(这里不需要带文件后缀)

jshell:在JDK1.9以后,JAVA也提供了交互式命令环境jshell,和python类似。

CLASSPATH属性作用:是由JRE提供,用于定义JAVA程序解释类时加载路径,默认为.当前目前目录加载。

Java的注释:

单行注释://

多行注释:/*.......*/

文档注释:/**......*/

标识符和关键字:

和其它编程语言类似,标识符由字母、数字、_、$组成。

因为JAVA使用的是unicode编码,故标识符可以为中文。

数据类型:

JAVA数据类型一共分为两类:

1、基本数据类型:(整型:byte、short、int、long)(浮点:float、double) (布尔:boolean) (字符:char)

2、引用数据类型:数组、类(String字符串也是类)、接口

数据类型默认值:整数默认为0,浮点为0.0,引用为null。

使用原则:整数使用int,浮点使用double,超过整数范围使用long。(不必考虑节约内存)

public class Text{
	public static void main(String[] args){
		byte = 127;
		int i = 10;
		long l = 123123123L;  //若要为Long型,需要在数值后添加L,不然默认为int型。
		double d = 3.14;
		boolean b = true;
		char a = '中';  //字符型用单引号引起来,且只能为一个字符
		String s1 = "你好";  //字符串型用双引号引起来
	}
}

数据类型转换:

范围小的自动转换到范围大的数据类型;范围大的需要强制转换到范围小的;

public class Text{
	public static void main(String[] args){
		int i = 10;
		long l = 123123123L;
		long l1 = i;  //自动转换
		int i1 = (int)l;  //强制转换
	}
}

运算符:

和其它编程语言一样,提供了数学运算、关系运算、逻辑运算、位运算操作符。

三目运算:int max = x>y?x:y

逻辑结构-IF分支:

if(布尔表达式){
    语句;
}else if(布尔表达式){
    语句;
}else{
    语句;
}

逻辑结构-Switch分支:较少用

//switch只支持int、char、枚举、String
switch(数据){
    case 数值:{
        语句;
        [break;]}
    case 数值:{
        语句;
        [break;]}
    default:
        语句;
}

逻辑结构-while循环:

while(布尔表达式){
    条件满足时执行;
    修改循环条件;
}
//区别就是do-while至少运行一次
do{
    条件满足时执行;
    修改循环条件;
}while(布尔表达式)

逻辑结构-for循环:

for(初始化数值;循环判断;修改循环数据){
    循环语句执行;
}

循环控制语句:break(跳出循环)、continue(跳出本次循环)

方法:和php中function函数一样

方法的定义:

修饰符 返回值类型 方法名(参数值列表){
    [return返回]
}
//无参无返回:
public void fun1(){}
//有参无返回:
public void fun2(int i1, String s1){}
//有参有返回:
public String fun3(int i1, String s1){
    return "name" + s1;
}

方法的重载:

当方法名相同,参数的类型或个数不同时就叫做方法的重载,在进行调用时,程序会根据传入的参数自动判断调用哪个方法;(与方法的返回类型无关)

public class Text{
	public static void main(String[] args){
		System.out.println(fun1("11","22"));
	}
	public static String fun1(){  //在主类中使用方法,需要加入static关键字修饰方法,因为加入了static就不需要实例化就可调用方法
		return "无参方法";
	}
	public static String fun1(String s1){
		return "有一个参数方法" + s1;
	}
	public static int fun1(String s1,String s2){
		return 10;  //有两个参数方法且返回数据类型不同
	}
}

方法的递归调用:

public class Text{
	public static void main(String[] args){
		System.out.println(fun1(8));
	}
	public static long fun1(int i){ 
		if(i == 1){
			return 1;
		}
		return i * fun1(i -1);
	}
}

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/83958526