前言:

  对于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. JS判断

    /***************************************************************** 表单校验工具类 (linjq) ***************** ...

  2. java变量的自动提升与强制转换

    所有的byte型.short型和char的值将被提升到int型 一个字节可以提升为4个字节 4个字节不可以降为一个字节 强制转换4个字节转换为一个字节 [丢失精度] byte b = 3; b = ( ...

  3. C#经典面试题及答案

    1.请你说说.net 中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类多.结构不能声明默认的的构造函数,为结构的副本是编译器创建和销毁的,所以不需要默认的构造函数和析构函数,结构 ...

  4. Alienware R8外星人台式机安装双系统(WIN10+Ubuntu)的总结

    新电脑终于到了,然而外星人的系统比较特殊,很多东西和别的品牌(包括DELL)不一样, 同时NVIDIA显卡也带来了很多问题.重装了十几遍,查阅了上百篇文章后之后终于搞定了双系统. 其实核心问题很傻,就 ...

  5. JavaScript中为什么使用立即执行函数来封装模块?

    最近在学习JavaScript基础,在学习到面向对象编程时,学习到在JavaScript中实现模块化的方法,其中一个重要的点是如何封装私有变量. 实现封装私有变量的方法主要是: 使用构造函数 func ...

  6. 数据t转换

    #!/usr/bin/perl use strict; use warnings;    open my $fh,"a.out"; open OUT,">a_t.o ...

  7. 论文笔记——An online EEG-based brain-computer interface for controlling hand grasp using an adaptive probabilistic neural network(10年被引用66次)

    题目:利用自适应概率网络设计一种在线脑机接口楼方法控制手部抓握 概要:这篇文章提出了一种新的脑机接口方法,控制手部,系列手部抓握动作和张开在虚拟现实环境中.这篇文章希望在现实生活中利用脑机接口技术控制 ...

  8. 12集合(3)-----Map

    一.总体分类 Collection(包括方法add,remove,contains,clear,size) List(接口) LinkedList ArrayList Vector---Stack 2 ...

  9. Python学习笔记-chapter1

    我自幼时自觉聪慧,但实缺恒力,遂二十余岁却一事无成,亦无一技傍身,实属惭愧. 少时便仰慕于新兴世界之IT技术,然因惰性,未曾一日习学. 今陷此困境,聊以度日,反无端生出些许时间,便志要潜心研学,不求能 ...

  10. windows10环境下VMware14中Ubuntu16.04解决如何上网问题

    进入控制面板,网络和Internet,网络连接 点击以太网,查看详细信息 点击属性 --> 共享,允许其他网络-->选择VMnet1 点开虚拟机编辑选项 ,选择 VMNET1 仅主机,其他 ...