Java学习笔记(十一)——常用类

一、包装类

(一)包装类和基本数据类型的转换

​编辑

(二)包装类型和String类型的相互转换

(三)Integer类和Character类的常用方法

二、String

(一)创建String对象的两种方式

(二)字符串的特性

(三)String类的常见方法

三、StringBuffer

(一)String VS StringBuffer

(二)StringBuffer的构造器

(三)String和StringBuffer相互转换

(四)StringBuffer类常见方法

四、StringBuilder

 String、StringBuffer和StringBuilder的比较

五、Math

六、Date、Calendar、LocalDate

(一)第一代日期类

 (二)第二代日期类

(三)第三代日期类

七、System

八、Arrays

九、BigInteger、BigDecimal

一、包装类

包装类的分类

1、针对八种基本数据类型,定义相应的引用类型——包装类

2、有了类的特点,就可以调用类中的方法

(一)包装类和基本数据类型的转换

以int和Integer为例

1、jdk5前的手动装箱和拆箱方式,装箱:基本数据类型->包装类型   拆箱:反之

2、jdk5以后(含jdk5)的自动装箱和拆箱方式

3、自动装箱底层调用的是valueOf方法,比如Integer.valueOf()

public class Integer01 {public static void main(String[] args) {// 手动装箱int n1 = 100;// 方法1Integer integer = new Integer(n1);// 方法2Integer integer1 = Integer.valueOf(n1);// 手动拆箱int i = integer.intValue();// 自动装箱和自动拆箱int n2 = 200;Integer integer2 = n2; // 底层使用的是Integer.valueOf(n2)int n3 = integer2; // 底层使用的是integer2.intValue()}
}

经典面试题:

(二)包装类型和String类型的相互转换

public class WrapperVsString {public static void main(String[] args) {// 包装类(Integer)->StringInteger i = 100; // 自动装箱// 方式一String str1 = i + "";// 方式二String str2 = i.toString();// 方式三String str3 = String.valueOf(i);// String->包装类(Integer)// 方式一String str = "12345";Integer i2 = Integer.parseInt(str); // 使用到自动装箱// 方式二Integer i3 = new Integer(str); // 构造器}
}

(三)Integer类和Character类的常用方法

二、String

1、String对象用于保存字符串,也就是一组字符序列

2、字符串常量对象是用双引号括起的字符序列。例如:"你好"、"12.97"、"boy"等

3、字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节

4、String类有很多构造方法

较常用的构造方法:

String s1 = new String();

String s2 = new String(String original);

String s3 = new String(char[] a);

String s4 = new String(char[] a, int startIndex, int count);

5、String类是final类,不能被其他类继承

6、String有属性private final char value[];用于存放字符串内容,value是一个final类型,一旦赋值就不可以修改(指地址不能修改,但是单个字符内容是可以变化的)

(一)创建String对象的两种方式

方式一:直接赋值   String s = "hsp";

方式二:调用构造器 String s2 = new String("hsp");

1、方式一直接赋值:先从常量池查看是否有"hsp"数据空间,如果有就直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址。

2、方式二调用构造器:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间。如果常量池没有"hsp",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。

(二)字符串的特性

1、String是一个final类,代表不可变的字符序列

2、字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的。

(三)String类的常见方法

String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低。因此,java设计者还提供了StringBuilder和StringBuffer来增强String的功能,并提高效率。

比如:

String s = new String("");

for(int i = 0; i < 80000; i++) {

        s += "hello";

}

常用方法:

String str = "hello";

// str[0] ×

// str.charAt(0) -> h  √

三、StringBuffer

1、java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删

2、很多方法与String相同,但StringBuffer是可变长度的。

3、StringBuffer是一个容器。

1、StringBuffer是一个final类,不能被继承

2、在父类AbstractStringBuilder中,有属性char[] value,没有final修饰,该value数组存放字符串内容,是存放在堆中的。

(一)String VS StringBuffer

1、String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低。(private final char value[];)

2、StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址(即不是每次创建新对象,在空间不够时扩展空间时才更新地址)。效率较高。(char[] value;存放在堆中)

(二)StringBuffer的构造器

public class StringBuffer01 {public static void main(String[] args) {// 创建一个大小为16字符的char[],用于存放字符内容StringBuffer sb = new StringBuffer();// 通过构造器指定char[]大小StringBuffer sb2 = new StringBuffer(100);// 通过给一个String创建StringBuffer,char[]大小就是str.length()+16StringBuffer sb3 = new StringBuffer("hello");}
}

(三)String和StringBuffer相互转换

public class StringBuffer02 {public static void main(String[] args) {// String -> StringBufferString str = "hello";// 方式一:使用构造器// 返回的才是StringBuffer对象,对str本身没有影响StringBuffer sb = new StringBuffer(str);// 方式二:使用append方法StringBuffer sb2 = new StringBuffer();sb2 = sb2.append(str);// StringBuffer -> StringStringBuffer sb3 = new StringBuffer("world");// 方式一:使用构造器String s = new String(sb3);// 方式二:使用StringBuffer提供的toString方法String s2 = sb3.toString();}
}

(四)StringBuffer类常见方法

练习:将小数点前面每三位用逗号隔开,比如:116668259.2563->116,668,259.2563 

public class StringBufferExercise {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String price = scanner.next();StringBuffer price_sb = new StringBuffer(price);for (int i = price_sb.lastIndexOf(".")-3; i > 0; i-=3) {price_sb = price_sb.insert(i, ",");}System.out.println(price_sb);}
}

四、StringBuilder

1、一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全的)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。

2、在StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。

3、StringBuilder和StringBuffer均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样。

