凯哥带你从零学大数据系列之Java篇---第十章 包装类和常用类(1)


**备注:**以上两种方式,都可以完成字符串类型到基本数据类型之间的转换。 如果希望直接转成基本数据类型, 推荐使用方式2; 如果希望转成包装类型, 推荐使用方式1。


**关于字符类型的特殊说明:**


字符串类型, 没有类似于上面的方式, 可以直接转成字符类型。 如果一个字符串, 要转成字符, 需要使用字符串的一个实例方法 `charAt()` 方法。 使用这个方法, 获取字符串中的指定下标位的字符。


**10.4. 常用类Math**


#### **10.4.1. 概念**


是一个数学类, 这个类中封装了很多用来做数学计算的方法。 当我们需要使用到数学计算的时候, 要能够想到这个类。 这个类中有很多封装好的数学公式, 而且, 都是静态方法, 方便调用。


#### **10.4.2. 常用静态常量**


![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWMzLnpoaW1nLmNvbS84MC92Mi0yNTExNmJlNTM2ZTdhYmU1MTUyODYxZTBiMjAzMzU0Nl83MjB3LnBuZw?x-oss-process=image/format,png)


**10.4.3. 常用方法**


![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9waWMyLnpoaW1nLmNvbS84MC92Mi1mNzlmYWQ4ZmZkZjllZTc0MmI3MGYzNTU4NDVmN2QwZF83MjB3LmpwZw?x-oss-process=image/format,png)


**10.4.4. 示例代码**



/**

  • @Description Math类
    */
    public class MathUsage {
    public static void main(String[] args) {
    System.out.println(Math.abs(-3)); // 计算一个数字的绝对值
    System.out.println(Math.max(10, 20)); // 计算两个数字的最大值
    System.out.println(Math.min(10, 20)); // 计算两个数字的最小值

     System.out.println(Math.round(3.14));   // 四舍五入
     System.out.println(Math.floor(3.14));   // 向下取整,找到比这个数字小的第一个整数
     System.out.println(Math.ceil(3.14));    // 向上取整,找到比这个数字大的第一个整数
    
     System.out.println(Math.pow(2, 3));     // 计算2的3次方
     System.out.println(Math.sqrt(4));       // 计算4开平方
     // 需求:计算27的立方根
     System.out.println(Math.pow(27, 1/3.0));
     
     System.out.println(Math.random());              	// [0, 1)
     System.out.println((int)(Math.random() * 100)); 	// [0, 100) 整型随机数
    

    }
    }


**10.5. 常用类Random**


#### **10.5.1. 概念**


是一个专门负责产生随机数的类。 在Java中, Random类在 java.util 包中。 在使用之前, 需要先导包。



> 
>  其实, 随机数的产生, 是有一个固定的随机数算法的。 代入一个随机数种子, 能够生成一个随机数列。 但是由于算法是固定的, 因此会有一个“BUG”: 如果随机数的种子相同, 则生成的随机数列也完全相同。 
> 


#### **10.5.2. 常用方法**


