Math类的使用。
- Math用于做数学运算。
- Math类中的方法全部是静态方法,直接用类名调用即可。
- 方法:
- public static int abs(int a) 获取参数a的绝对值
- public static double ceil(double a) 向上取整
- public static double floor(double a) 向下取整
- public static double pow(double a, double b) 获取a的b次幂
- public static long round(double a) 四舍五入取整
System系统类
- System代表当前系统。
- 静态方法:
- 1.public static void exit(int status):终止JVM虚拟机,非0是异常终止。
- 2.public static long currentTimeMillis():获取当前系统此刻时间毫秒值。
- 3.可以做数组的拷贝。
- arraycopy(Object var0, int var1, Object var2, int var3, int var4);
- 使用:参数一:原数组;参数二:从原数组的哪个位置开始赋;参数三:目标数组;参数四:赋值到目标数组的哪个位置;参数五:赋值几个。
BigDecimal大数据类
- 浮点型运算的时候直接+ * /可能会出现数据失真(精度问题)。
- BigDecimal以解决浮点型运算数据失真的问题。
- BigDicimal类:
- 包:java.math.
- 创建对象的方式(最好的方式:)public static BigDecimal valueOf(double val) :包装浮点数成为大数据对象。
- 使用:
double a = 0.1;
BigDecimal a1 = BigDecimal.valueOf(a);
double rs = a1.doubleValue();
- 使用:
- BigDecimal只是解决精度问题的手段,double数据才是我们的目的
- 方法声明
- public BigDecimal add(BigDecimal value) 加法运算
- public BigDecimal subtract(BigDecimal value) 减法运算
- public BigDecimal multiply(BigDecimal value) 乘法运算
- public BigDecimal divide(BigDecimal value) 除法运算
- public double doubleValue():把BigDecimal转换成double类型。
包装类
- 引入:Java认为一切皆对象。java数据类型中引用数据类型是对象,但是在Java中8种基本数据类型不是对象,只是表示一种数据的类型形式,显得很突兀。Java为了一切皆对象的思想统一,把8种基本数据类型转换成对应的类,这个类称为基本数据类型的包装类。类本身也是对象,成为类对象
- byte Byte
- short Short
- int Integer
- long Long
- float Float
- double Double
- char Character
- boolean Boolean
- 自动装箱:可以直接把基本数据类型的值或者变量赋值给包装类。
Integer a1 = 12;
- 自动拆箱:可以把包装类的变量直接赋值给基本数据类型。
Integer c = 100; int c1 = c;
- 包装类的特殊功能
- 包装类作为类首先拥有了Object类的方法。
- 包装类作为引用类型的变量可以存储null值。
- 具体来看特殊功能主要有:
- 可以把基本数据类型的值转换成字符串类型的值,调用toString()方法。
Integer it = 100;
- 1、调用
Integer.toString(基本数据类型的值)
得到字符串(没有什么用)。String itStr = it.toString();
- 2、直接把基本数据类型**+**空字符串就得到了字符串 (推荐使用)。
String itStr = it + "";
- 1、调用
- 把字符串类型的数值转换成对应的基本数据类型的值。
String numStr = "23";
- – Xxx.parseXxx(“字符串类型的数值”) (没有什么用)
int numInt = Integer.parseInt(numStr);
- – Xxx.valueOf(“字符串类型的数值”):(推荐使用)
int numInt = Integer.valueOf(numStr);
- – Xxx.parseXxx(“字符串类型的数值”) (没有什么用)
- 可以把基本数据类型的值转换成字符串类型的值,调用toString()方法。
正则表达式
- 作用:是一些特殊字符组成的校验规则,可以校验信息的正确性,校验邮箱是否合法。
- 字符类:默认只能校验一个
[abc]
a、b或c(简单类)[^abc]
任何字符,除了a、b或c(否定)[a-zA-Z]
a 到 z 或 A 到 Z,两头的字母包括在内(范围)[a-d[m-p]]
a到d和m到 p:[a-dm-p]
(并集)[a-z&&[def23]]
d、e 或 f(交集)[a-z&&[^bc]]
a 到 z,除了 b 和 c:[ad-z]
(减去)[a-z&&[^m-p]]
a 到 z,而非 m 到 p:[a-lq-z]
(减去)
- 预定义字符类:默认只能校验一个
.
任何字符\d
数字:[0-9]
\D
非数字:[^0-9]
\s
空白字符:[\t\n\x0B\f\r]
\S
非空白字符:[^\s]
\w
单词字符:[a-zA-Z_0-9]
\W
非单词字符:[^\w]
- Greedy 数量词
X?
,X一次或一次也没有X*
,X零次或多次X+
,X一次或多次X{n}
,X恰好 n 次X{n,}
,X至少 n 次X{n,m}
,X至少 n 次,但是不超过 m 次
- 使用:
"dsd2".matches("[a-zA-Z0-9]{4}") //true
- 邮箱:
email.matches("\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2}")
- 手机号:
tel.matches("1[3-9]\\d{9}")
- 扩展:
String str="小李lv434fda324小强87632fad2342423小画";
- public String[] split(String regex)
String[] nameArrs = str.split("\\w+");
- public String replaceAll(String regex,String newStr)
str.replaceAll("\\w+", "/")
- public String[] split(String regex)
- 字符串遍历
String qq="1243542234";
for (int i = 0; i < qq.length(); i++) {char ch = qq.charAt(i);}
泛型
-
泛型就是一个标签:<数据类型>
-
泛型可以在编译阶段约束只能操作某种数据类型。
-
注意:JDK 1.7开始之后,泛型后面的申明可以省略不写。
-
泛型和集合都只能支持引用数据类型,不支持基本数据类型。
-
泛型的好处:泛型在编译阶段约束了操作的数据类型,从而不会出现类型转换异常。
-
自定义泛型类
class 类名<泛型变量>{}
- 泛型变量建议使用 E , T , K , V
- 核心思想:把出现泛型变量的地方全部替换成传输的真实数据类型。
-
自定义泛型方法
- 格式:
修饰符 <泛型变量> 返回值类型 方法名称(形参列表){}
- 注意:方法定义了是什么泛型变量,后面就只能用什么泛型变量。
- 泛型类的核心思想:是把出现泛型变量的地方全部替换成传输的真实数据类型。
-
public static <T> String arrToString(T[] nums) {StringBuilder sb = new StringBuilder();sb.append("[");if (nums != null && nums.length > 0) {for (int i = 0; i < nums.length; i++) {T ele = nums[i];sb.append(i == nums.length - 1 ? ele : ele + ", ");}}sb.append("]");return sb.toString(); }
- 格式:
-
自定义泛型接口
- 格式:
interface 接口名称<泛型变量>{}
- 泛型接口的核心思想,在实现接口的时候传入真实的数据类型,样重写的方法就是对该数据类型进行操作。
- 格式:
-
泛型通配符?
?
可以用在使用泛型的时候代表一切类型。public static void run(ArrayList<?> cars) {}
? extends Car
:那么**?必须是Car**或者其子类。(泛型的上限)public static void run(ArrayList<? extends Car> cars) {}
? super Car
:那么**?必须是Car**或者其父类。(泛型的下限。不是很常见)E , T , K , V
是在定义泛型的时候使用代表一切类型。
数组和集合
-
数组
- 1、Java语言中的数组是一种引用数据类型;不属于基本数据类型。
- 2、数组当中既可以存储“基本数据类型”的数据,也可以存储“引用数据类型”的数据(数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是内存地址值)。
- 3、数组是有对应的类,这个类是在JVM运行时创建的,所以没有对应的class 文件;(通过数组创建语法 int[] a = {1, 100, 10, 20}; 可看出,无法查看 数组类,以及源码);数组的父类是Object。
- 4、数组一旦创建,在java中规定,长度不可变。
- 5、java中的数组要求数组中元素的类型统一。比如int类型数组只能存储int类型,自定义Person类型数组只能存储Person类型。
- 6、数组在内存方面存储的时候,内存地址连续。 这是数组存储元素的特点。数组实际上是一种简单的数据结构。
- 7、所有的数组都是拿“第一个小方框的内存地址”作为整个数组对象的内存地址。 (数组中首元素的内存地址作为整个数组对象的内存地址。)
- 8、数组中每一个元素都是有下标的,下标从0开始,以1递增。最后一个元素的下标是:length - 1 下标非常重要,因为我们对数组中元素进行“存取”的时候,都需要通过下标来进行。
-
集合的由来:数组长度是固定的,当添加的元素超过了数组的长度时需要对数组重新定义, 这样太过繁琐。因此,Java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少。
-
区别
1、数组既可以存储基本数据类型,又可以存储引用数据类型(基本数据类型存储的是值, 引用数据类型存储的是地址值),集合只能存储引用数据类型(对象), 集合中也可以存储基本数据类型,但是在存储的时候会自动装箱(JDK1.5新特性)变成对象。
2、数组的长度是固定的,集合长度是可以改变的。
3、定义数组时必须指定数组元素类型,集合默认其中所有元素都是Object。
4、无法直接获取数组实际存储的元素个数,数组使用length获取数组的长度,但集合可以通过size()直接获取集合实际存储的元素个数。
5、集合有多种实现方式和不同的适用场合,如List,Set,Map等;而不像数组仅采用分配连续的空间方式。
6、集合以接口和类的形式存在,具有封装,继承和多态等类的特性,通过简单的方法和属性调用即可实现各种复杂的操作,大大提高软件的开发效率。
集合
- 集合是一个大小可变的容器。
- 容器中的每个数据称为一个元素。数据==元素。
- 集合的特点是:类型可以不确定,大小不固定。集合有很多种,不同的集合特点和使用场景不同。
- 数组:类型和长度一旦定义出来就都固定了。
- 集合的作用:
- 在开发中,很多时候元素的个数是不确定的。
- 而且经常要进行元素的增删该查操作,集合都是非常合适的。
- Java中集合的代表是:Collection,它是Java中集合的祖宗类。
- Collection集合的体系:
- Collection(接口)
- Set(接口)
- HashSet****(实现类)
- LinkedHashSet<>(实现类)
- TreeSet<>(实现类)
- HashSet****(实现类)
- List****(接口)
- ArrayList****(实现类)
- LinekdList<>(实现类)
- Vector<>(实现类)
- Set(接口)
- Collection(接口)
- 集合的特点:
- Set系列集合:添加的元素是无序,不重复,无索引的。
- – HashSet:同父类Set一致。
- LinkedHashSet:添加的元素是有序,不重复,无索引的。
- – TreeSet:不重复,无索引,按照大小默认升序排序
- – HashSet:同父类Set一致。
- List系列集合:添加的元素是有序,可重复,有索引。
- – ArrayList:同父类List一致。
- – LinekdList:同父类List一致。
- –Vector:是线程安全的,速度慢,工作中很少使用。
- Set系列集合:添加的元素是无序,不重复,无索引的。
- Collection集合的常用API
- public boolean add(E e):把给定的对象添加到当前集合中 。
- public void clear() :清空集合中所有的元素。
- public boolean remove(E e):把给定的对象在当前集合中删除。
- public boolean contains(Object obj):判断当前集合中是否包含给定的对象。
- public boolean isEmpty():判断当前集合是否为空。
- public int size(): 返回集合中元素的个数。
- public Object[] toArray(): 把集合中的元素,存储到数组中。
- Collection集合的遍历方式
- 迭代器
- public Iterator iterator():获取集合对应的迭代器,用来遍历集合中的元素的。
Iterator<String> it = lists.iterator();
- E next():获取下一个元素值。
- boolean hasNext():判断是否有下一个元素,有返回true ,反之。
while (it.hasNext()) { System.out.println(it.next());}
- public Iterator iterator():获取集合对应的迭代器,用来遍历集合中的元素的。
- foreach(增强for循环)
- JDK 1.8开始之后的新技术Lambda表达式
lists.forEach(s -> {System.out.println(s);});
lists.forEach(s -> System.out.println(s));
lists.forEach(System.out::println);
- 迭代器
ps:b站课程《黑马程序员Java13天进阶》根据官方笔记结合自身情况整理的笔记
视频链接