 String、StringBuffer和StringBuilder的比较

1、StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样

2、String:不可变字符序列,效率低,但复用率高

3、StringBuffer:可变字符序列、效率较高(增删)、线程安全

4、StringBuilder:可变字符序列、效率最高、线程不安全

5、String使用注意说明:

String s = "a";

s += "b";

实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串"ab"。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能。(结论:如果对String做大量修改,不要使用String)

效率测试:

public class StringVsStringBufferVsStringBuilder {public static void main(String[] args) {String text = "";long startTime = 0L;long endTime = 0L;StringBuffer buffer = new StringBuffer("");StringBuilder builder = new StringBuilder("");startTime = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {buffer.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuffer的执行时间:" + (endTime - startTime));startTime = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {builder.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuilder的执行时间:" + (endTime - startTime));startTime = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {text = text + i;}endTime = System.currentTimeMillis();System.out.println("String的执行时间:" + (endTime - startTime));}
}

使用原则:

1、如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder

2、如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder

3、如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer

4、如果字符串很少修改,被多个对象引用,使用String,比如配置信息等

五、Math

Math类包含用于执行基本数学运算的方法,如初等函数、对数、平方根和三角函数

Math的常用方法(静态方法)

public class MathMethod {public static void main(String[] args) {// 获取a-b之间的一个随机整数,a=2,b=7// random返回的是0 <= x < 1之间的一个随机小数int a = 2;int b = 7;for (int i = 0; i < 10; i++) {// (Math.random()*(b-a)返回的数范围在0~b-aint num = (int)(a + Math.random()*(b-a+1));System.out.println(num);}}
}

六、Date、Calendar、LocalDate

(一)第一代日期类

1、Date:精确到毫秒,代表特定的瞬间

2、SimpleDateFormat:格式和解析日期的类,允许进行格式化(日期-->文本)、解析(文本-->日期)的规范化

public class Date01 {public static void main(String[] args) throws ParseException {// 这里的Date类是在java.utils包// 默认输出的日期格式是国外的方式,因此通常需要进行格式转换Date date1 = new Date(); // 获取当前系统的时间System.out.println("当前日期=" + date1);Date date2 = new Date(9234567); // 通过毫秒数得到时间System.out.println(date2);System.out.println(date2.getTime());// 格式化日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");String formatDate1 = sdf.format(date1);System.out.println("格式化后的当前日期=" + formatDate1);// 可以把一个格式化的String转成对应的Date// 在把String-->Date,使用的sdf格式需要和给的String格式一样,否则会抛出转换异常String s = "1996年01月01日 10:20:30 星期一";Date parse = sdf.parse(s);System.out.println("parse=" + parse); // 输出仍然是国外的格式System.out.println("parse=" + sdf.format(parse));}
}

