赞
踩
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
我们在解决实际问题时,除了经常需要对数字、日期、时间进行操作之外,有时候还需要对系统进行设置,另外还需要生成一些随机数字。
那么我们又该如何实现这些需求呢?接下来我们会带着大家来学习一下Java中的另几个常用类,包括System、Random、SecureRandom等。
全文大约 【4000】字, 不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考…
System
类位于java.lang包中,代表着当前Java程序的运行平台,系统级的很多属性和控制方法都放在该类中。
由于该类的构造方法是private
的,所以我们无法直接通过new的方式来创建该类的对象。System类提供了一些静态变量和静态方法,允许我们直接通过System类来调用这些类变量和类方法。在System类中,虽然有挺多的静态变量和方法,但对我们来说,只需记住一些常用的即可。
System类中常用的静态变量有如下几个:
● PrintStream out:标准输出流;
● InputStream in:标准输入流;
● PrintStream err:标准错误输出流;
System类中常用的静态方法有如下几个:
● currentTimeMillis():返回当前的计算机时间;
● exit():终止当前正在运行的 Java 虚拟机;
● gc():请求系统进行垃圾回收,完成内存中的垃圾清除;
● getProperty():获得系统中属性名为 key 的属性对应的值;
● arraycopy():进行数组复制,即从指定源数组中复制一个数组。
接下来我们就把以上这些静态变量和静态方法的基本使用,给大家简要介绍一下。
首先我们来看看System类中几个常用静态变量该如何使用。
out静态变量属于PrintStream
类型,是System类中的标准输出流,用于接收要输出的数据。out中的数据内容通常会输出到显示器,或用户指定的某个输出目标。其实对我们来说,out并不陌生,可以说在我们之前的案例中经常使用,尤其是out中的print方法,最近我们一直在使用。但我们要搞清楚,print属于PrintStream流的方法,并不是 System类的方法。
//输出字符串不换行
System.out.print("Hello World");
//输出字符串并换行
System.out.println("Hello World");
in静态变量属于InputStream
类型,是System类中的标准输入流,用于接收输入的数据。in通常是对应着键盘的输入,或是用户指定的另一个输入源。我们在之前的案例中,也简单使用过in常量,但它没有out用的那么频繁。
上面的这个案例,System.in.read()
语句可以读入一个字符,read()方法是InputStream
类拥有的方法。变量c必须用 int 类型,而不能用char类型,否则可能会丢失精度而导致编译失败。另外上面的程序,如果输入的是汉字将不能正常输出。如果我们想正常输出汉字,需要把 System.in声明为 InputStreamReader类型的实例。比如
InputStreamReader in=new InputStreamReader(System.in,"GB2312")
,此时就可以读入完整的Unicode码,才能显示正常的汉字。
err静态变量属于PrintStream
类型,是System类中的标准错误输出流,用于接收要输出的数据。err中的数据内容通常会输出到显示器,或用户指定的某个输出目标。其用法与System.out一样,只是不需要我们提供参数就可以输出错误信息,也可以用来输出用户指定的其他信息,包括一些变量的值。
//err的用法
System.err.println();
//输出指定的内容
System.err.println("错误信息");
以上这几个静态变量都很简单,大家记住其用法即可。
接下来再跟大家说说System类中的几个常用静态方法的用法。
currentTimeMillis()
方法用于返回当前计算机的时间戳,时间格式是当前计算机的时间与GMT时间(格林尼治时间),自1970年 1月 1日 0时 0分 0秒以来所经历的毫秒数,我们一般用它来测试程序的执行时间。通过调用currentTimeMillis()
方法,我们可以获得一个长整型的数字,该数字是以差值表达的当前时间。其实currentTimeMillis()
方法我们在之前的文章中已经详细讲解过,这里就不再细说了。
long time = System.currentTimeMillis();
exit()方法用于终止当前正在运行的Java虚拟机,也就是可以用于退出程序。该方法需要一个整型的status参数,0表示正常退出,非零表示异常退出。我们使用该方法,可以在图形界面编程中实现程序的退出功能。该方法的用法如下:
public class Demo01 {
public static void main(String[] args) {
//exit的用法
try {
//睡眠5秒
Thread.sleep(5000);
//5秒后正常退出程序
System.exit(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
gc()方法用于请求对系统主动进行垃圾回收,完成内存中的垃圾清除。但系统是否会立刻回收这些垃圾,却取决于系统中垃圾回收算法的具体实现,以及系统执行时的具体情况。一般我们在开发时不会主动调用该方法,有时候调用了也未必有效果。
//主动进行垃圾回收
System.gc();
getProperty()
方法可以根据指定的key,获得系统中对应的某些属性值,系统中常见的属性名及其属性如下表所示:
public class Demo03 { public static void main(String[] args) { //getProperty的用法 //获取java版本 String version = System.getProperty("java.version"); System.out.println("Java版本:"+version); //获取java安装目录 String home = System.getProperty("java.home"); System.out.println("Java目录:"+home); //系统名称 String name = System.getProperty("os.name"); System.out.println("操作系统名称:"+name); //用户名称 String user = System.getProperty("user.name"); System.out.println("当前用户名称:"+user); } }
arraycopy()
方法用于数组复制,可以从指定的源数组中复制出一个数组,复制会从指定的位置开始,到目标数组的指定位置结束。arraycopy()
方法一般有5个参数,其中,src表示源数组,srcPos表示从源数组中复制的起始位置,dest表示目标数组,destPos表示要复制到的目标数组的起始位置,length表示复制的个数。
public class Demo04 { public static void main(String[] args) { //arraycopy的用法 //源数组 char[] srcArray = {'A','B','C','D'}; //目标数组 char[] destArray = {'1','2','3','4','5'}; //进行数组复制 System.arraycopy(srcArray,1,destArray,1,2); System.out.println("遍历源数组:"); for(int i = 0;i < srcArray.length;i++) { System.out.println("源数组中的每个元素:"+srcArray[i]); } System.out.println("遍历目标数组:"); for(int j = 0;j < destArray.length;j++) { System.out.println("新数组中的每个元素:"+destArray[j]); } } }
我们在开发时,除了操作一些固定的数字之外,有时候还要操作一些不确定的随机数。Java中给我们提供了两种生成指定范围内随机数的方法:
● 使用Random类:伪随机数类,用来创建伪随机数。所谓伪随机数,就是指我们只要给定一个初始的种子,产生的随机数序列是完全一样的;
● 调用Math类的random()方法:Math.random()内部其实是在调用Random类,它也是伪随机数,但我们无法指定种子。
Random类为我们提供了比较丰富的随机数生成方法,比如nextInt()、nextLong()、nextFloat()、nextDouble()
等方法。这些方法可以产生boolean、int、long、float、byte
数组以及double类型的随机数,这是它比random()方法更好的地方,random()方法只能产生0~1之间的double类型随机数。
而且Random类提供的所有方法,生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的概率是均等的。Random类位于java.util包中,该类有如下两个常用的构造方法:
● Random():默认利用当前系统的时间戳作为种子数,使用该种子数构造出Random对象。
● Random(long seed):使用单个的long类型参数,创建一个新的随机数生成器。
在Random类中,有如下一些常用的API方法供我们操作随机数:
方法 | 说明 |
---|---|
boolean nextBoolean() | 生成一个随机的 boolean 值,生成 true 和 false 的值概率相等 |
double nextDouble() | 生成一个随机的 double 值,数值介于 [0,1.0),含 0 而不包含 1.0 |
int nextlnt() | 生成一个随机的 int 值,该值介于 int 的区间,也就是 -231~231-1。如果需要生成指定区间的 int 值,则需要进行一定的数学变换 |
int nextlnt(int n) | 生成一个随机的 int 值,该值介于 [0,n),包含 0 而不包含 n。如果想生成指定区间的 int 值,也需要进行一定的数学变换 |
void setSeed(long seed) | 重新设置 Random 对象中的种子数。设置完种子数以后的 Random 对象和相同种子数使用 new 关键字创建出的 Random 对象相同 |
long nextLong() | 返回一个随机长整型数字 |
boolean nextBoolean() | 返回一个随机布尔型值 |
float nextFloat() | 返回一个随机浮点型数字 |
double nextDouble() | 返回一个随机双精度值 |
接下来我们通过一个案例,来给大家讲解一下上述方法该如何使用。
import java.util.Random; public class Demo07 { public static void main(String[] args) { // 随机类生成随机数 Random r = new Random(); // 生成[0,1.0]区间的小数 double d1 = r.nextDouble(); System.out.println("d1="+d1); 本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。 最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。 最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。  **需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)** ### 学习路线图 其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。 相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。  #### 网络安全工具箱 当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份**我自己整理的网络安全入门工具以及使用教程和实战。**  #### 项目实战 最后就是项目实战,这里带来的是**SRC资料&HW资料**,毕竟实战是检验真理的唯一标准嘛~  #### 面试题 归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过! **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!** 战是检验真理的唯一标准嘛~  #### 面试题 归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过! **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。