![](https://img-blog.csdnimg.cn/43064e0bf2424a70a677f701e96a137b.png)


**10.5.3. 示例代码**



/**

  • @Description Math类
    */
    public class RandomUsage {
    public static void main(String[] args) {
    // 1. 实例化一个Random对象
    Random random = new Random(1);
    // 2. 产生随机数
    for (int i = 0; i < 20; i++) {
    // 产生 [0, 50) 范围内的随机数
    System.out.print(random.nextInt(50) + ", ");
    }
    }
    }

**10.6. 常用类BigInteger、BigDecimal**


#### **10.6.1. 概念**


这两个类,都是用来表示数字的类。 BigInteger表示整型数字, BigDecimal表示浮点型数字。 这两个类, 可以用来描述非常、非常、非常大的数字。 例如整数, long是最大的表示范围, 但是即便是long型, 也有它表示不了的情况。 BigInteger就是可以表示任意大小的数字。


**BigInteger:** 表示整型数字, 不限范围。


**BigDecimal:**表示浮点型数字,不限范围, 不限小数点后面的位数。


**10.6.2. 常用方法**


![](https://img-blog.csdnimg.cn/e5ba79215a324cb08d2c24d363b8dfe5.png)


**10.6.3. 示例代码**



/**

  • @Description BigInteger、BigDecimal
    */
    public class BigIntegerAndBigDecimal {
    public static void main(String[] args) {
    // 1. BigInteger类
    BigInteger n1 = new BigInteger(“12347328461827364812736481726348712643872634871263293413648273684716238746”);
    BigInteger n2 = new BigInteger(“38242374871238471987349872317623864716237591263875628764381239847198738763”);

     // 2. 四则运算
     BigInteger add = n1.add(n2);                    // 加法
     System.out.println(add);
    
     BigInteger subtract = n1.subtract(n2);          // 减法
     System.out.println(subtract);
    
     BigInteger multiply = n1.multiply(n2);          // 乘法
     System.out.println(multiply);
    
     BigInteger divide = n1.divide(n2);              // 除法
     System.out.println(divide);
    
     // 用n1除n2, 保留商和余数
     // 将商存到结果数组的第0位
     // 将余数存到结果数组的第1位
     BigInteger[] bigIntegers = n1.divideAndRemainder(n2);
     System.out.println(bigIntegers[0]);     // 输出商
     System.out.println(bigIntegers[1]);     // 输出余数
    
     long ret = bigIntegers[0].longValue();
    

    }
    }


**10.7. 常用类Date**


#### **10.7.1. 概念**


是一个用来描述时间、日期的类。 **在 java.util 包中!!!**


#### **10.7.2. 常用方法**


![](https://img-blog.csdnimg.cn/fd3ded1c2d53410cafe5257feb4ee7da.png)


#### **10.7.3. 示例代码**



/*

  • @Description Date日期类
    */
    public class DateUsage {
    public static void main(String[] args) {
    // 1. 实例化一个Date对象
    Date date = new Date();

     // 2. 获取一个日期的对应的时间戳 (从 1970年 1月 1日 0时开始的毫秒数)
     long timestamp = date.getTime();
    
     // 3. 实例化一个Date对象
     Date date1 = new Date(1586587414273L);
     System.out.println(date1);
    
     // 4. 通过设置一个时间戳,修改这个对象描述的时间
     date1.setTime(1586587414273L);
    
     System.out.println(date.equals(date1));     // 判断两个时间是否相同
     System.out.println(date.before(date1));     // 判断一个时间是否在另一个时间之前
     System.out.println(date.after(date1));      // 判断一个时间是否在另一个时间之后
    

    }
    }


**10.8. 常用类SimpleDateFormat**


#### **10.8.1. 概念**


是一个用来格式化时间的类。 使用这个类, 一般有两种操作:


* 将一个 Date 对象, 转成指定格式的时间字符串。
* 将一个指定格式的时间字符串, 转成 Date 对象。


#### **10.8.2. 常用时间格式**


在时间格式中, 有几个常见的时间占位符。


![](https://img-blog.csdnimg.cn/5bbfcc474787471ebef1b4f1a1a438a1.png)


#### **10.8.3. 常用方法**


![](https://img-blog.csdnimg.cn/ca455ba7425e4b8e8d62f566def7286b.png)



> 
> **parse** 方法 
>    
>  会抛出一个编译时的异常。 在使用的时候, 目前, 直接使用一键修复(alt + Enter), 用 try-catch 包围即可。 
>    
>  将一个字符串, 按照指定的格式进行解析。 如果字符串中的时间格式, 和对象实例化的时候给定的格式不同, 此时会出现异常。 
> 


#### **10.8.4. 示例代码**



import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**

  • @Description
    */
    public class SimpleDateFormatUsage {
    public static void main(String[] args) {
    // format();
    // parse();
    System.out.println(getDeltaDays(“2002-09-28”, “2020-04-11”));
    }

    // 将一个时间对象,转成指定格式的字符串
    private static void format() {
    // 1. 获取系统当前时间
    Date now = new Date();
    // 2. 指定一个时间格式,例如: 2020年4月11日 18:09:49
    String format = “yyyy年M月d日 HH:mm:ss”;
    // 3. 通过一个时间格式,实例化一个SimpleDateFormat对象
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    // 4. 转换成指定格式的字符串
    String str = sdf.format(now);
    System.out.println(str);
    }

    // 将一个指定格式的字符串,转成时间对象
    private static void parse() {
    // 1. 通过一个时间格式,实例化一个对象
    SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
    // 2. 将一个指定格式的字符串,解析成Date对象
    try {
    Date date = sdf.parse(“2019-09-27 22:18:05”);
    System.out.println(date);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    }

    // 小练习:设计方法,计算两个日期之间相差多少天
    private static int getDeltaDays(String from, String to) {
    // 1. 限定一个时间格式
    SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
    // 2. 将两个时间转成Date对象
    try {
    Date fromDate = sdf.parse(from);
    Date toDate = sdf.parse(to);

         // 3. 计算相差多少天
         long days = (toDate.getTime() - fromDate.getTime()) / 1000 / 60 / 60 / 24;
         return (int)Math.abs(days);
     } catch (ParseException e) {
         e.printStackTrace();
     }
    
     return 0;
    

    }
    }


**10.9. 常用类Calendar**


#### **10.9.1. 概念**


是一个用来描述时间、日期的类。 比Date的功能更加完善。 在Date类中, 有很方法都已经被废弃了。 用Caleendar类中的某些方法来替代。


**10.9.2. 常用方法**


![](https://img-blog.csdnimg.cn/523dd8f991ef4a76bb5639d3ee11992d.png)


#### **10.9.3. 示例代码**



import java.util.Calendar;
import java.util.Date;

/**

  • @Description Calendar类
    */
    public class CalendarUsage {
    public static void main(String[] args) {
    // 1. Calendar是一个抽象类,无法直接进行实例化
    Calendar calendar = Calendar.getInstance();

     // 2. 通过指定的字段,获取对应的值。
     //    在 Calendar 类中,已经封装好了若干个静态常量,来表示不同的字段。
     System.out.println(calendar.get(Calendar.YEAR));
     System.out.println(calendar.get(Calendar.MONTH));           // 在Calendar中,月份是从0开始的。
     System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
     System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
     System.out.println(calendar.get(Calendar.MINUTE));
     System.out.println(calendar.get(Calendar.SECOND));
    
     // 3. 通过指定的字段,设置对应的值
     calendar.set(Calendar.YEAR, 2022);
     calendar.set(Calendar.DAY_OF_MONTH, 29);
    
     // 4. 同时设置年月日
     calendar.set(2021, Calendar.SEPTEMBER, 7);
     //    同时设置年月日时分
     calendar.set(2022, Calendar.NOVEMBER, 12, 23, 59);
     //    同时设置年月日时分秒
     calendar.set(2022, Calendar.NOVEMBER, 12, 23, 59, 59);
    
     // 5. 获取日期(Date对象)
     Date date = calendar.getTime();
     // 6. 设置日期(Date对象)
     calendar.setTime(new Date());
     // 7. 获取时间戳
     long timestamp = calendar.getTimeInMillis();
     // 8. 设置时间戳
     calendar.setTimeInMillis(timestamp);
    
     // 9. 判断一个日期是否在另外一个日期之前
     //    类似的方法还有 equals、after
     calendar.before(Calendar.getInstance());
    
     // 10. 对一个日期进行加法操作
     calendar.add(Calendar.MONTH, 3);
     calendar.add(Calendar.DAY_OF_MONTH, 21);
    
     System.out.println(calendar);
    

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值