 (二)第二代日期类

1、主要就是Calendar类(日历),是一个抽象类,并且构造器是私有化的,可以通过getInstance()来获取实例

2、Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法

public class Calendar_ {public static void main(String[] args) {Calendar c = Calendar.getInstance(); // 创建日历类对象// 获取日历对象的某个日历字段System.out.println("年:" + c.get(Calendar.YEAR));System.out.println("月:" + (c.get(Calendar.MONTH)+1)); // Calendar返回月时是按照0开始编号System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));// 如果需要按照24小时进制获取时间,Calendar.HOUR-->Calendar.HOUR_OF_DAYSystem.out.println("小时:" + c.get(Calendar.HOUR)); System.out.println("分钟:" + c.get(Calendar.MINUTE));System.out.println("秒:" + c.get(Calendar.SECOND));// Calendar没有专门的格式化方法,所以需要自己来组合显示System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1) + "月" + c.get(Calendar.DAY_OF_MONTH) + "日");}
}

(三)第三代日期类

前面两代日期类不足分析:

JDK1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了。而Calendar也存在问题是:

1、可变性:像日期和时间这样的类应该是不可变的

2、偏移性:Date中的年份是从1900开始的,而月份都从0开始

3、格式化:格式化只对Date有用,Calendar则不行

4、此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)

第三代日期类常见方法:

1、LocalDate(日期/年月日)、LocalTime(时间/时分秒)、LocalDateTime(日期时间/年月日时分秒) JDK8加入

2、DateTimeFormatter格式日期类

public class LocalDate_ {public static void main(String[] args) {// 使用now()返回表示当前日期时间的对象LocalDateTime ldt = LocalDateTime.now();System.out.println(ldt);System.out.println("年:" + ldt.getYear());System.out.println("月:" + ldt.getMonth());System.out.println("月:" + ldt.getMonthValue());System.out.println("日:" + ldt.getDayOfMonth());System.out.println("小时:" + ldt.getHour());System.out.println("分钟:" + ldt.getMinute());System.out.println("秒:" + ldt.getSecond());// 使用DateTimeFormatter格式化对象DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");String format = dtf.format(ldt);System.out.println("格式化的日期=" + format);}
}

3、Instant时间戳

类似于Date,提供了一系列和Date类转换的方式

public class Instant_ {public static void main(String[] args) {Instant now = Instant.now();System.out.println(now);// Instant --> DateDate date = Date.from(now);// Date --> InstantInstant instant = date.toInstant();}
}

4、第三代日期更多方法:

LocalDateTime类

MonthDay类:检查重复事件

是否闰年

增加日期的某个部分

使用plus方法测试增加时间的某个部分

使用minus方法测试查看一年前和一年后的日期

// 提供plus和minus方法对当前时间进行加减LocalDateTime ldt2 = LocalDateTime.now().plusDays(890);System.out.println("890天后=" + dtf.format(ldt2));LocalDateTime ldt3 = LocalDateTime.now().minusMinutes(3456);System.out.println("3456分钟前=" + dtf.format(ldt3));

七、System

1、exit:退出当前程序

2、arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组

3、currentTimeMillens:返回当前时间距离1970-01-01的毫秒数

4、gc:运行垃圾回收机制

public class System_ {public static void main(String[] args) {
//        System.out.println("ok1");
//        // exit(0)表示程序退出,0表示一个状态,正常的状态
//        System.exit(0);
//        System.out.println("ok2");// System.arraycopyint[] src = {1, 2, 3};int[] dest = new int[3]; // 当前是{0,0,0}System.arraycopy(src, 0, dest, 0, src.length);System.out.println(Arrays.toString(src));System.out.println(Arrays.toString(dest));// System.currentTimeMillisSystem.out.println(System.currentTimeMillis());}
}

八、Arrays

Arrays里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索)

1、toString返回数组的字符串形式

2、sort排序(自然排序和定制排序)

public class ArraysMethod01 {public static void main(String[] args) {Integer[] integers = {1, 20, 90};// 1、直接使用Arrays.toString方法显示数组信息System.out.println(Arrays.toString(integers));// 2、sort方法排序// (1)默认排序Integer[] arr1 = {1, -1, 7, 0, 89};Arrays.sort(arr1);System.out.println(Arrays.toString(arr1));// (2)定制排序// sort方法是重载的,也可以通过传入一个接口Comparator实现定制排序// 两个参数:排序的数组arr2,实现了Comparator接口的匿名内部类Integer[] arr2 = {1, -1, 7, 0, 89};Arrays.sort(arr2, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {Integer i1 = (Integer)o1;Integer i2 = (Integer)o2;return i2 - i1;}});System.out.println(Arrays.toString(arr2));}
}

对定制排序的深入理解:

public class ArraysSortCustom {public static void main(String[] args) {int[] arr1 = {1, -1, 8, 0, 20};bubble01(arr1);System.out.println(Arrays.toString(arr1));int[] arr2 = {1, -1, 8, 0, 20};bubble02(arr2, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {Integer i1 = (Integer)o1;Integer i2 = (Integer)o2;return i2 - i1;}});System.out.println(Arrays.toString(arr2));}//普通的冒泡排序public static void bubble01(int[] arr) {int temp = 0;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length-1-i; j++) {if(arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}//结合冒泡排序+定制排序public static void bubble02(int[] arr, Comparator c) {int temp = 0;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length-1-i; j++) {// 数组排序由c.compare(arr[j], arr[j+1])返回的值决定if(c.compare(arr[j], arr[j+1]) > 0){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}
}

3、binarySearch通过二分搜索法进行查找,要求必须排好序

4、copyOf数组元素的复制

5、fill数组元素的填充

6、equals比较两个数组元素内容是否完全一致

7、asList将一组值转成成list

public class ArraysMethod02 {public static void main(String[] args) {// 1、Arrays.binarySearch// 要求数组是有序的,如果数组是无序的无法使用二分查找// 如果数组中不存在该元素,就返回-(low + 1)Integer[] arr = {1, 2, 90, 123, 567};int index = Arrays.binarySearch(arr, 90);System.out.println("index=" + index);// 2、Arrays.copyOf// 从arr数组中,拷贝arr.length个元素到newArr数组中// 如果拷贝的长度大于arr.length,就在新数组的后面增加null// 如果拷贝的长度小于0,就抛出异常NegativeArraySizeExceptionInteger[] newArr = Arrays.copyOf(arr, arr.length);System.out.println("==拷贝执行完毕后==");System.out.println(Arrays.toString(newArr));// 3、Arrays.fill// 使用99去填充num数组,可以理解成是替换原来的元素Integer[] num = new Integer[]{9,3,2};Arrays.fill(num, 99);System.out.println("==num数组填充后==");System.out.println(Arrays.toString(num));// 4、Arrays.equals// 如果arr和arr2数组元素完全一样,则返回true;Integer[] arr2 = {1, 2, 90, 123, 567};boolean equals = Arrays.equals(arr,arr2);System.out.println("equals=" + equals);// 5、Arrays.asList// 会将(2,3,4,5,6,1)数据转成一个List集合// asList的编译类型是List(接口)// asList的运行类型是java.util.Arrays$ArrayList(Arrays类的静态内部类)List asList = Arrays.asList(2,3,4,5,6,1);System.out.println("asList=" + asList);System.out.println("asList的运行类型:" + asList.getClass());}
}

九、BigInteger、BigDecimal

应用场景:

1、BigInteger适合保存比较大的整型

public class BigInteger_ {public static void main(String[] args) {BigInteger bigInteger1 = new BigInteger("66666666666666666666");BigInteger bigInteger2 = new BigInteger("100");System.out.println(bigInteger1);// 在对BigInteger进行加减乘除,需要使用相应的方法,不能直接+-*/System.out.println(bigInteger1.add(bigInteger2));System.out.println(bigInteger1.subtract(bigInteger2));System.out.println(bigInteger1.multiply(bigInteger2));System.out.println(bigInteger1.divide(bigInteger2));}
}

2、BigDecimal适合保存精度更高的浮点型

public class BigDecimal_ {public static void main(String[] args) {BigDecimal bigDecimal1 = new BigDecimal("1.11111119999999999999999");BigDecimal bigDecimal2 = new BigDecimal("1.666");System.out.println(bigDecimal1);System.out.println(bigDecimal1.add(bigDecimal2));System.out.println(bigDecimal1.subtract(bigDecimal2));System.out.println(bigDecimal1.multiply(bigDecimal2));//可能抛出异常ArithmeticException(除不尽)// 解决方案:调用divide方法时指定精度,BigDecimal.ROUND_CEILING就会保留分子的精度System.out.println(bigDecimal1.divide(bigDecimal2, BigDecimal.ROUND_CEILING));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【爬虫专区】批量下载PDF (无反爬)

天命:只要没反爬,一切都简单 这次爬取的是绿盟的威胁情报的PDF 先看一下结构,很明显就是一个for循环渲染 burp抓包会发现第二次接口请求 接口请求一次就能获取到了所有的数据 然后一个循环批量下载数据即可,其实没啥难度的 import requests,osres = requests.get("…

C++ 数论相关题目 台阶-Nim游戏

现在&#xff0c;有一个 n 级台阶的楼梯&#xff0c;每级台阶上都有若干个石子&#xff0c;其中第 i 级台阶上有 ai 个石子(i≥1 )。 两位玩家轮流操作&#xff0c;每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中&#xff08;不能不拿&#xff09;。 已经拿到地面…

鸿蒙会取代Android吗?听风就是雨

现在说取代还谈不上&#xff0c;毕竟这需要时间。安卓作为全球第一的手机操作系统&#xff0c;短时间内还无法取代。持平iOS甚至超过iOS有很大可能&#xff0c;最终会呈现“三足鼎立”有望超过安卓基数。 作为全新的鸿蒙操作系统&#xff0c;其现在已经是全栈自研底座。按照鸿…

linux --中断管理 -- irq的自动探测机制

irq自动探测机制 如果一个设备的驱动程序无法确定它说管理的设备的软件中断号irq&#xff0c;此时设备驱动程序可以使用irq的自动探测机制来获取其正在使用的irq。 使用自动探测机制的条件 内核与驱动&#xff0c;必须共同努力才能完成只限于非共享中断的情况 探测前&#…

vue3前端开发框架的安全特性,非常适合现在的市场需求

vue3前端开发框架的安全特性,非常适合现在的市场需求&#xff01;现在几乎所有的前端开发&#xff0c;都是使用的vue3做了开发。下面给大家展示一下。为什么说vue3框架自带安全特性呢。 如图&#xff0c;这个是我们在浏览器内看见的&#xff0c;渲染后的数据页面信息。很齐全。…

React中文官网已经搬迁了,原网址内容将不再更新

注意1&#xff1a;React中文官网已经搬迁至-React 官方中文文档&#xff0c;原网址内容将不再更新 注意2&#xff1a;React官网已经将React的定义由“用于构建用户界面的 JavaScript 库”更改为“用于构建 Web 和原生交互界面的库”。

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-5 Canvas 绘制三角形

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>Canvas 绘制三角形</title> </head><body><canvas id"cavsElem">您的浏览器不支持Canvas&#xff0c;请升级浏览器</canvas…

最快最便捷的pytest使用allure测试报告

一、前言 最近通过群友了解到了allure这个报告&#xff0c;开始还不以为然&#xff0c;但还是逃不过真香定律。 经过试用之后&#xff0c;发现这个报告真的很好&#xff0c;很适合自动化测试结果的展示。下面说说我的探索历程吧。 选用的项目为Selenium自动化测试Pytest框架…

k8s的operator基石:controller-runtime源码解析

写在之前 今天开始开更controller-runtime的源码阅读&#xff0c;笔者建议大家在阅读前了解以下知识&#xff0c;可能会帮助大家更好的理解源码逻辑。 1.client-go的基础使用 2. 使用kubebuilder搭建一个简单的controller-runtime环境 3.informer的基本思想 1.源码环境搭建 参…

代理模式(静态代理、JDK 动态代理、CGLIB 动态代理)

代理模式(静态代理、JDK 动态代理、CGLIB 动态代理) 一、代理模式概述1. 生活中的代理案例2. 为什么要使用代理3. 代理模式在 Java 中的应用4. 概述5. 生活中代理图示二、代理的实现方式1. Java 中代理图示2. 静态代理2.1 案例2.2 实现案例2.3 静态代理存在的问题三、动态代理…

SpringBoot的默认组件扫描

本篇博客主要探究&#xff1a;为什么SpringBoot项目中我们没有配置组件扫描的包&#xff0c;为什么它会默认扫描启动类所在的包&#xff1f; 一、访问与启动类所在同一包下的接口 我们先来看一个简单的接口&#xff1a; 我们可以观察到&#xff0c;HelloController这个类处在…

福布斯财富增长榜前十富豪身价暴增3.5万亿!他们致富的秘诀究竟是?

按照《福布斯》最新的数据显示&#xff0c;今年全球前十位财富增长最多的富豪的身家总共增加了4900亿美元&#xff08;约3.5万人民币&#xff09;&#xff0c;大家可能对于3.5万亿没什么概念&#xff0c;但是换算一下&#xff0c;中国一共才14亿人&#xff0c;如果把这3.5万亿平…

jenkins部署(docker)

docker部署&#xff0c;避免安装tomcat 1.拉镜像 docker pull jenkins/jenkins2.宿主机创建文件夹 mkdir -p /lzp/jenkins_home chmod 777 /lzp/jenkins_home/3.启动容器 docker run -d -p 49001:8080 -p 49000:50000 --privilegedtrue -v /lzp/jenkins_home:/var/jenkins_…

BUUCTF-Real-[PHP]XXE

目录 1、原理 2、XXE漏洞产生的原因 3、开始复现 paylaod 复现 4、flag 1、原理 XML数据在传输过程中&#xff0c;攻击者强制XML解析器去访问攻击者指定的资源内容&#xff08;本地/远程&#xff09;&#xff0c;外部实体声明关键字SYSTEM会令XML解析器读取数据&#xf…

【Axure教程0基础入门】00Axure9汉化版下载、安装、汉化、注册+01制作线框图

写在前面&#xff1a;在哔哩哔哩上面找到的Axure自学教程0基础入门课程&#xff0c;播放量最高&#xff0c;5个多小时。课程主要分为4个部分&#xff0c;快速入门、动态面板、常用动效、项目设计。UP主账号【Song老师产品经理课堂】。做个有素质的白嫖er&#xff0c;一键三连必…

【C/C++】深入理解--函数重载(什么是函数重载?为什么要有函数重载?)

目录 一、前言 二、 函数重载 &#x1f34e;什么是函数重载 &#x1f350;函数重载的条件 &#x1f347;函数重载的注意点 &#x1f349;为什么要有函数重载 &#x1f353;为何C语言不支持函数重载&#xff0c;反倒C可以&#xff1f; &#x1f4a6; Linux环境下演示函数重…

Cocos creator 动作系统

动作系统简介 是用于控制物体运动的一套系统&#xff0c;完全依赖代码进行实现&#xff0c;动态调节节点的移动。 移动 cc.moveTo 移动到某个坐标&#xff08;x,y&#xff09; //1秒时间内&#xff0c;移动到0,0let action1 cc.moveTo(1,0,0)this.node.runAction(action1)c…

基于单片机的烟草干燥温度控制系统设计

摘 要&#xff1a;烟草干燥研究一直备受国内外烟草工作者的重视&#xff0c;在烟草干燥的方法中热风管处理法是利用热空气对流使烟草达到干燥的效果&#xff0c;这样可以控制烟草干燥时的温度&#xff0c;使烟草能够更好更快地干燥&#xff0c;因此温度的检测和控制是很重要的。…

写静态页面——浮动练习

0、效果&#xff1a; 1、html代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>浮动…

C++-类和对象(2)

目录 5.类的作用域 6.类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 1.对象中包含类的各个成员 ​编辑 2.代码只保存一份&#xff0c;在对象中保存存放代码的地址 ​编辑 3.只保存成员变量&#xff0c;成员函数存放在公共的代码段 ​编辑…