前言:

  对于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基础知识的更多相关文章

  1. Java代码审计之不安全的Java代码

    Java代码审计之不安全的Java代码 ​ 在打靶场的同时,需要想一下如果你是开发人员你会怎样去防御这种漏洞,而作为攻击方你又怎么去绕过开发人员的防御. 环境搭建 https://github.com ...

  2. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...

  3. Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识

    JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...

  4. java 虹软ArcFace 2.0,java SDK使用-进行人脸检测

    虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.html虹软ArcFace功能简介 人脸检测人脸跟踪人脸属性检测(性别.年龄)人脸三维角度检测人脸对比 ...

  5. java 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对

    java人脸识别 虹软ArcFace 2.0,java SDK使用.人脸识别-抽取人脸特征并做比对 虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.ht ...

  6. Java并发和多线程(一)基础知识

    1.java线程状态 Java中的线程可以处于下列状态之一: NEW: 至今尚未启动的线程处于这种状态. RUNNABLE: 正在 Java 虚拟机中执行的线程处于这种状态. BLOCKED: 受阻塞 ...

  7. Java 网络编程(一) 网络基础知识

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951826.html 网络基础知识 网络编程的目的:直接或间接地通过网络协议与其他计算机 ...

  8. Java笔记(十四) 并发基础知识

    并发基础知识 一.线程的基本概念 线程表示一条单独的执行流,它有自己的程序计数器,有自己的栈. 1.创建线程 1)继承Thread Java中java.lang.Thread这个类表示线程,一个类可以 ...

  9. java多线程并发(一)-- 相关基础知识

    java多线程的知识是java程序员都应该掌握的技能,目前我接触的项目上用的不多,花点时间熟悉熟悉. 一.基础知识 1.什么是进程? 进程是具有一定独立功能的正在运行过程中的程序,是操作系统进行资源分 ...

随机推荐

  1. HttpClient 通过代理访问验证服务器

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  2. 终于开始我的java旅程了!

    首先今天先装了jdk1.7 ,找了半天,因为官网是都是让你装1.8的最新版本,地址如下: 所有jdk的历史版本: http://www.oracle.com/technetwork/java/java ...

  3. AutomaticReferenceCounting.html#runtime-support

    https://clang.llvm.org/docs/AutomaticReferenceCounting.html#runtime-support Runtime support This sec ...

  4. mybatis 源码分析二

    1.SqlSession下的四大对象 Executor.StatementHandler.ParameterHandler.ResultSetHandler StatementHandler的作用是使 ...

  5. echarts 滚动条 缩放

    // 初始化是否需要展示滚动条,与初始显示的数据数(总数据数的百分比) var isShowScroll = false;// 是否显示滚动条,默认false不显示 var dataZoom_end; ...

  6. Golang微服务:micro实践

    micro 使用 工具安装 使用protoc生成代码,依赖两个插件:protoc-gen-go.protoc-gen-micro micro 工具 go get -u github.com/micro ...

  7. 遇到短信轰炸,别人换ip调你的短信接口怎么办

    前端开发者很容易暴露自己的请求地址和参数,我们都知道,一个h5页面,按 F12 是可以看到页面的源码的,所以经常很多人会利用这一点恶意调取别人的接口. 我们公司出现了好多次短信接口被大量调用,导致一天 ...

  8. linux btrfs文件系统管理与应用

    btrfs文件系统管理与应用 1.btrfs文件系统 基本介绍 btrfs文件系统在CentOS7.x上属于技术预览版 btrfs文件系统英文名:B-tree  FileSystem或者Butter ...

  9. java 删除多层文件夹

    /** * 因为不小心,写了一个死循环,在电脑里创建的了n多层空文件夹 * 并且手动最外层删除不掉. * 所以用写了本代码,从里向外的进行删除操作. * @author Singularity * @ ...

  10. 使用[].forEach.call()方法的写拖拽排序。

    ---恢复内容开始--- }); });}要引用两个插件: <script src="./jquery.1.12.4.min.js"></script> & ...