菜鸟的java代码审计之旅-0之java基础知识
前言:
对于java的代码审计我就是一个小白,没有代码基础(不会java),从0开始记录我的java漏洞的审计学习之旅。对于java来说是一门很难的语言,但是不去学习就永远不会。对于一门很复杂的语言如果学习的过于仔细专研原理追求完美,容易跑偏消耗积极性和精力,我学的是代码审计而不是java开发,所以我学的比较有针对性,对此仅仅是我个人看法。
00x1:
java的基础知识,由于语言的特性,我不是去搞开发所以根据以往的语言经验,我直接在菜鸟的java教程过一遍基础语法,了解java的语言特性,语法无外乎3大结构体,条件,循环和判断语句,以及面向对象,异常处理,以及文件处理,等对于预期达到的学习目的是能看懂java代码,理清楚逻辑,入门java的代码审计。
00x2:
基础的语法,对象,类,方法,实例变量就是对象的实例化,而java是大小写敏感,标识符是字符,字母,下划线,不能是数字,关键字。java的修饰符:分为访问修饰符以及非访问修饰符,访问控制修饰符:default,public,protected,private,而非访问的修饰符final,abstract,static等。java的变量:局部变量,类变量,成员变量。java的特性之一:枚举:预先设定好值,不可更改,减少代码bug
java的类和对象:封装,继承,多态,海军3大将面向对象精华,类和对象简单解释,类是一个模板,比如男孩和女孩是一类,而男孩的女朋友叫美羊羊就是一个对象,对象也可以是行为,比如说,吃等代码解释:
public class Dog{
strinng bread;
int age;
string color;
viod barking(){}
viod hungry(){}
viod sleeaping(){}
} 上述代码类,和方法以及变量,变量分为局部,成员,类变量
构造方法:类在创建对象的时候至少调用一种构造方法,若没有定义,则系统使用默认的构造方法,通过new关键字去调用构造方法,必须满足以下要求:1.方法名和类名完全匹配,构造方法不需要返回了偶像,构造方法不需要非访问修饰符修饰,如:static,final等,以下代码解释构造方法的作用原理:
Fruits apple = new Fruits("80%","60%","30%") 使用new关键字创建java对象的时候,首先是分配内存空间,然后调用类的构造方法初始化成员属性和成员变量,最后返回实例给对象apple,构造方法为有参和无参,又分隐式和显式,这怎么理解其实作用就是给对象一个初始的参数,这部分网上有是咧代码自己敲了一遍,发现的坑是源文件名称必须和public类保持一致
变量:变量是啥,是申请内存来存储值,变量名就是申请的这块内存的名字,而这个申请的内存类型是由变量类型决定的比如定义一个变量为浮点数,这块内存就只能存储浮点数,java的两大数据类型:内置数据类型和引用数据类型,内置的数据类型有8种基本的数据类型,其中6种数字型,一个字符,一个布尔。比如二进制类型:byte,short以二进制补码形式,int,long,float,double.boolean,char,这些取值范围啥的,不需要记忆,若需要直接打印即可,因为是常量,
常量:常量不可修改,上面提到的非访问修饰符final 就是修饰常量的。
局部变量,类变量,实例变量的区别:类变量是独立方法之外的变量用static修饰,实例变量是独立方法之外,但是不用static修饰,而局部变量就是类方法中定义的变量
java有个自增和自减运算符:++和--这和c语言差不多有个前缀自增和后缀自增 ++a和a++的区别,就是先运算表达式再自增和先自增再运算表达式的区别,关系运算发和其他语言一样,istanceof运算符,就是比较对象是部署同一个对象
循环结构:for,while do...while,switch case: break,default
正则:\\符号在其他语言中为普通符号\ 但是在java中表明这是转义,而表示一个普通的反斜杠为\\\\
在正则中 如果单独的?号表示零次或者一次匹配前面的字符或者表达式,而如果?紧跟着其他的限定符,表示非贪心模式,比如o+?表示匹配单个的o而o+为匹配所有的o,{m,n} 非负整数: 字少m次最多n次,小写和大写相反的匹配:\d 数字,\D非数字,\s空格 \S非空格,\w任意字符,\W 与任意非单词字符匹配
方法:函数和过程,一个返回非viod叫函数,而返回viod的方法叫过程,finalize方法;垃圾收集器析构之前调用,用来清除回收对象,jvm可以自动的清除内存,手动的话就用上面的方法。
流:java.io 包含了所以的输入输出类,一个流可以理解为一个数据序列,输入流表示从一个源读取数据,输出流表示向目标写数据
比如从控制台输入:由System.in 完成,从控制台读取多字符: read()方法读取字符,readline 读取字符串,语法: int read() throws IOExcetion,当流结束的时候返回-1,该方法抛出IOExcetion
scanner类获取用户的输入:格式: Scanner s = new Scanner(System.in) next和nextline的区别 就是空白的区别:next遇到空白就结束不能得到带空白的字符串,而nextline 是可以得到空白可以得到包括空白的所有字符。
之前最好验证写完没有:用hasNextXxx()方法。
java异常:
用户输入非法数据,打开文件不存在,网络连接中断,或者jvm内存溢出 捕获异常:try{} catch(ExceptionName e1){} 多重捕获就是多个catch,finnaly关键字在cathc后面,不管异不异常都会执行
序列化:全名对象的序列化,将对象的数据,类型和信息都是一个字节序列,将该字节序列写入文件,叫序列化,如果将该字节序列从文件中读取出来,叫反序列化,优点是整个序列化和反序列化的过程是虚拟机JVM独立的,是可以跨平台的
类:ObjectInputStream 和ObjectOutputStream 是高层次的数据流,包含序列化和反序列化的方法
...后面没有记录懒,基本上一天时间过了遍基础知识,能看懂代码。
菜鸟的java代码审计之旅-0之java基础知识的更多相关文章
- Java代码审计之不安全的Java代码
Java代码审计之不安全的Java代码 在打靶场的同时,需要想一下如果你是开发人员你会怎样去防御这种漏洞,而作为攻击方你又怎么去绕过开发人员的防御. 环境搭建 https://github.com ...
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...
- Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识
JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...
- java 虹软ArcFace 2.0,java SDK使用-进行人脸检测
虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.html虹软ArcFace功能简介 人脸检测人脸跟踪人脸属性检测(性别.年龄)人脸三维角度检测人脸对比 ...
- java 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对
java人脸识别 虹软ArcFace 2.0,java SDK使用.人脸识别-抽取人脸特征并做比对 虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.ht ...
- Java并发和多线程(一)基础知识
1.java线程状态 Java中的线程可以处于下列状态之一: NEW: 至今尚未启动的线程处于这种状态. RUNNABLE: 正在 Java 虚拟机中执行的线程处于这种状态. BLOCKED: 受阻塞 ...
- Java 网络编程(一) 网络基础知识
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951826.html 网络基础知识 网络编程的目的:直接或间接地通过网络协议与其他计算机 ...
- Java笔记(十四) 并发基础知识
并发基础知识 一.线程的基本概念 线程表示一条单独的执行流,它有自己的程序计数器,有自己的栈. 1.创建线程 1)继承Thread Java中java.lang.Thread这个类表示线程,一个类可以 ...
- java多线程并发(一)-- 相关基础知识
java多线程的知识是java程序员都应该掌握的技能,目前我接触的项目上用的不多,花点时间熟悉熟悉. 一.基础知识 1.什么是进程? 进程是具有一定独立功能的正在运行过程中的程序,是操作系统进行资源分 ...
随机推荐
- 在vue.js 中使用animate.css库
main.js文件引入后,在vue文件里直接添加class animated bounceInUp
- Linux 环境下安装Mysql的步骤
一,以linux cent 6.9 安装mysql 5.6.39为例#下载安装包wget --no-check-certificate https://dev.mysql.com/get/Downlo ...
- Java中语法与C/CPP的区别
static不能在成员方法中定义,只能作为类变量定义.
- invalid context 0x0.
在展示图片或者做二维码的时候,若是宽或者高有一个为零的情况就会报错:CGBitmapContextCreateImage: invalid context 0x0. If you want to se ...
- linux下磁盘管理(du、df)命令使用
DF :disk free 磁盘可用量 DU: disk usage 磁盘使用 df:列出文件系统的整体磁盘使用量: df参数: -a:列出所有的文件系统,包括系统特有的/proc等文件系统 -k:以 ...
- Go爬去以太坊的价格数据
package main import ( "encoding/json" "errors" "fmt" "io/ioutil&q ...
- QTP自动化测试
原文链接:https://www.cnblogs.com/xiezhidong/p/6784684.html ♣Qtp是什么? ♣测试用例网站 ♦注册与登录 ♦测试脚本 ◊录制 ...
- python 启动时报错无法正常启动(0xc000007b)请单击“确定”关闭应用程序的解决办法
这是一个自己非常傻逼的问题,但是还是想记录下来 晚上安装python,不管是命令提示符中运行还是python直接打开,都提示报错 各种百度,各种查找排除以后,皆不能解决错误 最后发现:特么64位系统下 ...
- javascript最全最好的判断数组的方法
var arr = [1,2,3,1]; var arr2 = [{ abac : 1, abc : 2 }]; function isArrayFn(value){ if (typeof Array ...
- viewport定义,弹性布局,响应式布局及LESS和SASS框架应用
一,移动端宽度设置 viewport视图窗口,<meta name="viewport" content="width=device-width,initial-s ...