![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
小镇攻城狮
吃饭的家伙要拿稳咯
展开
-
【Java基础】枚举(二)
jdk1.5之前,自定义枚举类}}/***自定义枚举类//1、声明Season对象的属性,使用privatefinal修饰privatefinalStringseasonName;//2、构造方法私有privateSeason(StringseasonName,StringseasonDesc){jdk1.5之后,使用enum关键字定义枚举类}}/***使用enum关键字定义枚举类,默认继承与java.lang.Enum类。...原创 2022-07-21 23:45:45 · 322 阅读 · 0 评论 -
【Java8新特性】Optional类
文章目录1 概述2 Optional类的方法3 总结参考资料1 概述到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类, Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到GoogleGuava的启发,Optional类已经成为Java8类库的一部分。Optional<T>类(java.util.Optional) 是一个容器类,它可以保存类型T的值,原创 2021-10-03 21:45:31 · 121 阅读 · 0 评论 -
【Java8新特性】Stream API
文章目录1 Stream的实例化1.1 通过集合创建1.2 通过数组创建1.3 通过Stream的of()1.4 创建无限流2 Stream的中间操作2.1 筛选与切片2.2 映射2.3 排序3 Stream的终止操作3.1 匹配与查找3.2 归约3.3 收集参考资料1 Stream的实例化1.1 通过集合创建// 集合获取stream@Testpublic void test1() { List<Employee> employees = EmployeeData.getEm原创 2021-10-03 20:46:52 · 143 阅读 · 0 评论 -
【Java8新特性】方法引用和构造器引用
文章目录1 方法引用1.1 概述1.2 使用示例2 构造器引用3 数组引用参考资料1 方法引用1.1 概述当要传递给Lambda体的操作,已经有实现的方法了,就可以使用方法引用。方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致。针对于第一、二种情况,第三种情原创 2021-10-02 21:37:24 · 75 阅读 · 0 评论 -
【Java8新特性】函数式接口
文章目录1 概述2 Java内置的函数式接口3 示例参考资料1 概述如果一个接口中,只声明了一个抽象方法,则此接口就称为函数式接口。@FunctionalInterfacepublic interface MyInterface { void method1();}可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。可以在一个接口上使用@Functionallnterface注原创 2021-10-02 19:50:05 · 120 阅读 · 0 评论 -
【Java8新特性】Lambda表达式
文章目录1 概述2 lambda表达式的语法3 lambda表达式的使用(6种情况)3.1 无参,无返回值3.2 一个参数,无返回值3.3 一个参数,数据类型可以省略3.4 一个参数,参数的小括号可以省略3.5 多个参数,多条执行语句,有返回值3.6 lambda体只有一条语句时,return与大括号都可以省略4 总结参考资料1 概述lambda是一个匿名函数,可以将其理解为一段可以传递的代码,将代码像数据一样传递。lambda表达式的本质:作为接口的实例。这个接口只能有一个方法,也叫函数式接原创 2021-10-02 11:38:39 · 76 阅读 · 0 评论 -
【Java反射】反射的应用:动态代理
文章目录1 代理设计模式的原理2 复习:静态代理3 实现:动态代理参考资料1 代理设计模式的原理使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。之前的代理机制,属于静态代理,特征是代理类和目标对象的类都是在编译期间确定下来,不利于程序的扩展。同时,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。最好可以通过一个代理类完成全部的代理功能。代理类和被代理类都需要实现同一个接口。原创 2021-10-01 16:36:04 · 82 阅读 · 0 评论 -
【Java基础】枚举
先看一段示例代码public enum CountryEnum { // ONE(1,"齐",v2,v3,v4...)可以放多个字段 ONE(1, "齐"), TWO(2, "楚"), THREE(3, "燕"), FOUR(4, "赵"), FIVE(5, "魏"), SIX(6, "韩"); private Integer retCode; private String retMessage; CountryEnum(Integer retCode, Str原创 2021-08-18 21:57:23 · 70 阅读 · 0 评论 -
【Java反射】通过反射调用类的实例方法
相关文章:步骤获取类对象通过类对象,获取Method对象通过Method对象的invoke方法,调用实例方法TestReflection4.javapackage study;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class TestReflection4 { public static void main(String[] args)原创 2021-06-17 17:02:12 · 5012 阅读 · 0 评论 -
【Java反射】通过反射访问类的私有属性
步骤获取类对象通过类对象,获取Field对象通过Field对象的set方法修改属性通过Field对象的get方法获取属性TestReflection3.javapackage study;import java.lang.reflect.Field;public class TestReflection3 { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessExcep原创 2021-06-17 16:30:36 · 4430 阅读 · 0 评论 -
【Java反射】通过类对象创建一个实例对象
步骤:获取类对象;通过类对象获取一个构造器对象;通过构造器对象获取实例对象。TestReflection2.javapackage study;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;public class TestReflection2 { public static void main(String[] args) throws Class原创 2021-06-17 15:57:42 · 4364 阅读 · 0 评论 -
【Java反射】类对象
1 概述在一个类加载器(ClassLoader)下,一个类,只能存在一个类对象,是单例的。类对象,就是用于描述这种类有什么属性和方法。要注意类对象和类的实例对象之间的区别。一个类可以有多个实例对象,但只能有一个类对象。2 获取类对象的三种方式2.1 准备实体类People.javapackage study;public class People { private int id; private String name; public int getId() {原创 2021-06-17 15:32:31 · 3478 阅读 · 0 评论 -
【Java基础】Predicate类
相关概念Predicate这个单词的英语含义是断言(假设)。它在Java中是一个接口,在java.util.function.Predicate包下。Predicate类常用作集合类型的流的过滤条件。使用样例import java.util.Arrays;import java.util.List;import java.util.function.IntPredicate;import java.util.function.Predicate;import java.util.stre原创 2021-06-11 16:31:36 · 17452 阅读 · 2 评论 -
【Java基础】IO流
文章目录1 分类2 四个抽象基类3 按`操作方式`分类结构图4 按`操作对象`分类结构图5 字节流和字符流6 BIO、NIO、AIO1 分类按照流的流向,可以分为输入流和输出流。按照操作单元,可以分为字节流和字符流。按照流的角色,可以分为节点流和处理流。2 四个抽象基类InputStream:字节输入流OutputStream:字节输出流Reader:字符输入流Writer:字符输出流3 按操作方式分类结构图4 按操作对象分类结构图5 字节流和字符流不管是文件读写还是原创 2021-05-27 10:38:35 · 2231 阅读 · 0 评论 -
【Java基础】transient关键字
1 序列化与反序列化序列化:将对象转化为字符串,持久化存储在文件中。public class Test { public static void main(String[] args) { Student student = new Student(); student.setName("tom"); student.setAddress("bei jing"); student.setAge(18); stud原创 2021-05-26 17:30:34 · 2031 阅读 · 0 评论 -
【Java基础】浅拷贝和深拷贝
1 基本类型public class Test { public static void main(String[] args) { int num1 = 10; // 新定义一个变量,将其指向num1 int num2 = num1; // 新定义一个变量,设置一个与num1相等的值 int num3 = 10; System.out.println("num1 = " + num1);原创 2021-05-26 16:13:08 · 74 阅读 · 0 评论 -
【Java基础】异常处理
1 异常类层次结构图说明:Throwable是一个类。Error大多与JVM相关,错误无法通过程序处理。Exception是程序可以处理的异常。2 finally块不会被执行的情况finally块的第一行发生了异常。前面的代码中执行了System.exit(int)。如果这行代码在异常语句之后,finally块还是会被执行。程序所在线程死亡。CPU被关闭。特别说明:当try块和finally块中都有return语句时,在方法返回之前,会执行finally块中的代码,而且在 f原创 2021-05-26 14:56:00 · 60 阅读 · 0 评论 -
【Java基础】final
final关键字可以修饰变量,方法,类。1 修饰变量如果变量是基本类型,则在初始化之后,值不能再改变如果是引用类型,初始化之后,不能再指向其它对象。但是其值可以改变。public class Test { public static void main(String[] args) { final int a[] = {1, 2, 3}; System.out.println(Arrays.toString(a)); a[0] = 0;原创 2021-05-26 14:26:34 · 97 阅读 · 0 评论 -
【Java基础】值传递和引用传递
文章目录1 概念2 举例2.1 一个方法不能修改一个基本数据类型的参数的值2.2 一个方法可以改变一个引用类型的参数的值2.3 一个方法不能让引用类型的参数引用一个新的对象3 总结1 概念值传递(call by value):表示方法接收到的是调用者提供的值。引用传递(call by reference):表示方法接收到的是调用者提供的变量地址。方法不能修改传递值时,所对应的变量值。但是可以修改传递引用时,所对应的变量值。2 举例2.1 一个方法不能修改一个基本数据类型的参数的值publi原创 2021-05-26 11:36:54 · 161 阅读 · 1 评论 -
【Java基础】hashCode()方法
hashCode()方法定义在Object类中,任何类都包含hashCode()方法。hashCode()方法的返回值是一个int整数,作用是获取哈希码(散列码),用来确定该对象在哈希表(散列表)中的索引位置。hashCode()在哈希表中才有用,在其他情况下没用。相关文章:HashSet如何检查重复如果两个对象相等,则hashCode()方法的返回值(即hashcode值)一定相等。如果两个对象的hashcode值相等,那么这两个对象不一定相等。参考资料Java hashCode.原创 2021-05-26 10:17:33 · 444 阅读 · 0 评论 -
【Java基础】==与equals的区别
1 ==比较当==两侧是基本类型时,比较的是值。当==两侧是引用类型时,比较的是内存地址。public class Test { public static void main(String[] args) { // 基本类型 System.out.println(5 == 5.0); // true System.out.println(5 == 4.9999999999999999); // true System.out原创 2021-05-26 09:31:06 · 103 阅读 · 0 评论 -
【Java基础】抽象类和接口
1 变量接口中变量默认为static final,抽象类则不一定2 方法接口方法默认public,还可以是protect,抽象类方法可以有public、protected、default,不能使用private修饰。方法在接口中不能有实现(Java 8可以有默认实现),抽象类中可以有非抽象方法。接口在JDK1.7版本只能有常量和抽象方法;在JDK1.8版本可以有默认方法和静态方法(静态方法要加上方法体);在JDK1.9版本引入了私有方法和私有静态方法。interface fruit {原创 2021-05-25 14:08:41 · 61 阅读 · 0 评论 -
【Java基础】String、StringBuffer、StringBuilder
1 可变性String类使用final修饰的字符数组来保存字符串,所以String对象是不可变的。StringBuilder和StringBuffer都继承自AbstractStringBuilder类,使用字符数组保存字符串,但是没有用final关键字修饰,所以这两种对象是可变的。2 线程安全性String对象是不可变的,线程安全。StringBuffer对方法加了同步锁,或者对调用的方法加了同步锁,线程安全。StringBuilder没有加同步锁,线程不安全。3 性能Strin原创 2021-05-25 11:43:21 · 170 阅读 · 0 评论 -
【Java基础】封装、继承、多态
1 封装封装是把一个类的属性私有化,同时提供公有的get和set方法,用来访问和设置属性。class Person { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() {原创 2021-05-25 10:49:35 · 56 阅读 · 0 评论 -
【Java基础】重载和重写
区别重载重写发生范围同一个类(如构造方法)父子类参数列表(类型、数量、顺序)必须修改不能修改返回类型可修改不能修改访问修饰符可修改访问权限>=父类异常可修改异常范围<=父类发生阶段编译时运行时补充:当父类方法被private、final、static修饰时,子类不能重写该方法,但是被static修饰的方法能够再次被声明。构造方法不能被重写...原创 2021-05-24 21:07:53 · 99 阅读 · 0 评论 -
【Java基础】JDK、JRE、JVM
1 JDKJDK是Java开发工具包,包含了JRE、编译器(javac)和工具(javadoc、jdb),能够创建和编译程序。2 JREJRE是Java运行时环境。包含了JVM、Java类库、Java命令等,能够运行已经编译的程序,不能创建和编译程序。3 JVMJVM是Java虚拟机,可以运行Java字节码,即后缀是.class的类文件。常见的JVM有Oracle HotSpot、Oracle JRockit、IBM JVM。Java从源代码到机器码的过程:从源代码到字节码是编译执行,从字节原创 2021-05-24 17:49:07 · 155 阅读 · 0 评论 -
【Java基础】面向对象与面向过程、编译型语言与解释型语言
1 面向对象与面向过程面向过程:类调用需要实例化,开销大,比较消耗资源,所以当性能是最重要的因素是,比如单片机、嵌入式开发、Linux、Unix等一般采用面向过程开发。常见语言:C。面向对象:面向对象易维护、易复用、易扩展。面向对象具有封装、继承、多态的特定,可以设计出低耦合的系统,但是比面向过程性能低。常见语言:C++、Java、Python、C#、Go、JavaScript、PHP等。2 编译型语言与解释型语言计算机不能理解高级语言,使用任何高级语言编写的程序必须转换成机器语言,才能被计算机原创 2021-05-24 17:12:56 · 1287 阅读 · 0 评论 -
【Arrays包】获取数组的最大值和最小值
通常我们获取一个数组中的最大值和最小值,会有如下三种方法:1 遍历数组int[] nums = {3, 1, 5, 2, 4};int max = nums[0];int min = nums[0];for (int i = 1; i < nums.length; i++) { max = Math.max(max, nums[i]); min = Math.min(min, nums[i]);}System.out.println("数组中的最大值:" + max);原创 2021-05-23 23:18:25 · 2527 阅读 · 0 评论 -
【Java字符串】字符串组成的数字,去掉前面的零
举个例子,有一个字符串String num = "000123000456000",如果要转换成数字形式,则需要去掉前面的零。如果字符串很长,就不能通过Integer.parseInt(num)直接转换成整型。可以通过遍历的形式去掉前面的零。参考代码(Java)public class Test{ public static void main(String[] args) { String num = "000123000456000"; StringBuild原创 2021-05-08 23:51:35 · 6050 阅读 · 0 评论 -
【Java】和运算与模运算避免溢出的操作
两个数进行相加操作或者相乘后取模操作,存在溢出的可能。我们需要在计算中避免这样的情况。下面是两个常用的操作:1 和运算避免溢出// 原语句,常用于二分法(a + b) / 2// 更改后的语句a + (b - a) / 22 模运算避免溢出// 原语句(a * b) % m// 更改后的语句(a % m) * (b % m) % m...原创 2021-05-06 17:02:56 · 2528 阅读 · 0 评论 -
【Java位运算】异或运算的使用
异或运算有个特性:两个相同的数做异或运算,结果为0。n ^ n = 0;常用的方式是查找数组中只出现一次的数字。例如:在一个数组中,只有一个数字出现了一次,其余数字都出现了两次。求这个数字。利用异或运算的特性进行计算则非常简单。public class T_14 { public static void main(String[] args) { int nums[] = new int[]{1, 1, 2, 2, 3, 4, 4, 5, 5}; in原创 2021-04-16 17:19:49 · 1559 阅读 · 0 评论 -
【Java数组】使用lambda表达式对包装类数组和字符串数组进行排序
通过工具类Arrays可以实现对数组的排序操作。再加上lambda表达式,可以实现逆序排序的操作,不过好像对基本类型的数组不支持。包装类型数组升序和降序排列public class Test { public static void main(String[] args) { Integer a[] = new Integer[]{1, 3, 5, 2, 4, 6}; System.out.println("排序前:"); System.out.p原创 2021-04-10 22:08:09 · 2462 阅读 · 0 评论 -
【Java位运算】n&1和n>>1含义
相关文章,配合食用:Java中去除整数二进制的最后一个1(位操作)位运算是执行效率非常高的运算,刷题中,有时候使用会有奇效。但位运算还是不太好理解的,这里记录两个常用的位运算。n&1n&1:与操作,判断 n 二进制最右一位是否为 1 。// 若等于1,表示最右一位是1;// 否则是0.if ((n & 1) == 1) { ...}记得判断中的括号不能省略,否则会优先运算1==1,导致报错。n>>1n>>1:移位操作,删除n二进原创 2021-04-02 15:23:09 · 16042 阅读 · 1 评论 -
【Java】Java中空字符的写法
首先要明确空字符和空格字符的区别空字符表示数据为空;空格字符表示数据不为空,为一个空格字符。Java和C++中使用'\0'表示空字符,Python使用''表示空字符。public class Test { public static void main(String[] args) { char s[] = new char[]{'a', 'b', 'c', 'd', 'e'}; for (char ss : s) { System.o原创 2021-04-01 15:14:48 · 8570 阅读 · 0 评论 -
【Java字符串】正则表达式匹配
Java中经常会碰到一道题,就是字符串的匹配。正常做的话是一道难度比较大的题目,且比较复杂。其实可以通过内置的Pattern类快速解决。import java.util.regex.*;public boolean match (String str, String pattern) { return Pattern.matches(pattern, str); }...原创 2021-03-25 15:09:55 · 2969 阅读 · 0 评论 -
Java中语法常见考点
1 static 不能修饰局部变量// 如下代码会报错public class Test { public static void main(String args[]) { static int z=2; System.out.println(z); }}/**解释:被static修饰的变量称为静态变量,静态变量属于整个类;而局部变量属于方法,只在该方法内有效。*/2 Java中解决哈希冲突的方法1.开放地址法2.链地址法(拉链法)原创 2021-01-30 07:57:16 · 338 阅读 · 0 评论 -
【Java位运算】Java中去除整数二进制的最后一个1(位操作)
n&(n-1)为去除整数二进制的最后一个1参考代码public class Test { public static void main(String[] args) { // 5的二进制表示为:101 // 去掉二进制最后一个1,则为:100 // 转换成10进制为:4 System.out.println(5&(5-1)); // 4 // 1010 System.out.prin原创 2021-01-08 10:54:26 · 1587 阅读 · 0 评论 -
【Java位运算】Java中整数取反(位操作)
看到了一道这样的题:int i = 5;int j = 10;System.out.println(i + ~j);~j是取反操作,这样的操作在刷题中经常能看到,相似的操作还有求反码和补码。这里引入一个非常简便的求取反结果的公式,不用转化成二进制计算。-n=~n+1可以得出:~j = -j-1,所以上题的输出结果为5-11=-6。...原创 2020-10-07 10:43:50 · 3933 阅读 · 0 评论 -
【Java基础】获取键盘输入的两种方式
在刷题中,经常需要输入的功能,但是Java中有好几种方式用来实现输入功能。常用的Scanner有时候会遇到一些奇怪的问题,这时可以用BufferedReader作为替代,并且它的耗时更低。import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class test { public static void main(String[] args) throws原创 2020-09-27 15:37:26 · 1056 阅读 · 0 评论 -
Java中BigInteger的常用操作
在Java中BigInteger常用于描述比long类型还要大的数,在大整数的四则运算中常常用到。这篇博客记录下BigInteger常用的操作。1 四则运算import java.math.BigInteger;public class test { public static void main(String[] args) { // 声明BigInteger对象 BigInteger bi1 = new BigInteger("123456789"); // 括号内是一个字符串原创 2020-09-16 16:43:51 · 1031 阅读 · 0 评论